Intereting Posts
Показать все термины в пользовательской таксономии со всеми дочерними терминами, завернутыми в ul Добавить или удалить класс HTML с выборочным обновлением? Загрузка всего сайта локально с помощью httrack Как настроить настраиваемый шаблон страницы для настраиваемого типа сообщений? $ wpdb, подготовленный с условием поиска Как мне убедить эту кнопку что-то сделать, когда она нажата? Сведения о плагине / виджетах WordPress Ежедневные сообщения, такие как архив Кнопки обмена Facebook и Twitter не работают Как делиться сообщениями в WordPress Multisite? Отображение содержимого страницы ПОСЛЕ петли сообщений Каков наилучший способ управления небольшими блоками контента на моей домашней странице? Как фильтровать содержимое боковой панели CPT: если в столбце больше X изображений, используйте разбиение на страницы Фильтровать сообщение, чтобы показывать только прямые дети категории

Два разных условия с одним 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); 

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

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

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

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; ?>