Как запрашивать записи от определенных авторов и категорий используя WP_query?
В настоящее время у меня есть WP_query, где я получаю записи от определенного набора авторов. К этому я хочу добавить также определенные категории.
$args = array( 'author__in' => $authors, 'posts_per_page' => 12, 'paged' => $paged );
$authors - это массив, содержащий ID пользователей.
Итак, мне нужно запрашивать записи как от авторов, так и из категорий.
Я думал использовать что-то вроде этого:
'tax_query' => array(
'relation' => 'OR',
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => array ( $cat_ids ),
),
array(
'taxonomy', => 'user',
'field' => 'id',
'terms' => array( $user_ids ),
)
)
Я знаю, что user не является таксономией; однако, я ищу что-то подобное, что работает.
РЕДАКТИРОВАНИЕ
Что ж, я попробовал это, и пока что работает:
$args = array(
'author__in' => $authors,
'category__in' => $terms,
'posts_per_page' => 12,
'paged' => $paged
);
Есть ли способ лучше?
РЕДАКТИРОВАНИЕ 2
Мое предыдущее редактирование не работает так, как я хотел. Проблема в том, что когда указаны только категории, записи не отображаются. Мне нужно отношение OR.
РЕДАКТИРОВАНИЕ 3
Я не смог найти решение. Когда я использую author__in и category__in для аргументов, wordpress показывает записи только от авторов, а не обоих. Мне нужно показывать записи как от авторов, ТАК И из категорий. Что я делаю неправильно?
Это то, что вы ищете?
$query = new wp_query($arr);
$arr = array(
'author__in'=> array(2,4,6), // ID авторов, которых нужно включить
'posts_per_page' => '12', // Количество записей на страницу
'paged' => $paged, // Номер текущей страницы
'tax_query' => array(
array(
'taxonomy' => 'category', // Таксономия - категория
'field' => 'id', // Поле - ID
'terms' => array ( $cat_ids ), // ID категорий
)
)
);
Да, я искал что-то подобное. Я не был уверен, можно ли оставить author__in, я все еще учусь и хочу делать все правильно. Мой вариант EDIT тоже работает, так что вы бы что посоветовали использовать?
Gixty
Ваш вариант EDIT кажется мне хорошим, если он выполняет поставленную задачу.
Sudeep K Rana
Что произойдет, если авторов нет? Будут ли посты из указанных категорий все равно отображаться?
Gixty
Ну, в таком случае посты не будут отображаться. Полагаю, WP_Query выполняет логическое И для запросов, и если какой-то параметр отсутствует, в результате ничего не вернется.
Что можно сделать — настроить два запроса, так что если первый запрос завершится неудачей (вернет null), второй (без параметра автора) возьмет на себя обработку.
Sudeep K Rana
Вы можете попробовать что-то вроде этого... get_posts_by_author_sql
Альтернативно, если вы хотите выбрать записи на основе авторов/категорий, вы можете использовать wpdb. Возможно, вам удастся применить "JOIN" в SQL-запросе для получения нужных ID записей.
можете попробовать это в админке:
wp-admin/edit.php?author=2 //указан автор
wp-admin/edit.php?cat=16,25&author=2 //включая категории
этот тест не отображается так, как вы описываете, поэтому проверьте правильность значений
$terms = array(16,25);
//$author = array(2);
$args = array(
'author__in' => isset($author) ? $author : 0,
'category__in' => isset($terms) ? $terms : ''
);
$demos = new WP_Query($args);
echo "<pre>";
print_r($demos);
echo "</pre>";