Intereting Posts
Получить все идентификаторы типа сообщения с помощью WP_Query Автоматически удалять помеченные страницы из навигационного меню Компактный список pingback с favicons Пользовательский тип сообщения с архивной страницей, но без подробной страницы Ограничение видео о wordpress Как настроить автоматические обновления в WordPress 3.7? Сортировка основного запроса по пользовательской таксономии Как добавить пользовательскую функцию в pluggable.php Cant исправить это предупреждение: неверный аргумент, предоставленный foreach () в Force WordPress 3.3 использовать Flash-загрузчик Как изменить структуру URL моего сайта? Пользовательский короткий код не работает в текстовом виджете Почему на моем экране редактирования появился такой непонятный интерфейс? WordPress 3.2 – Проблема с редакторами WYSIWYG в настраиваемом типе сообщений? Создание фида для всех категорий, кроме одной категории

WP Query с несколькими категориями – передача массива работает?

Согласно коду, для запроса сообщений, которые могут принадлежать любому набору категорий, нам нужно сделать что-то вроде этого:

$query = new WP_Query( array( 'cat' => '2,6,17,38' ) ); 

https://codex.wordpress.org/Class_Reference/WP_Query#Category_Parameters

Однако у меня есть следующее, которое работает, и я не уверен, почему.

  $args = array( 'cat' => $related_cat_ids, 'posts_per_page' => -1, ); $query = new WP_Query($args); 

Причина, по которой я запутался, состоит в том, что $ related_cat_ids – это фактически массив, но на примере явно отображается строка чисел, разделенных запятыми, для значения «cat».

Это то, о чем я должен беспокоиться? Мой код внезапно перестанет работать в будущем выпуске WordPress? Для моего случая более удобно использовать массив, а не форматировать его в эту строку. Причина в том, что я использую get_the_category() чтобы динамически получать категории, а затем выталкивая идентификаторы из этого массива в мой новый массив.

Solutions Collecting From Web of "WP Query с несколькими категориями – передача массива работает?"

Я понимаю ваше замешательство, но вам не о чем беспокоиться, потому что WordPress делает все необходимые шаги, чтобы заставить его работать.

Например, возьмите следующий код из class-wp-query.php

 // If querystring 'cat' is an array, implode it. if ( is_array( $q['cat'] ) ) { $q['cat'] = implode( ',', $q['cat'] ); } 

Проверяет, есть ли массив и быстро преобразует результат в строку, разделенную запятой.

Другим способом будет использование других параметров, таких как:

  category__and An array of category IDs (AND in). category__in An array of category IDs (OR in, no children). category__not_in An array of category IDs (NOT in). 

Подробнее об этом в Category_Parameters

Но снова я хотел бы использовать то, как вы находите более удобным.

Это прекрасно подходит для использования формата array() , если вы считаете его более полезным, кроме того, что делает WordPress интересным и полезным инструментом для работы.

Да, это сработает. Информация не может быть предоставлена ​​в кодексе. Но если вы посмотрите на код здесь относительно параметра, вы обнаружите, что даже если массив передан, он изменяется на строку.

  // If querystring 'cat' is an array, implode it. if ( is_array( $q['cat'] ) ) { $q['cat'] = implode( ',', $q['cat'] ); } 

Поэтому вы должны быть в безопасности. Насколько мне известно, хорошо, что как строка, так и массив принимаются в качестве аргументов, и сообщество WordPress будет распространяться так, как оно есть.

Даже если у вас все еще есть сомнения, вы всегда можете использовать параметр category__in, который всегда принимает массив, как показано ниже:

 $args = array( 'category__in' => $related_cat_ids, 'posts_per_page' => -1, ); $query = new WP_Query($args);