web-dev-qa-db-fra.com

L'utilisation de is_page () dans functions.php ne fonctionne pas du tout

Essayer d'exécuter un script personnalisé sur une seule page en utilisant is_page dans functions.php ne fonctionne pas du tout. J'ai une fonction appelée load_gh_boards qui interroge un script uniquement sur une certaine page (79):

function load_gh_boards() {
if( is_page(79) ){
    wp_register_script( 'gh-jobs-board', get_bloginfo( 'template_directory' ) . '/js/gh-jobs-board.js', array(), '1.0', true );
}}
add_action('wp_enqueue_script', 'load_gh_boards');

Ceci est à l'intérieur d'une fonction de mise en file d'attente de thème qui charge tous mes styles et scripts:

function theme_enqueue() {
if ( ! is_admin() ) {

    wp_register_style( 'main-style', get_bloginfo( 'template_directory' ) . '/css/style.css?' . time() );
    wp_enqueue_style( 'main-style' );
    wp_enqueue_script( 'jquery' );
    wp_register_script( 'main-vendor', get_bloginfo( 'template_directory' ) . '/js/vendor.js', array(), '1.0', true );
    ///etc...

    wp_enqueue_script( 'main-vendor' );
    wp_enqueue_script( 'main-script' );

    ///load_gh_boards
}

Pas de résultat. Toute aide ou vision serait appréciée.

1
pjldesign

is_page(79) demande si la requête principale actuelle est une page, en particulier la page 79

Mais la requête principale n'est pas encore arrivée

Cette fonction doit être appelée dans la boucle principale ou à tout le moins dans le modèle, mais le crochet init est bien trop tôt pour cela.

Au lieu de cela, assurez-vous que vous utilisez la classe body et chargez le script sur toutes les pages. Ensuite, vérifiez si la balise body a la classe css page-id-79.

Autres notes

  • Vous ne mettez pas en file d'attente sur le hook init, vous êtes censé mettre en file d'attente sur le hook wp_enqueue_scripts
  • Il serait plus simple de revenir plus tôt, par exemple if ( is_admin() ) return;
  • Ne mettez pas jQuery en file d'attente, ajoutez-le plutôt en tant que dépendance pour que WP sache générer les scripts dans le bon ordre.
  • main-style et main-vendor sont des noms très génériques, vous pourriez rencontrer des conflits, les préfixer, par exemple. pji-main-vendor
  • theme_enqueue est aussi un nom de fonction très générique, vous devriez le préfixer aussi
  • Vous pouvez vous inscrire et mettre en file d'attente simultanément en utilisant wp_enqueue_script. Si vous transmettez tout à cette fonction, vous n'avez pas besoin d'appeler wp_register_script
  • Indentez votre code, les éditeurs de code modernes le feront automatiquement et gratuitement, sans effort. Sublime ou Atom sont des exemples de logiciels libres qui le feront pour vous, il n'y a vraiment aucune excuse
2
Tom J Nowell
function theme_enqueue() {
if ( ! is_admin() ) {
wp_register_script( 'main-script', get_bloginfo( 'template_directory' ) . '/js/script.js', array(), '1.0', true );
wp_register_script( 'gh-jobs-board', get_bloginfo( 'template_directory' ) . '/js/gh-jobs-board.js', array(), '1.0', true );
///etc...
wp_enqueue_script( 'main-vendor' );
wp_enqueue_script( 'main-script' );
///etc...

if( is_page(79) ) {
    wp_enqueue_script( 'gh-jobs-board' );
}
}
}
add_action( 'wp_enqueue_scripts', 'theme_enqueue' );
1
pjldesign

Tout d'abord, il y a un type de faute dans votre code. C'est wp_enqueue_scripts, pas wp_enqueue_script. Cela pourrait être le problème.

De plus, vous ne devriez pas utiliser wp_enqueue_scripts dans un autre wp_enqueue_scripts. Ajoutez simplement votre condition dans la fonction theme_enqueue() comme ceci:

function theme_enqueue() {
if ( ! is_admin() ) {

    wp_register_style( 'main-style', get_bloginfo( 'template_directory' ) . '/css/style.css?' . time() );
    wp_enqueue_style( 'main-style' );
    wp_enqueue_script( 'jquery' );
    wp_register_script( 'main-vendor', get_bloginfo( 'template_directory' ) . '/js/vendor.js', array(), '1.0', true );
    ///etc...

    wp_enqueue_script( 'main-vendor' );
    wp_enqueue_script( 'main-script' );

    if( is_page(79) ){
        wp_register_script( 'gh-jobs-board', get_bloginfo( 'template_directory' ) . '/js/gh-jobs-board.js', array(), '1.0', true );
    }
}
add_action('wp_enqueue_scripts', 'theme_enqueue');

Je suppose que la fonction theme_enqueue() est liée à wp_enqueue_scripts elle-même.

0
Jack Johansson

Vous enregistrez le script, mais vous ne le mettez pas en file d'attente. Ajoutez wp_enqueue_script ('gh-jobs-board'); à votre fonction conditionnelle.

0
kuchenundkakao