Как запрашивать записи от определенных авторов и категорий используя 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 тоже работает, так что вы бы что посоветовали использовать?

Ваш вариант EDIT кажется мне хорошим, если он выполняет поставленную задачу.

Что произойдет, если авторов нет? Будут ли посты из указанных категорий все равно отображаться?

Ну, в таком случае посты не будут отображаться. Полагаю, WP_Query выполняет логическое И для запросов, и если какой-то параметр отсутствует, в результате ничего не вернется.
Что можно сделать — настроить два запроса, так что если первый запрос завершится неудачей (вернет null), второй (без параметра автора) возьмет на себя обработку.

Вы можете попробовать что-то вроде этого... 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>";
