Incluyendo javascript para un shortcode

2

Estoy creando un complemento que le permite a un usuario usar un shortcode. Este código abreviado depende de un montón de Javascript que debe estar presente una vez que se cargue el código abreviado.

Tengo problemas para decidir cuándo y dónde cargar el javascript. Las partes del código que escupe el código abreviado son elementos que deben estar presentes, pero no están disponibles para ser utilizados por jQuery.

¿Existe una forma específica de cargar y adjuntar scripts en los que se basa un código abreviado?

function build_total_search_method( $atts ) {

    $shorcode_php_function = include( dirname(__FILE__) . "/includes/total_search.php" );

    return $shorcode_php_function;

}
add_shortcode( 'total_search', 'build_total_search_method' );

Esto parece funcionar, pero también imprime un 1 en la página. ¿Está bien este método?

    
pregunta dcolumbus 21.01.2013 - 21:23

2 respuestas

4

Use wp_enqueue_script en su controlador de código corto, en WordPress > = 3.3, se agregará a la página en La acción wp_footer . Pase cualquier información que necesite de PHP a JavaScript a través de wp_localize_script .

    
respondido por el Milo 21.01.2013 - 21:34
0

El wp_enqueue_script() incluye el wp_localize_script() es la solución correcta. Analizar los argumentos del shortcode o poner en cola siempre el script.

Si tiene muchos datos y los usará en un objeto Json. Algunas sugerencias, que deberían ayudar, si se trata de problemas o que se vinculan directamente a las soluciones a través de JSON. La función wp_localize_script() decodifica las entidades HTML, lo cual es importante, pero no siempre es la solución perfecta. La función utiliza json_encode() , que puede permitir problemas en matrices multidimensionales en relación con la decodificación de entidades. La solución alternativa es enviar datos como objeto json, como el ejemplo a continuación.

add_action( 'admin_enqueue_scripts', 'fb_print_scripts' );
function fb_print_scripts() {
    global $current_screen;

    if ( isset( $current_screen -> id ) && ! in_array( $current_screen -> id, array( 'post', 'page' ) ) )
        return;

    if ( is_plugin_active_for_network( plugin_basename( __FILE__ ) ) )
        $options = get_site_option( 'my_options_id' );
    else
        $options = get_option( 'my_options_id' );

    if ( ! $options )
        return;
    ?>
    <script type="text/javascript">
        var my_json_object = <?php echo json_encode( $options ); ?>;
    </script>
    <?php
}
    
respondido por el bueltge 21.01.2013 - 23:53

Lea otras preguntas en las etiquetas