web-dev-qa-db-fra.com

Utilisez is_category (), is_tag (), ... dans functions.php

Je veux vérifier dans functions.php si la page réelle est une page de catégorie, une page de balise, ... mais les fonctions permettant de la vérifier (is_category(), is_tag(), ...) ne semblent pas fonctionner, comme suit:

if(is_category() || is_tag() || is_home())

ne passe jamais.

Par exemple. is_category () ne semble pas avoir besoin d'être appelé sur la boucle.

Une idée de pourquoi cela ne fonctionne pas et comment le résoudre?

Modifier:

L'exemple complet pour mon cas est:

dans functions.php

/* Add hentry class to body */ 

if(! function_exists( 'one_function' )) {
    function one_function( $classes ) {
        $classes[] = get_classes(); //this is a custom theme function which put the classes into an array.
        $classes[] = 'hentry'; 

        return $classes;
    }
    if(is_category() || is_tag() || is_home())
        add_filter( 'body_class', 'one_function' );  //this is executed if removing the "if" condition

}
2
Manolo

Votre problème est que vous ne l'avez pas encapsulé dans un rappel, mais que vous l'avez exécuté immédiatement lorsque functions.php a été chargé par core. À ce moment-là, l'objet $wp_query global n'est pas complètement initialisé et les wrappers is_category() etc. ne peuvent pas fournir ce que vous attendez d'eux. Donc, vos vérifications if/else doivent être déplacées à l'intérieur du rappel comme ceci:

add_filter( 'body_class', 'addBodyClasses' );
function addBodyClasses( $classes )
{
    if (
        is_category()
        || is_tag()
        || is_home()
        )
    {
        $classes = array_merge( $classes, array(
            'hentry',
            // other classes you want to add go here
        ) ); 
    }

    return $classes;
}
3
kaiser