Intereting Posts
Использование ползунка изображения дважды на одной странице Как получить сообщения в блоге на главной странице? Программирование добавления пользовательской почты Визуальный редактор Фиксация Access-Control-Allow-Origin (происхождение CORS) для нескольких поддоменов Как отсортировать почтовый листинг на странице, используя значение настраиваемого поля? WordPress + облачная платформа Google Архив настраиваемых тегов – постоянные ссылки не работают Обновление постоянных ссылок в сообщениях (не изменение домена) WordPress 3.5 Media Uploader – разрешает только 1 загрузку и определенные типы файлов Как исключить совпадение слова «класс» в поиске? Как проверить, зарегистрирован ли пользователь или зарегистрирован? Почему API API файловой системы WP не читает googlefonts.json? Тип пользовательского сообщения запроса на основе идентификатора сообщения и настраиваемого значения поля Определение количества сообщений для авторов

Исключить категорию путём для каждого цикла

Я пытаюсь исключить некоторые категории из цикла for.

<?php $categories = get_categories(array('exclude' => 'apps, windows')); ?> <?php foreach ($categories as $category) : ?> // the_loop <?php endforeach; ?> 

Несмотря на то, что ошибка не выбрасывается, она не работает: все категории используются в цикле. Как я могу исключить некоторые категории путём?

Я работаю с несколькими сайтами, которые имеют разные идентификаторы кошек, но те же самые пули, поэтому мне нужно фильтровать с помощью slug, а не с идентификатором cat.


Для будущих читателей: Питер Гузен ответил на этот вопрос, а другой – на объединенный ответ.

Solutions Collecting From Web of "Исключить категорию путём для каждого цикла"

Как я уже сказал, прямо из кода

исключать

(строка) Исключает одну или несколько категорий из списка, созданного wp_list_categories. Этот параметр принимает разделенный запятыми список категорий по уникальному идентификатору в порядке возрастания

Как вы уже сказали, вам нужно использовать категорию slug. Чтобы сделать это возможным и динамичным, я думаю, что лучше всего написать свою собственную функцию обертки для достижения этой цели. Мы будем использовать get_terms() (который используется get_categories() внутри), чтобы получить наши категории и get_term_by() чтобы получить идентификатор категории, чтобы мы могли передать это get_terms()

Вот функция, я прокомментировал ее для лучшего понимания ( требуется PHP 5.4+ )

 function exclude_term_by( $taxonomy = 'category', $args = [], $exclude = [] ) { /* * If there are no term slugs to exclude or if $exclude is not a valid array, return get_terms */ if ( empty( $exclude ) || !is_array( $exclude ) ) return get_terms( $taxonomy, $args ); /* * If we reach this point, then we have terms to exclude by slug * Simply continue the process. */ foreach ( $exclude as $value ) { /* * Use get_term_by to get the term ID and add ID's to an array */ $term_objects = get_term_by( 'slug', $value, $taxonomy ); $term_ids[] = (int) $term_objects->term_id; } /* * Set up the exclude parameter with an array of ids from $term_ids */ $excluded_ids = [ 'exclude' => $term_ids ]; /* * Merge the user passed arguments $args with the excluded terms $excluded_ids * If any value is passed to $args['exclude'], it will be ignored */ $merged_arguments = array_merge( $args, $excluded_ids ); /* * Lets pass everything to get_terms */ $terms = get_terms( $taxonomy, $merged_arguments ); /* * Return the results from get_terms */ return $terms; } 

Прежде чем перейти к использованию, вот несколько заметок

  • Первым параметром $taxonomy является конкретная таксономия, чтобы перейти к функции get_terms() внутри функции, по умолчанию она относится к category

  • Второй параметр $args принимает те же параметры, что и get_terms() . Просто примечание, если установлен третий параметр, значение параметра exclude значения по умолчанию игнорируется, если что-либо передается ему. Это значение будет переопределено тем, что передается в $exclude . Если ничего не передается этому параметру, и все передается в $exclude , вам нужно передать пустой массив как значение

  • Третий параметр, $excludes принимает массив терминов, которые должны быть исключены. Если значение не является допустимым массивом, get_terms() будет возвращен без исключения необходимых условий, поэтому обязательно передайте массив пули

  • Обработайте выход из функции так же, как и с get_terms() . Помните, что вы должны также проверить пустые значения и объекты WP_Error перед использованием значения из функции

  • Измените и используйте код, который вам подходит

Теперь для использования в ваших файлах шаблонов. Обратите внимание на пустой массив, переданный параметру $args если что-либо передается параметру $exclude

 $terms = exclude_term_by( 'category', [], ['term-slug-one', 'term-slug-two'] ); if ( !empty( $terms ) && !is_wp_error( $terms ) ) { ?><pre><?php var_dump($terms); ?></pre><?php } 

Для получения дополнительной информации об использовании см. get_terms() .

В вашей первой строке кода есть небольшая ошибка. Вы должны разделить категорию «каждая» кавычками в массиве. Итак, первая строка должна быть:

 <?php $categories = get_categories(array('exclude' => 'apps', 'windows')); ?>