Intereting Posts
Исключить страницы с помощью настраиваемого поля (с да / нет) для хранения неправильных данных? Как я могу получить счет из запроса изменить плагин для поддержки RTL Как WordPress определяет, какой многоуровневый пользователь включен в URL? Вставить из слова, не сохраняющего форматирование Вставка пользовательской почты после публикации опубликованного типа публикации Пользовательский тип сообщения «Событие»: хронологический список повторяющихся событий Ограничить доступ WordPress к приватному Создайте пользовательский user_id с альфа-префиксом Ошибка функции после обновления WP до 3.9.1 Можно ли создавать настраиваемые роли в многопользовательском режиме, которые могут добавлять сайты? Альтернатива new_to_publish Крючок для пользовательских статусов WP_Query показывает все сообщения на отдельных страницах Получить идентификатор боковой панели, в котором был удален текущий виджет Создание контактной страницы формы?

Два разных условия с одним WP_Query

Мне нужно получить пользовательские сообщения со следующими условиями:

  1. Пользовательский пост с meta 'key1' => 'public'
  2. Пользовательский пост с мета 'key1' => 'private' и 'author' => 'current_user_id'

Код:

 $args = array( 'post_type' => $post_type, 'posts_per_page' => -1, 'meta_key' => 'key1', 'meta_value' => 'public' ); $args2 = array( 'post_type' => $post_type, 'posts_per_page' => -1, 'meta_key' => 'key1', 'meta_value' => 'private', 'author' => get_current_user_id() ); $get_posts = new WP_Query($args); $custom_posts = $get_posts->get_posts(); $get_posts_2 = new WP_Query($args2); $custom_posts2 = $get_posts_2->get_posts(); 

и затем я объединю их:

 $merged_posts = array_merge($custom_posts2, $custom_posts2); 

Он работает, но у меня проблема с разбивкой по страницам и подсчетам предметов. И это два запроса вместо одного.

Как я могу достичь этого с помощью одного запроса?

Solutions Collecting From Web of "Два разных условия с одним WP_Query"

Итак, из моего понимания:

IF> Пользователь не выполнил вход – Показать все сообщения 'Public' (meta).

ELSE IF> User Logged In – Показать все сообщения «Public» (meta) (от всех пользователей) и все сообщения «Private» (meta) от текущего зарегистрированного пользователя.

Я выполнил два запроса ниже и объединил сообщения. Например, это не без недостатков: на первой странице отображается больше параметра posts_per_page . Я также не мог вручную переопределить значение posts_per_page по умолчанию, не posts_per_page разбивку на страницы.

Возможно, вам нужно будет сэкономить постоянные ссылки, чтобы заставить это работать – надеюсь, это так!

 <?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $mainQuery = new WP_Query(array('meta_query' => array(array('key' => 'key1', 'value' => 'public')))); $postCount = $mainQuery->post_count; if(is_user_logged_in()){ $secondQuery = new WP_Query(array('post', 'meta_query' => array(array('key' => 'key1', 'value' => 'private')), 'author' => get_current_user_id(), 'paged' => $paged)); $postCount = ($postCount + $secondQuery->post_count); $mainQuery->posts = array_merge($mainQuery->posts, $secondQuery->posts); $mainQuery->post_count = $postCount; $mainQuery->max_num_pages = ceil($postCount / $posts_per_page); } ?> <?php if($mainQuery->have_posts()) : ?> <?php while($mainQuery->have_posts()) : $mainQuery->the_post(); ?> <h1><?php the_title(); ?></h1> <?php endwhile; ?> <?php endif; ?> <?php if($mainQuery->max_num_pages > 1) : ?> <?php $big = 9999999999; $args = array( 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), 'format' => '?paged=%#%', 'current' => max( 1, $paged ), 'total' => $mainQuery->max_num_pages, 'end_size' => 0, 'mid_size' => 2, 'prev_next' => False ); echo paginate_links($args); ?> <?php endif; ?>