pre_get_posts ИЛИ отношение между таксономией и автором

У меня есть обычная таксономия, называемая coauthor . На экране edit.php я пытаюсь фильтровать и показывать только сообщения, созданные текущим пользователем или сообщениями, соавторами которых являются текущий пользователь. Я могу получить сообщения, созданные нынешним пользователем:

 function get_authored_posts($query) { global $user_ID; $query->set('author', $user_ID); return $query; } add_filter('pre_get_posts', 'get_authored_posts'); 

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

 function get_coauthored_posts($query) { global $user_ID; $user = get_userdata($user_ID); $query->set('taxonomy', 'coauthor'); $query->set('term', $user->user_login); return $query; } add_filter('pre_get_posts', 'get_coauthored_posts'); 

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

Примечание. Чтобы уточнить, соавторы хранятся как термины как часть таксономии coauthor . Этот термин является значением user_login.

== EDIT ==

В настоящее время я храню автора в качестве соавтора. Я чувствую, что это «работа вокруг» для лучшего решения. Как / Я могу использовать прямой запрос (игнорируя объект WP_Query) и возвращать его из фильтра pre_get_posts?

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

В принципе, невозможно создать стандартный WP_Query с author = X OR coauthor = Y, используя стандартные методы. Вам придётся прибегать к прямому запуску SQL, что проблематично и подвержено случайному поломке.

Однако использование таксономии соавторов, однако, довольно просто, чтобы сделать tax_query, который соавтором IN (X, Y) очень просто.

Так что нет, на самом деле это не обходной путь, на самом деле это лучший способ сделать это. Стол сообщений полностью привязан к одному автору. Если вам нужны несколько авторов, то специальная оболочка одна из них в это поле post_author на самом деле является настоящим WTF, потому что зачем беспокоиться? Более разумно использовать таксономию и разрешить полностью многосвязную систему соавторов.

Я не уверен, что вы можете легко добавить OR запросы к объекту $ query.

Это возможно при запросе на метаинформацию, например:

  $args = array( 'post_type' => 'product', 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'color', 'value' => 'blue', 'compare' => 'NOT LIKE' ), array( 'key' => 'price', 'value' => array( 20, 100 ), 'type' => 'numeric', 'compare' => 'BETWEEN' ) ) ); $query = new WP_Query( $args ); 

Обратите внимание на параметр «отношение». Это берется из нижней части этой страницы codex: http://codex.wordpress.org/Class_Reference/WP_Query


Альтернативой было бы сохранение автора как соавтора.