web-dev-qa-db-fra.com

fonction is_category ()

J'ai la catégorie qui s'appelle '51m series' (il a l'identifiant 135). Pourquoi l'expression is_category (51) est vraie sur cette page de catégorie? Je pense que cela devrait être faux selon Wordpress Codex . Est-ce un bug? Wordpress 3.5.2

category.php code:

<?php get_header(); ?>

<?php
if (is_category(array(36, 63, 64, 65, 67))) {
    get_template_part('category', 'papers');        
}  elseif (is_category(array(5, 62, 61, 23, 17, 151))) {
    get_template_part('category', 'icons');
} elseif (is_category(array(25, 50, 51, 52, 53, 54, 55, 56, 58, 71))) {
    echo is_category(51);
    get_template_part('category', 'gallery-machine');
} else {
    get_template_part('category', 'gallery-frame');
}

?>

<?php get_footer(); ?>

51m series live Vous pouvez voir 1 (is_category(51)) sur le de la page.

4
Oles Dobosevych

Je soupçonne que, pour une raison quelconque, name "série 51m" ou slug51m-series correspond (ou les deux correspondent) à is_category( 51 ).

La fonction is_category()utilise le PHP in_array() conditionnel pour établir une correspondance avec l'ID, le slug et le nom:

if ( in_array( $cat_obj->term_id, $category ) )
     return true;
elseif ( in_array( $cat_obj->name, $category ) )
    return true;
elseif ( in_array( $cat_obj->slug, $category ) )
    return true;

Le in_array() conditionnel semble retourner vrai lorsque 51 est trouvé dans le nom/slug 51m series/51m-series. Alors que les contrôles conditionnels de nom et de slug doivent être sensibles à la casse, aucun des contrôles n'est strict. Ainsi, l'entier 51 est peut-être évalué comme un chaîne contre $cat_obj->name et correspondant à 51m Series (ou par rapport à $cat_obj->slug et correspondant à 51m-series)

Solutions possibles:

  • Utilisez des noms de catégories/slugs qui ne commencent pas par des chiffres
  • Requête explicite sur les slugs de catégorie plutôt que sur les ID de catégorie

Cela peut également être un cas où le noyau doit effectuer une vérification strict dans in_array(), afin de différencier un entier ID et une chaîne de nom/numéro de bloc.

2
Chip Bennett