web-dev-qa-db-fra.com

Ajouter un crochet d'action de manière conditionnelle - uniquement lorsque home.php est utilisé

J'essaie d'ajouter un crochet d'action dans functions.php uniquement si la page est home.php mais que ce qui suit ne fonctionne pas.

if ( is_page_template("home.php") ) {

// do stuff

}

Pour m'assurer que le fichier utilisé est bien home.php je le fais

global $template; echo $template; 
2
Iladarsda

Utilisez plutôt is_home, car is_page_template ne fonctionnera pas pour home.php car ce n'est techniquement pas un modèle de page au sens traditionnel du terme.

add_action('template_redirect', 'are_we_home_yet', 10);
function are_we_home_yet(){
        if ( is_home() ) {
        //your logic here
    }
}

Modifié:

add_action('template_redirect', 'are_we_home_yet', 10);
function are_we_home_yet(){
        global $template;
        $template_file = basename((__FILE__).$template);
        if ( is_home() && $template_file = 'home.php' ) {
        //do your logic here
    }
}

La réponse révisée correspond en fait à ce dont vous avez réellement besoin. Elle vérifie si vous êtes sur la page d’accueil, en plus d’obtenir le fichier de modèle inclus et de vérifier si ce fichier est bien votre fichier home.php et si oui, vous pouvez aller à propos de votre logique ...

7
userabuser

La fonction que vous recherchez est is_front_page()

add_action('template_redirect', 'work_only_on_front_page', 10);
   function work_only_on_front_page(){
    if ( is_front_page() ) {
    // Your code
   }
}
0
Alon Katziri

J'ai eu ce problème. Je voulais inclure les scripts Jssor Slider uniquement lors du chargement de la page d'accueil. J'utilisais un home.php aussi, et je l'ai résolu de cette façon:

  1. A renommé mon home.php fichier en quelque chose d'autre, comme home_mysite.php en donnant un nom à ce modèle de page dans l'en-tête de commentaire du fichier, par exemple:
/** 
 * Nom du modèle: Home 
 */
  1. Ensuite, j'ai créé un nouveau paramètre de page vide Accueil comme modèle de page.
  2. Configuré Wordpress pour afficher ma nouvelle page en tant que page de garde (Settings > Reading > A static page > Front page: Home)
  3. Enfin, j'ai finalement compris qu'il était nécessaire de mettre le code conditionnel dans ma fonction pour que is_page('home') fonctionne. ( 'home' est ma nouvelle page d'accueil vide slug ). En d’autres termes, lorsque j’essayais d’ajouter conditionnellement l’action, je n’étais pas en mesure de vérifier si la page d’accueil était en train de se charger. is_page('home') renvoyait toujours false. Cela fonctionnait lorsque j'ai changé la logique pour toujours ajouter l'action mais mettre en file d'attente les scripts.

Le code qui a fonctionné sur functions.php :

function mysite_jssor() {
    //conditionally enqueue the script 
    if ( is_page('home') ) {
        wp_enqueue_script( 'jssor', get_stylesheet_directory_uri() . '/js/jssor.js', array( 'jquery' ), false, false );
    }
}
//always adds the action
add_action( 'wp_enqueue_scripts', 'mysite_jssor' );

De cette façon, mes scripts Jssor ne sont chargés que lors de l'accès à la page d'accueil, pas lors de l'accès à d'autres pages ou à des publications.

0
yuric