@GrooFF

Как передать все полученные ID через функцию для in_category?

Приветствую!
Есть функция, которая получает из основной категории все в ее под категории:
function get_cats(){
	$id		= 1;
	$tax	= 'category';
	$children	= get_term_children( $id, $tax );

	foreach ( $children as $child ) {
		$term = get_term_by( 'id', $child, $tax );
		echo ''. $term->term_id .',';
	}
}

Мне необходимо передать все полученные ID в условие:
if ( in_category( array( get_cats() ) ) ) {
	//
}

Значения передаются, но сами записи в этих категория не выводятся, а только id из функции
Как правильно их передать в in_category?
  • Вопрос задан
  • 29 просмотров
Пригласить эксперта
Ответы на вопрос 2
все верно, Вы в функции get_cats выполняете команду echo тем самым сразу выводите id-шки на экран. Функция заканчивается и ничего не возвращает. Ваш блок if не отрабатывает.

рекомендую пользоваться отладчиком, или хотя бы, выводом переменных или флагов в файл или на экран. Тогда будете понимать как движется выполнение кода.
Ответ написан
Комментировать
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
1. Никогда не выполняйте SQL-запросы (через функции типа get_term_my()) в цикле. Перед началом цикла получите все термины с помощью get_terms(), а дальше уже циклом по результатам идете и обращаетесь к term_id.
2. Ну и да, Пычев Анатолий правильно написал - echo у вас там, а значит в if() проверки не будет, потому что проверка ожидает возврат результата true|false. А у вас void.
3. К тому же, in_category() ожидает массив ID, который вы и так уже получаете с помощью get_term_children(), зачем получать термины целиком - непонятно.

// 1. get_term_children() вернет массив ID терминов.
$children_ids = get_term_children( 1, 'category' );

// 2. in_category() как раз такой массив терминов и ожидает.
if ( in_category( $children_ids ) ) {
    // 
}


Остальной код вам не нужен, по крайней мере не для этих целей.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы