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

14

Estoy aprendiendo sobre complementos y códigos cortos. Me di cuenta de que cuando activo mi complemento, su código se carga en todas mis páginas, incluso en las páginas que no tienen mi código corto. (No me refiero a contenido vs. páginas de administrador). En algunas páginas de contenido, uso un shortcode particular y en otras páginas de contenido, no lo hago, 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?

Mas detalle:

Digamos que tengo un complemento que hace una caja de luz. Activo el complemento. 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 código abreviado de lightbox, veo que se ha cargado el código del complemento lightbox. 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. ¿Algunas ideas?

Laxmidi
fuente
1
¿Está intentando poner en cola algo o está intentando ejecutar un script PHP en páginas que tienen el código corto?
mor7ifer
+1 @ m0r7if3r - También me gustaría entender que ... Los enfoques serían muy diferentes
krembo99
@ mrOr7if3r, gracias por el mensaje. Por ejemplo, digamos que tengo un complemento de Google Maps. ¿Se debe cargar ese complemento en cada página, es decir, en las páginas que no usan el complemento? Digamos que tengo una página "Acerca de" que no tiene el código abreviado de Google Maps. Si miro Ver código fuente, veo que el código del complemento se cargó en esa página (evento aunque no lo estoy usando). ¿Se debe cargar el código de los complementos en cada página? Gracias.
Laxmidi
Buena pregunta que, en mi opinión, conduce a la (nueva) mejor práctica, ya que WP ahora nos permite poner en secuencia los scripts en cualquier momento.
Raphael

Respuestas:

9

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

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

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' );
Dave Romsey
fuente
1
Así es como debe hacerse, en mi opinión.
Raphael
1
Excelente, no me había dado cuenta de que ahora era posible ejecutar wp_enqueue_script en el medio de una página. ¡Una forma mucho más limpia de cargar scripts / css solo cuando es necesario!
Rick Curran
2

Verifique las variables de la interfaz de usuario del administrador

Un elemento de menú es un caso especial: comentarios, ya que se registran utilizando la 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 no son consistentes y están codificados en wp core. Tenga en cuenta que no todos están configurados en todas las páginas.

Enganche a los ganchos de la interfaz de usuario de administración específicos de la página

Luego también hay ganchos especiales, específicos de la página, en los que puedes echar un vistazo admin-footer.phpy 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á la $hook_suffixposibilidad de verificar si hay secuencias de comandos en cola, justo cuando estás enganchando 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 para desarrolladores de fácil acceso llamado "Información de administrador actual (WCM)" , que está disponible en GitHub . El complemento también se puede encontrar en el futuro cercano en el repositorio oficial de wp.org .

Capturas de pantalla

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

Pantalla

Manos

Globales

emperador
fuente
0

Podría hacer algo en la línea de (en el encabezado.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 página o publicación, luego toma contenido y busca tu shortcode. Al encontrarlo, ejecuta su función.

Noel Tock
fuente
Gracias por tu mensaje. Intenté usar su solución, pero, desafortunadamente, no pude hacer que funcionara.
Laxmidi
Fue agregado al encabezado?
Noel Tock el
1
¿Ya has visto get_shortcode_regex()?
kaiser
0

La forma más simple es simplemente verificar el shortcode.

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');
matchdav
fuente
1
Hay get_shortcode_regex()para eso.
kaiser
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 prácticamente de la get_shortcode_regex()página de referencia de código de 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' );
Nicolai
fuente
-3

Encontré esta solución :

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

function my_deregister_javascript() {
    wp_deregister_script( 'my_scripts_handle' );
}
Laxmidi
fuente
3
Pero sus soluciones eliminarán los scripts de todas las páginas
Mamaduka