web-dev-qa-db-fra.com

Wp_enqueue_script conditionnel sur une page

Par souci d'efficacité, nous essayons de ne lier certains scripts JS qu'à un certain modèle de page d'un thème destiné à contenir un formulaire: page-with-form.php

Sur le thème functions.php, nous avons défini init_method en tant que tel:

function my_init_method(){

    $dir = get_bloginfo('stylesheet_directory')."/js/jquery.js";
    wp_deregister_script('jquery');
        wp_register_script('jquery',$dir);
    wp_enqueue_script('jquery');

    $dir = get_bloginfo('stylesheet_directory')."/js/jquery.validate.min.js";
    wp_deregister_script('jquery.validate.min');
        wp_register_script('jquery.validate',$dir);
    wp_enqueue_script('jquery.validate.min');

    $dir = get_bloginfo('stylesheet_directory')."/js/funcion.js";
    wp_deregister_script('funcion');
        wp_register_script('funcion',$dir);
    wp_enqueue_script('funcion');
}    

Nous nous attendions alors à ce que nous puissions ajouter à la première ligne du modèle de page page-with-form.php (avant get_header ()):

add_action('init', 'my_init_method');
  • N'est-ce pas possible?
  • Sommes-nous obligés d'ajouter une règle if à la fonction functions.php pour détecter que nous sommes sur cette page?

Modification du code en fonction des réponses: Sur le modèle de page, chargez la fonction directement, pas besoin de add_action ("init" ...

my_init_method();
...
get_header();
7
luison

init est beaucoup plus ancien que le chargement du modèle de page et n'est pas l'endroit approprié pour les files d'attente (malgré de nombreux tutoriels et documents l'utilisant pour cela).

Décrochez votre fonction à wp_enqueue_scripts et assurez-vous que vous le faites avant l'appel du modèle wp_head().

7
Rarst

Lorsque vous avez chargé votre fichier de modèle, vous avez déjà passé le hook 'template_redirect', ce qui est trop tardif (voir: Plugin/Référence de l'API Action ).

Vous devez définir l'appel add_action dans votre fichier functions.php, chargé avant le hook after_setup_theme - qui est le premier hook disponible pour les thèmes.

3
kaiser

En plus d'utiliser le bon hook (comme indiqué par @Rarst), vous devrez déplacer votre code fonctionnel vers functions.php et envelopper le contenu de la fonction dans une condition if ( is_page( 'page-with-form' ) ).

3
Chip Bennett