web-dev-qa-db-fra.com

Comment charger JS et CSS uniquement sur des pages spécifiques en utilisant is_page ()?

Je suis en train de construire mon premier plug-in WP. Il ne devrait charger certains fichiers JS et CSS que sur des pages spécifiques sélectionnées via un formulaire disponible dans la zone d'administration du plug-in. Une fois sélectionné dans le formulaire, Titre de page est stocké dans la table DB wp_options, puis les données sont extraites dans une variable appelée $ page_selected. Pour charger des fichiers JS et CSS uniquement dans les pages sélectionnées dans le formulaire, je souhaitais utiliser la fonction is_page () en transmettant la variable $ page_selected en tant que paramètre.

 function my_custom_tooltip() {
    if (  is_page($page_selected) ) {
        wp_enqueue_style( 'custom_tooltip_frontend_css', plugins_url('custom-image-tooltip/custom-image-tooltip.css') );
        wp_enqueue_script( 'custom_tooltip_frontend_js', plugins_url('custom-image-tooltip/custom-image-tooltip.js'), array('jquery'), '', true );
    }
} add_action('wp_enqueue_scripts', 'my_custom_tooltip');

Malheureusement, dans mon cas, cette instruction conditionnelle ne fonctionne pas correctement. Existe-t-il un moyen d'obtenir le même résultat en faisant correspondre la page sélectionnée dans le formulaire par l'utilisateur à la page en cours affichée?

6
RaymondMik

Si $page_selected renvoie une chaîne contenant le titre de la page, cela devrait fonctionner correctement. Je l'ai testé et is_page() accepte le titre de la page, l'ID de la page et le slug.

Si vous rencontrez des problèmes, il sera préférable de stocker l'ID de la page dans la base de données et de l'utiliser avec is_page().

Veuillez vous référer à https://codex.wordpress.org/Function_Reference/is_page pour plus de détails sur les arguments possibles pouvant être passés à cette instruction conditionnelle.

4
Puneet Sahalot

Je fais de jolis changements et j'espère que cela vous aidera bien. Essayez ci-dessous le code:

function my_custom_tooltip() {
  wp_enqueue_style( 'custom_tooltip_frontend_css', plugins_url('custom-image-tooltip/custom-image-tooltip.css') );
  wp_enqueue_script( 'custom_tooltip_frontend_js', plugins_url('custom-image-tooltip/custom-image-tooltip.js'), array('jquery'), '', true );
} 

if(is_page($page_selected)){
    add_action('wp_enqueue_scripts', 'my_custom_tooltip');
}

Ici, assurez-vous de $page_selected.

NOTE: Vous devriez toujours mettre en file d'attente vos scripts dans un thème functions.php fichier - pas un fichier de modèle. Les fichiers de modèle ne sont tout simplement pas au bon endroit 99,9% du temps.

Vous pouvez utiliser is_page() sous plusieurs formes, par exemple:

// When any single Page is being displayed.
is_page();

// When Page 42 (ID) is being displayed.
is_page( 42 );

// When the Page with a post_title of "Contact" is being displayed.
is_page( 'Contact' );

// When the Page with a post_name (slug) of "about-me" is being displayed.
is_page( 'about-me' );

// Returns true when the Pages displayed is either post ID 42, or post_name "about-me", or post_title "Contact".  
is_page( array( 42, 'about-me', 'Contact' ) );

Remarque: La capacité de tableau a été ajoutée à la version 2.5.

Si vous exécutez ce code dans un fichier modèle, cela fonctionnera correctement, mais si ce code est dans functions.php ou dans un fichier plugin, il générera cette erreur dans debug.log :

Avis PHP: is_page s'appelait incorrectement . Les balises de requête conditionnelles ne fonctionnent pas avant l'exécution de la requête. Avant cela, ils retournent toujours faux.

Dans ce cas, vous pouvez utiliser le hook template_redirect action, comme expliqué ici .

0
Lucas Miranda

Non testé ... mais quelque chose comme ceci devrait fonctionner pour obtenir le nom (c'est-à-dire slug) de la page actuellement affichée:

function my_custom_tooltip() {
    global $post;
    if ( is_object( $post ) && $post->post_type=='page' ) {
        if ( $post->post_name == $page_selected ) {
            wp_enqueue_style( 'custom_tooltip_frontend_css', plugins_url('custom-image-tooltip/custom-image-tooltip.css') );
            wp_enqueue_script( 'custom_tooltip_frontend_js', plugins_url('custom-image-tooltip/custom-image-tooltip.js'), array('jquery'), '', true );
        }
    }
}

La comparaison avec $page_selected s'attend bien sûr à ce qu'elle soit également au format "slug" ... ou si vous comparez au titre de la page, vous pouvez utiliser $post->post_title au lieu de $post->post_name.

Notez qu'il s'agit d'un exemple d'utilisation de PHP classes, afin d'éviter de devoir utiliser une variable globale ($page_selected) dans cette fonction ...

0
C C