web-dev-qa-db-ja.com

is_category()関数

私は名前が「51mシリーズ」であるカテゴリを持っています(それはID 135を持っています)。このカテゴリページでis_category(51)という表現が正しいのはなぜですか。 Wordpress Codex によるとそれは間違っているはずだと思います。それはバグですか? 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 ページの先頭に1(is_category(51))があります。

4
Oles Dobosevych

私の疑いは、何らかの理由でname "51m series"またはslug51m-seriesis_category( 51 )に一致する(または両方が一致する)ことです。

is_category()関数 はPHP in_array()条件付き を使用して、ID、スラッグ、および名前と照合します。

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;

51が/ slug 51m series/51m-seriesという名前にある場合、 in_array()条件付き はtrueを返すようです。 nameとslugの条件付きチェックは両方とも 大文字と小文字を区別する であるべきですが、 strict のチェックはありません。そのため、整数51は、おそらく$cat_obj->nameに対して 文字列 として評価され、51m Seriesと一致する(または$cat_obj->slugと一致し、51m-seriesと一致する)

可能な解決策:

  • 数字で始まらないカテゴリ名/スラッグを使用する
  • カテゴリIDではなくカテゴリスラッグに対して明示的にクエリを実行する

これは、ID整数とname/slug文字列を区別するために、coreがin_array()strictチェックを実行する必要がある場合にも当てはまります。

2
Chip Bennett