¿Cómo incluir código solo en páginas específicas?

13

Estoy aprendiendo sobre complementos y códigos cortos. Noté que cuando activo mi complemento, su código se carga en todas mis páginas, incluso en las que no tienen mi código corto. (No me refiero al contenido frente a las páginas de administración). En algunas páginas de contenido, uso un shortcode en particular y en otras páginas de contenido, no, pero en cualquier caso, el código del complemento se carga. ¿Cómo hago para que el complemento se incluya solo en las páginas donde se usa el shortcode?

Más detalles:

Digamos que tengo un complemento que hace una caja de luz. Activo el plugin. En mi página "Imágenes geniales", uso shortcode para hacer una caja de luz. Cuando verifico Ver código fuente en mi página "Acerca de", que no usa el shortcode de lightbox, veo que el código del plugin de lightbox se ha cargado. Mis páginas se cargarán más rápido si escribo mi complemento para que su código solo se cargue en las páginas donde se necesita. es posible? De lo contrario, tendré código para muchos complementos cargados en páginas innecesariamente. ¿Alguna idea?

    
pregunta Laxmidi 08.01.2012 - 18:23

6 respuestas

8

WP v3.3 nos dio la capacidad de ejecutar wp_enqueue_script en el medio de una página. Ticket 9346

Esto ha hecho mucho más fácil incluir su JS con mejor granularidad (al usar códigos cortos, al menos). Aquí, jQuery solo se incluirá cuando se active nuestro código abreviado.

function get_slideshow() {
  // Do some stuff...

  // Load up scripts right from within our shortcode function (requires WP 3.3+)
  wp_enqueue_script( 'jquery', array(), null, true  ); 

  return;
}
add_shortcode( 'cool_slideshow', 'get_slideshow' );
    
respondido por el Dave Romsey 25.01.2012 - 08:02
2

Comprueba las variables de la IU del administrador

Un elemento del menú es un caso especial: comentarios, ya que se registran con el add_WHATEVER_(submenu)page() API.

// All need to be stated as beeing global
global $pagenow, $typenow, $hook_suffix, $parent_file, $submenu_file, $post_type_object;
if ( 'THE-OUTPUT.php' === $WHATEVER_YOU_CHOOSE_TO_CHECK )
    // do stuff

Estos son no conformes y codificados en wp core. Tenga en cuenta que no todas están configuradas en todas las páginas.

Enganche en enganches de IU de administrador específicos de la página

También hay enlaces especiales, específicos para cada página, que puedes consultar en admin-footer.php y admin-header.php :

// Examples:
// Header
"admin_head-$hook_suffix"
"admin_print_styles-$hook_suffix"
"admin_print_scripts-$hook_suffix"
// Footer
"admin_footer-$hook_suffix"

Algunos ejemplos en el mundo real: Pantalla de publicación

// Examples how the result looks like
admin_print_styles-post.php
admin_print_styles-post-new.php

Luego también está el $hook_suffix con el que puedes verificar la puesta en cola de los scripts, justo cuando estás conectando tu acción:

do_action( 'admin_enqueue_scripts', $hook_suffix );

Actualizar

Para obtener un acceso más fácil (1-clic) a estos datos / información, creamos un complemento disponible para desarrolladores, de fácil acceso, denominado "(WCM) Current Admin Info" , que está disponible en GitHub . El complemento también se puede encontrar en el futuro cercano en repositorio oficial de wp.org .

Capturas de pantalla

Para obtener una vista previa de lo que obtienes con este complemento:

    
respondido por el kaiser 09.01.2012 - 02:06
0

Podría hacer algo en la línea de (en el header.php):

<?php
        if ( have_posts() && ( is_page() || is_single() ) ) {
            $content = get_the_content(the_post());
            if ( stripos( $content , '[your-shortcode') ) { function_for_scripts(); } 
        }   
?>

Comprueba si la carga actual es de página o publicación, luego agarra el contenido y busca tu shortcode. Al encontrarlo, ejecuta tu función.

    
respondido por el Noel Tock 08.01.2012 - 19:28
0

La forma más sencilla es simplemente verificar el código corto.

function your_scripts()
{ 
    global $post;
    wp_register_script('your-script',$the_path_to_your_script,'0.1',true);
    if ( strstr( $post->post_content, '[your-shortcode' ) ) 
    {
        wp_enqueue_script('your-script');
    }
}
add_action( 'wp_enqueue_scripts', 'your_scripts');
    
respondido por el matchdav 09.01.2012 - 20:17
0

@kaiser señaló get_shortcode_regex() varias veces en este hilo, solo pensé en dar un ejemplo sobre cómo usarlo. El código se toma en gran medida de la página de referencia de código de get_shortcode_regex() WordPress.

function enqueue_script_if_shortcode_is_detected() {
    global $post;

    wp_register_script( 'your-script', $the_path_to_your_script, '1.0', true );

    $pattern = get_shortcode_regex();

    if (   preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches )
        && array_key_exists( 2, $matches )
        && in_array( 'your-shortcode', $matches[2] )
    ) {
        wp_enqueue_script('your-script');
    }
}
add_action( 'wp_enqueue_scripts', 'enqueue_script_if_shortcode_is_detected' );
    
respondido por el Nicolai 03.03.2016 - 17:15
-3

Encontré esta solución :

add_action( 'wp_print_scripts', 'my_deregister_javascript', 100 );

function my_deregister_javascript() {
    wp_deregister_script( 'my_scripts_handle' );
}
    
respondido por el Laxmidi 25.01.2012 - 07:06

Lea otras preguntas en las etiquetas