Строка Eval для обходного пути wordpress in_category вне цикла

В Wordpress вы не можете использовать «in_category» вне цикла, поэтому я создал функцию, которая дает мне все категории, в которых находится моя статья, и создает из нее выражение «is_category».

Я поместил свою функцию в свой «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, он будет работать нормально...


person fimbim    schedule 17.11.2012    source источник
comment
Но это все равно будет вне цикла, если оно находится на боковой панели? Я не понимаю, что это решает... Кроме того, is_category можно использовать вне цикла. Вам просто нужно указать идентификатор страницы в качестве второго параметра: in_category(cat_id, post_id); также вы используете is_category, где, я думаю, вы имеете в виду in_category? is_category всегда можно использовать, даже вне цикла.   -  person C. E.    schedule 18.11.2012
comment
да, я знаю, что in_category не работает, но is_category работает. У меня есть одна кошка, у которой есть несколько детей-котов. Я просто хочу, чтобы моя функция автоматически давала мне всех моих дочерних кошек и делала из них выражение is_category if.   -  person fimbim    schedule 18.11.2012


Ответы (1)


Я отвечу на то, что я считаю реальным вопросом. Предлагаемое вами решение является крайне плохой практикой.

Попробуй это:

$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
person C. E.    schedule 18.11.2012