Llamar el código corto en el resultado de las tiras wp_localize_script

4

Estoy trabajando para agregar algunas funciones en un complemento de Wordpress que, después de un cierto clic, debe llamar a algún código abreviado a través de ajax.

Lo primero que intenté fue llamar al código abreviado dentro del procesamiento ajax en mi archivo functions.php:

add_action( 'wp_ajax_nopriv_showads', 'showads' );

function showads(){

    echo do_shortcode('[myshortcode]');

    wp_die();
}

Donde movería la salida del código abreviado en la respuesta de la llamada ajax. Este código abreviado no se ejecutó en absoluto.

Entonces, después de algunas investigaciones en la función "wp_localize_script" dentro del complemento, llamaría al código corto:

    wp_localize_script( 'script-handle', 'ajax_object', 
                      array('ajaxurl' => admin_url( 'admin-ajax.php' ),
                            'adspace' => do_shortcode( '[myshortcode]' ) 
    ));

Y en la respuesta del ajax movería la salida del shortcode.

El problema que tengo en este momento es que tan pronto como la función "wp_localize_script" se denomina salida del código corto (debería crear un anuncio de Google) se elimina.

Me gustaría saber si hay una forma de no eliminar la salida de shortcode o de recibir un consejo si estoy tratando de resolver todo esto de manera incorrecta.

    
pregunta thairish 24.05.2016 - 21:01

2 respuestas

0

Intenta agregar ob_start (); y ob_clean (); Para mostrar la función, podría ser mejor no romper la salida.

function showads(){
    ob_start();
    echo do_shortcode('[myshortcode]');
    $result = ob_clean();
    return $result;
    exit();
}
    
respondido por el Benoti 29.09.2016 - 09:09
0

Al regresar de la función, debe usar ob_start() y ob_get_clean() , solo podrá obtener el resultado en el lugar donde lo necesite.

ob_start () :

ob_start - Activar el búfer de salida

Esta función activará el búfer de salida. Mientras el búfer de salida está activo, no se envía salida desde el script (aparte de los encabezados), en lugar de eso, la salida se almacena en un búfer interno.

Los buffers de salida son apilables, es decir, puedes llamar a ob_start () mientras que otro ob_start () está activo. Solo asegúrese de llamar a ob_end_flush () el número apropiado de veces. Si hay múltiples funciones de devolución de llamada activas, la salida se filtra secuencialmente a través de cada una de ellas en orden de anidamiento.

ob_get_clean():

ob_get_clean - Obtener el contenido del búfer actual y eliminar el búfer de salida actual

ob_get_clean() esencialmente ejecuta tanto ob_get_contents() como ob_end_clean() .

El búfer de salida debe iniciarse con ob_start() con el indicador PHP_OUTPUT_HANDLER_CLEANABLE . De lo contrario, ob_get_clean() will not work .

Ejemplo :

function event_form()
{
  ob_start();
  include('event_form.php');// You can include or print the short-code over here
  $output = ob_get_clean();
  return $output;
}
    
respondido por el Naresh Kumar .P 29.09.2016 - 09:15

Lea otras preguntas en las etiquetas