web-dev-qa-db-fra.com

La fonction is_page () ne fonctionne pas

J'essaie d'ajouter ces CSS et JS personnalisés (écrits dans un plugin personnalisé) uniquement à une page spécifique.

c'est mon code

<?php   

function randomAlphaNumeric($length) {
    $pool = array_merge(range(0,9), range('a', 'z'),range('A', 'Z'));
    $key='';
    for($i=0; $i < $length; $i++) {
        $key .= $pool[mt_Rand(0, count($pool) - 1)];
    }
    return $key;
}



add_action('init', 'register_script');
function register_script(){
    if(is_page('page_title')) {
        wp_register_script( 'custom_js', plugins_url('/js/custom-js.js', __FILE__).'?random='.randomAlphaNumeric(5), array('jquery'));
        wp_register_style( 'new_style', plugins_url('/css/new-style.css', __FILE__).'?random='.randomAlphaNumeric(5), false, 'all');
    }
}


// use the registered jquery and style above
add_action('wp_enqueue_scripts', 'enqueue_style');
function enqueue_style(){
    if(is_page('page_title')) {
        wp_enqueue_script('custom_js');
        wp_enqueue_style( 'new_style' );
    } 
}

mais is_page() ne semble pas fonctionner du tout .. J'ai essayé de le changer avec ID et SLUG , mais sans succès

MISE À JOUR condition remplacée pour vérifier le titre de la page, ne fonctionne toujours pas

add_action('init', 'register_script');
function register_script(){
    global $post;
    if($post->post_title == 'page_title') {
        wp_register_script( 'custom_js', plugins_url('/js/custom-js.js', __FILE__).'?random='.randomAlphaNumeric(5), array('jquery'));
        wp_register_style( 'new_style', plugins_url('/css/new-style.css', __FILE__).'?random='.randomAlphaNumeric(5), false, 'all');
    }
}


// use the registered jquery and style above
add_action('wp_enqueue_scripts', 'enqueue_style');
function enqueue_style(){
    global $post;
    if($post->post_title == 'page_title') {
        wp_enqueue_script('custom_js');
        wp_enqueue_style( 'new_style' );
    } 
}
1
iKamy

Le crochet init est trop tôt - WordPress n'a pas encore identifié l'objet interrogé (publication, catégorie, etc.); d'où la is_page() ne fait pas ' t y travailler:

add_action('init', 'register_script');

Donc, pour que les balises/fonctions conditionnelles comme is_page(), is_single(), etc. fonctionnent (c'est-à-dire retournent le résultat approprié), vous devez utiliser wp ou un hook ultérieur:

add_action('wp', 'whatever_function');

Mais pour enregistrer/mettre en file d'attente des scripts et des styles, vous devez toujours utiliser le crochet wp_enqueue_scripts; vous utiliserez donc ceci (et non ce qui précède):

add_action('wp_enqueue_scripts', 'register_script');

PS: Crédits à @ huraji pour son commentaire utile.

4
Sally CJ
  1. Essayez de changer le paramètre de page_title En page-slug Ou id. https://developer.wordpress.org/reference/functions/is_page/#parameters
  2. Essayons d'enregistrer les scripts dans la même fonction enqueue_style() juste avant de les mettre en file d'attente.

Mise à jour : Mon objectif ici était d'encourager à essayer différents paramètres pour is_page() ET en utilisant la même fonction enqueue_style() accroché dans wp_enqueue_scripts qui est la SEULE manière suggérée pour enregistrer/mettre en file d'attente les scripts.

1
huraji