1

Wordpress では、ループ外で「in_category」を使用できないため、記事が含まれるすべてのカテゴリを取得する関数を作成し、そこから「is_category」if ステートメントを作成しました。

関数を「functions.php」に入れました。

function inCatAlt($catID){
    $allCats = get_categories('child_of='.$catID);

    $childCats = 'is_category('.$catID.') ';
    foreach($allCats as $childCat){
        $childCats.= 'or is_category('.$childCat->cat_ID.') ';
    };

    $allchildCats = trim(trim($childCats, 'or '));
    return $allchildCats;
}

これを私のサイドバー、single などで呼び出します。

echo inCatAlt(13);

これにより、これが文字列として返されます。

"is_category(13) or is_category(16) or is_category(15)"

これはまさに私が必要としていたものですが、今度は文字列を評価して、次のような if 関数で使用したいと考えています。

if(eval(inCatAlt(13))){
 do something
}

しかし、うまくいきません。私はそれを間違って評価していますか、それとも問題は何ですか? 出力をコピーしてif関数に貼り付けると、正常に動作します...

4

1 に答える 1

0

私が本当の質問だと思うものに答えます。あなたが提案した解決策は非常に悪い習慣です。

これを試して:

$post_categories = wp_get_post_categories( $post_id );
$child_categories = get_categories( array( 'child_of' => $catID ) );

if( count( array_intersect( $post_categories, $child_categories ) ) > 0 )
    // The post exists in one or more of the child categories
于 2012-11-18T10:58:04.307 に答える