两个不同的自定义查询Wordpress循环与单一分页

时间:2017-05-13 18:19:03

标签: php wordpress loops post

完全不知道这个,所以希望有人可以了解我的情况。

让我说我有10个帖子 - 管理员用户5个,标准用户5个,我想每页显示3个帖子(数字要高得多,但让事情变得简单)

我希望我的结果按用户角色排序 - 在我希望看到的搜索结果页面上执行搜索时,会发生以下情况:

第一页

  • Admin post 1
  • Admin post 2
  • Admin post 3

第二页

  • Admin post 4
  • Admin post 5
  • 标准职位1

第三页

  • 标准职位2
  • 标准职位3
  • 标准职位4

等等......

始终想首先显示来自管理员用户的帖子,我也希望以不同的方式显示这些帖子,这就是为什么我选择使用两个循环而不是按顺序排序一个循环中的帖子 - 也会有循环应用的过滤器(按日期排序等)但是这样做时我仍然希望首先显示管理员帖子,显示最早的管理员帖子,并且只有当所有这些都显示时转到标准帖子......所以在我的实例中,两个循环是我唯一的选择。

拥有自定义查询的两个循环,我能够得到的最接近的是:

第一页

  • Admin post 1
  • Admin post 2
  • Admin post 3
  • 标准职位1
  • 标准职位2
  • 标准职位3

第二页

  • Admin post 4
  • Admin post 5
  • 标准职位4
  • 标准职位5

所以在我看来,我需要做的就是在第一个循环完成时启动第二个循环......但是,如果还有另一个解决方案,我认为这甚至不可能我的问题我全都耳朵! : - )

这是我最近一次尝试失败的荣耀 - 如果有人能指出我正确的方向,我会非常感激!

<?php 

$admin_users = get_users(
array(
    'role'   => 's2member_level1' ,
    'fields' => 'ID'
    )
);

$standard_users = get_users(
array(
    'role'   => 'subscriber' ,
    'fields' => 'ID'
    )
);

$admin_selector = array(
    'author__in' => $admin_users,
    'post_type' => 'post',
    'posts_per_page' => 3,
    'paged' => $paged
);

$standard_selector = array(
    'author__in' => $standard_users,
    'post_type' => 'post',
    'posts_per_page' => 3,
    'paged' => $paged
);

$admin_query = new WP_Query( $admin_selector );
$standard_query = new WP_Query( $standard_selector ); ?>


<?php if ( $admin_query->have_posts() ) : ?>

<!-- the loop -->
<?php while ( $admin_query->have_posts() ) : $admin_query->the_post(); ?>

    <h2><a href="<?php the_permalink(); ?>">Recommended - <?php the_title(); ?></a></h2>

<?php endwhile; ?>

<!-- end of the loop -->
<?php else:  ?>

<p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif; ?>

<?php rewind_posts();?>
<?php wp_reset_query();?>

<?php if ( $standard_query->have_posts() ) : ?>
<!-- the loop -->

<?php while ( $standard_query->have_posts() ) : $standard_query->the_post(); ?>

    <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>

<?php endwhile; ?>

<!-- end of the loop -->

<div class="pagination-links">
    <?php
        global $wp_query;

        $big = 999999999; // need an unlikely integer

        echo paginate_links( array(
            'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
            'format' => '?paged=%#%',
            'current' => max( 1, get_query_var('paged') ),
            'total' => $wp_query->max_num_pages
        ) );
    ?>
</div>

<?php else:  ?>
<p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>

1 个答案:

答案 0 :(得分:1)

$ admin_users和$ standard_users会返回具有此级别的用户ID。

现在,创建一个将两个数组合并为一个的新变量:

$id_users = array_merge($admin_users,$standard_users);

使用两个查询不是更好的解决方案,只创建一个这样的WP_Query:

$users_query = new WP_Query( array(
'author' => implode( ',', $id_users ),
'post_type' => 'post',
'posts_per_page' => 3,
'paged' => get_query_var('paged'),
'orderby' => 'author', 
'order' => 'ASC') ); 

应该正常工作。