Получение категорий верхнего уровня с помощью get_categories() без цикла foreach

28 дек. 2013 г., 20:47:00
Просмотры: 33.7K
Голосов: 7

Очень простой вопрос: Вот мой код с использованием 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, и хочу продолжить использовать этот метод. Но мне нужны только категории верхнего уровня, без подкатегорий.

Как можно изменить аргументы для этого?

2
Комментарии

минусую, потому что в Codex http://codex.wordpress.org/Function_Reference/get_categories был ответ на ваш вопрос

Michael Michael
29 дек. 2013 г. 02:01:58

@Michael Не могу минусовать ваш комментарий. :( Если бы мог, вы бы не упустили этот момент, боюсь. :(

Mayeenul Islam Mayeenul Islam
29 дек. 2013 г. 08:32:40
Все ответы на вопрос 3
0
14

Используйте функцию get_terms с аргументом parent. Из страницы Codex для этой функции, важный момент выделен:

parent (integer) Получить прямых потомков этого термина (только термины, у которых явно указан этот родитель). Если передано 0, возвращаются только термины верхнего уровня. По умолчанию - пустая строка.

Не тестировалось, но должно работать:

$categories = get_terms(
   'category',
   array('parent' => 0)
);

Конечно, вам нужно добавить любые другие необходимые аргументы.

28 дек. 2013 г. 21:20:18
0

установите parent в 0

$args = array(
  'parent' => 0, // родительская категория
  'hide_empty' => 0 // не скрывать пустые
);
3 окт. 2014 г. 17:21:39
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;
18 сент. 2019 г. 19:18:12