Как отфильтровать категорию в WordPress / php?

#php #wordpress #filter

#php #wordpress #Фильтр

Вопрос:

У меня есть php-код, как показано ниже:

$category = get_the_category(); // Строка #A

echo '<pre>'; print_r($category); echo '</pre>'; // Строка #B добавлена для целей отладки

Код в строке #A извлекает категории сообщений.

Код во 2-й строке, который я добавил с целью отладки, возвращает следующий массив;

 Array
(
    [0] => WP_Term Object
        (
            [term_id] => 13085
            [name] => Cannabis
            [slug] => democracy_project_cannabis
            [term_group] => 0
            [term_taxonomy_id] => 13085
            [taxonomy] => category
            [description] => Hello World 
            [parent] => 13083
            [count] => 8
            [filter] => raw
            [cat_ID] => 13085
            [category_count] => 8
            [category_description] => Good Morning
            [cat_name] => Cannabis
            [category_nicename] => democracy_project_cannabis
            [category_parent] => 13083
        )

    [1] => WP_Term Object
        (
            [term_id] => 13093
            [name] => Today
            [slug] => today
            [term_group] => 0
            [term_taxonomy_id] => 13093
            [taxonomy] => category
            [description] => 
            [parent] => 0
            [count] => 3
            [filter] => raw
            [cat_ID] => 13093
            [category_count] => 3
            [category_description] => 
            [cat_name] => Today
            [category_nicename] => today
            [category_parent] => 0
        )

)
  

Формулировка проблемы:

Мне интересно, какой php-код мне нужно добавить после строки #A, чтобы он принимал только category [name] => Today.

Код в строке #A возвращает список категорий для конкретного поста. Я просто хочу взять только одну категорию.

Я думаю, мне нужно использовать метод array_filter (), но я не уверен, как я могу его использовать.

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

1. Вы можете сделать это $category[1]["name"];

2. Где? После строки #A?

3. Да, после $category = get_the_category();

Ответ №1:

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

 $term = get_term_by('name', 'Today', 'category');
if ($term) {
  $category = get_the_category($term->term_id);
} else {
  echo "Category not found";
}
  

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

1. Пытаюсь. Следите за обновлениями.

Ответ №2:

Вы можете перебирать возвращаемый $category массив:

 foreach($category as $cat) {

    if ($cat->name == 'Today') {
        //do your stuff
    }

}
  

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

1. Как мы можем жестко запрограммировать, чтобы это занимало всего category [name] => Today. ? Давайте забудем о цикле foreach.

2. Вероятно, это то, что вы ищете. get_term_by( 'name', 'Today') возвращает запрошенный объект term и затем может быть использован для дальнейшей обработки.