一个WP_QUERY有两个不同的条件

时间:2014-03-15 作者:Ilya

我需要获得具有以下条件的自定义帖子:

使用meta自定义帖子\'key1\' => \'public\'\'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);
它可以工作,但我在分页和项目总数方面有问题。它是两个查询,而不是一个查询。

如何通过单个查询实现这一点?

1 个回复
SO网友:Howdy_McGee

根据我的理解:

如果>用户未登录-显示所有“公共”(元)帖子。

否则,如果>用户登录-显示所有“公共”(元)帖子(来自所有用户)和当前登录用户的所有“私有”(元)帖子。

我已经在下面运行了两个查询并合并了这些帖子。例如,它并非没有缺陷:在第一页上,它显示了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; ?>

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post