Страница автора Пользовательский запрос WHERE author OR ИЛИ

В настоящее время я пытаюсь выполнить пользовательский запрос на странице авторов (author.php). У меня есть два настраиваемых поля для сообщений, которые я хочу запросить (post_photographer и post_videographer).

То, что я пытаюсь сделать для профиля автора, – это получить все сообщения для текущего профиля пользователя, в котором находится пользователь:

  • автор сообщения
  • ИЛИ пост-фотограф
  • ИЛИ пост-видеооператор

Таким образом, у каждого человека может быть сообщение, которое они не автор (они были фотографом или видеооператором).

Следующий код близок к тому, что я хочу, но проблема в том, что он извлекает сообщения, в которых текущий пользователь является автором. И является либо пост-фотографом, либо пост-видеооператором. Он должен быть там, где текущий пользователь является автором OR post фотографом или пост-видеооператором.

$args = array( 'author' => $posts[0]->post_author, 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'post_photographer', 'value' => $posts[0]->post_author, 'type' => 'numeric' ), array( 'key' => 'post_videographer', 'value' => $posts[0]->post_author, 'type' => 'numeric' ) ) ); query_posts( $args ); 

Возможно ли это с помощью запросов WordPress (query_posts или WP_Query), или мне нужно написать собственный SQL? Любая помощь очень ценится! Если вам нужно уточнение, спросите.

Для тех, кто может иметь подобную потребность, я решил это следующим образом (по авторам.php):

Сначала я получаю идентификатор автора:

 $author = get_user_by( 'slug', get_query_var( 'author_name' ) ); // ID is accessed this way: $author_id = $author->ID; 

Затем я создал пользовательский запрос:

  $query = " SELECT p.* FROM $wpdb->postmeta m JOIN $wpdb->posts p ON p.id = m.post_id WHERE ( m.meta_key = 'medium_post_photographers' AND m.meta_value = '$author->ID' ) OR ( m.meta_key = 'medium_post_videographers' AND m.meta_value = '$author->ID' ) AND p.post_status = 'publish' UNION DISTINCT SELECT * FROM $wpdb->posts p WHERE post_author = $author->ID AND p.post_status = 'publish' GROUP BY p.id ORDER BY post_date DESC "; 

И, наконец, для получения результатов используйте следующее:

  $author_posts = $wpdb->get_results($query, OBJECT); 

Вот упрощенная версия моего цикла для отображения результатов:

 <?php if ( $author_posts ) : ?> <?php global $post; ?> <?php foreach ( $author_posts as $post ) : setup_postdata($post); ?> <h6><?php echo the_title(); ?></h6> ... <?php endforeach; ?> <?php else: ?> <div class="alert">There are no posts in this category.</div> <?php endif; ?> 

Я надеюсь, что это помогает кому-то!

Любой из этих двух фильтров должен помочь вам:

  1. post_clauses (я предлагаю этот, его немного более подробно!)
  2. posts_where

Проверьте примеры в кодексе.