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.
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
.
init
, vous êtes censé mettre en file d'attente sur le hook wp_enqueue_scripts
if ( is_admin() ) return;
pji-main-vendor
theme_enqueue
est aussi un nom de fonction très générique, vous devriez le préfixer aussiwp_enqueue_script
. Si vous transmettez tout à cette fonction, vous n'avez pas besoin d'appeler wp_register_script
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' );
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.
Vous enregistrez le script, mais vous ne le mettez pas en file d'attente. Ajoutez wp_enqueue_script ('gh-jobs-board'); à votre fonction conditionnelle.