Comment inclure du code uniquement sur des pages spécifiques?

13

J'apprends les plugins et les codes courts. J'ai remarqué que lorsque j'active mon plugin, son code est chargé sur toutes mes pages - même les pages qui n'ont pas mon code court. (Je ne parle pas du contenu par rapport aux pages d'administration). Sur certaines pages de contenu, j'utilise un shortcode particulier et sur d'autres pages de contenu, je ne le fais pas - mais dans tous les cas, le code du plugin est chargé. Comment puis-je faire en sorte que le plug-in ne soit inclus que sur les pages où le shortcode est utilisé?

Plus de détail:

Disons que j'ai un plugin qui crée une lightbox. J'active le plugin. Sur ma page "Cool Images", j'utilise un shortcode pour créer une lightbox. Lorsque je coche View Source sur ma page "About", qui n'utilise pas le shortcode lightbox, je constate que le code du plug-in lightbox a été chargé. Mes pages se chargeront plus rapidement si j'écris mon plugin afin que son code ne soit chargé que sur les pages où il est nécessaire. Est-ce possible? Sinon, j'aurai du code pour de nombreux plug-ins chargés inutilement sur des pages. Des idées?

    
posée Laxmidi 08.01.2012 - 18:23

6 réponses

8

WP v3.3 nous a permis d’exécuter wp_enqueue_script au milieu d’une page. Ticket 9346

Cela a beaucoup facilité l’inclusion de votre JS avec une meilleure granularité (au moins lors de l’utilisation de codes courts). Ici, jquery ne sera inclus que lorsque notre shortcode sera déclenché.

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' );
    
réponse donnée Dave Romsey 25.01.2012 - 08:02
2

Vérifier les variables de l'interface utilisateur admin

Un élément de menu constitue un cas particulier: les commentaires, car ils sont enregistrés à l'aide de l'API add_WHATEVER_(submenu)page() .

// 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

Ceux-ci sont non cohérents et codés en dur dans wp core. Notez que tous ne sont pas définis sur toutes les pages.

Accrochez des points d'ancrage de l'interface utilisateur d'administration spécifique à la page

Ensuite, il y a aussi des hooks spéciaux, spécifiques à chaque page, que vous pouvez consulter dans admin-footer.php et admin-header.php :

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

Quelques exemples dans le monde réel: Écran de publication

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

Ensuite, il y a aussi le $hook_suffix sur lequel vous pouvez vérifier les scripts de mise en file d'attente, juste lorsque vous accrochez votre action:

do_action( 'admin_enqueue_scripts', $hook_suffix );

Mettre à jour

Pour obtenir un accès plus facile (en un clic) à ces données / informations, nous avons créé un plug-in gratuit pour les développeurs, nommé "Informations de l'administrateur actuel (WCM)" , disponible sur GitHub . Ce plugin est également disponible dans le référentiel officiel de wp.org . / p>

Captures d'écran

Pour avoir un aperçu de ce que vous obtenez avec ce plugin:

    
réponse donnée kaiser 09.01.2012 - 02:06
0

Pourrait faire quelque chose dans le sens de (dans le header.php):

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

Vérifie si le chargement actuel est une page ou une publication, puis saisit le contenu et recherche votre shortcode. Une fois trouvé, il exécute votre fonction.

    
réponse donnée Noel Tock 08.01.2012 - 19:28
0

La méthode la plus simple consiste à vérifier le 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');
    
réponse donnée matchdav 09.01.2012 - 20:17
0

@kaiser a noté get_shortcode_regex() plusieurs fois dans ce fil de discussion, je pensais juste donner un exemple sur comment l'utiliser. Le code provient de la page de référence du code WordPress get_shortcode_regex() .

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' );
    
réponse donnée Nicolai 03.03.2016 - 17:15
-3

J'ai trouvé cette solution :

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

function my_deregister_javascript() {
    wp_deregister_script( 'my_scripts_handle' );
}
    
réponse donnée Laxmidi 25.01.2012 - 07:06

Lire d'autres questions sur les étiquettes