Question

Je veux que mon plugin enregistre un script uniquement dans une certaine page.

Par exemple, dans mon fichier plugin, je veux écrire quelque chose comme ceci :

if (is_page()) {
    $pageid_current = get_the_ID();
    $page_slug = get_post($pageid_current)->post_name;

    if ($page_slug == 'articles'){
        wp_register_script('myscript', '/someurl/main.js');
    }
}

Mais j'obtiens l'erreur :

is_page n'a pas été appelé correctement.Les étiquettes de requête conditionnelles ne fonctionnent pas avant l'exécution de la requête.Avant cela, ils renvoient toujours false.Veuillez consulter le débogage dans WordPress pour plus d'informations.(Ce message a été ajouté dans la version 3.1.)

Comment puis-je, à l'intérieur d'un plugin, enregistrer un script dans une certaine page ?

Était-ce utile?

La solution

is_page() ne fonctionne que dans les fichiers modèles.

Et pour l'utiliser dans les fichiers du plugin, vous devez l'utiliser avec la combinaison de template_redirect crochet d'action.

Ce crochet d'action s'exécute juste avant que WordPress ne détermine quelle page de modèle charger.

L'extrait suivant fonctionnerait donc :

add_action( 'template_redirect', 'plugin_is_page' );

function plugin_is_page() {
    if ( is_page( 'articles' ) ) {
        wp_register_script( 'my-js-handler', '/someurl/main.js', [], '1.0.0', true );
    }
}

Autres conseils

Vous pourriez utiliser is_page() après la redirection du modèle, vous devez donc ajouter le hook comme ceci :

add_action('template_redirect','your_function');
function your_function(){
 if ( is_page('test') ) {
  // do you thing.
 }
}

Vous devez enregistrer votre script comme si vous le souhaitez de fonctionner partout. Vous pouvez le désenregistrer après le travail, comme celui-ci:

function deregister_my_script() {
    if (!is_page('page-d-exemple') ) {
        wp_deregister_script( 'custom-script-1' );
    }
}
add_action('wp_print_scripts', 'deregister_my_script', 100 );

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top