Получение категорий верхнего уровня с помощью get_categories() без цикла foreach
Очень простой вопрос: Вот мой код с использованием get_categories()
:
<?php $args = array(
'show_option_all' => '',
'show_option_none' => '',
'orderby' => 'ID',
'order' => 'ASC',
'show_count' => 0,
'hide_empty' => 0,
'exclude' => '1',
'hierarchical' => 0,
'depth' => 1,
'number' => 12,
'parent' => 0 // Добавьте этот параметр для получения только категорий верхнего уровня
);
?>
<?php $categories = get_categories( $args ); ?>
<div class="middle-left">
<ul>
<?php for( $i=0; $i<4; $i++ ) {
echo "<li>" . $categories[$i]->{'name'} . "</li>";
} ?>
</ul>
</div>
<div class="middle-middle">
<ul>
<?php for( $i=4; $i<8; $i++ ) {
echo "<li>" . $categories[$i]->{'name'} . "</li>";
} ?>
</ul>
</div>
<div class="middle-right">
<ul>
<?php for( $i=8; $i<12; $i++ ) {
echo "<li>" . $categories[$i]->{'name'} . "</li>";
} ?>
</ul>
</div>
После долгого поиска я нашел способ получить доступ к объекту stdClass без использования цикла foreach, и хочу продолжить использовать этот метод. Но мне нужны только категории верхнего уровня, без подкатегорий.
Как можно изменить аргументы для этого?

Используйте функцию get_terms
с аргументом parent
. Из страницы Codex для этой функции, важный момент выделен:
parent (integer) Получить прямых потомков этого термина (только термины, у которых явно указан этот родитель). Если передано 0, возвращаются только термины верхнего уровня. По умолчанию - пустая строка.
Не тестировалось, но должно работать:
$categories = get_terms(
'category',
array('parent' => 0)
);
Конечно, вам нужно добавить любые другие необходимые аргументы.

Нативное решение для WordPress, которое возвращает ТЕКУЩУЮ родительскую категорию.
Вам не нужно использовать foreach вне функции...
function primary_categories($arr_excluded_cats) {
if($arr_excluded_cats == null) {
$arr_excluded_cats = array();
}
$post_cats = get_the_category();
$args = array(
'orderby' => 'name',
'order' => 'ASC',
'parent' => 0
);
$primary_categories = get_categories($args);
foreach ($primary_categories as $primary_category) {
foreach ($post_cats as $post_cat) {
if(($primary_category->slug == $post_cat->slug) && (!in_array($primary_category->slug, $arr_excluded_cats))) {
return $primary_category->slug;
}
}
}
}
//если у вас более двух родительских категорий, связанных с записью, вы можете удалить те, которые не нужны здесь
$dont_return_these = array(
'receitas','enciclopedico'
);
//используйте функцию следующим образом:
echo primary_categories($dont_return_these);
Комментарии:
- если у вас только одна родительская категория для записи, передайте null вместо массива
- если вам нужен другой вывод вместо slug, измените это на return $primary_category->slug;
