将两个不同的查询合并为一个并对查询进行分页 - wordpress

时间:2016-01-11 19:05:22

标签: php wordpress pagination

基本上,我想展示标有"精选"的商品。首先,然后显示所有没有标记"精选的项目,然后对结果进行分页。

$featured = array(
'post_type' => 'aircraft-refueling',
'tag' => 'featured'
);
$not_featured = array(
'post_type' => 'aircraft-refueling',
'tag__not_in' => array('592')
);

这是分页:

function pagination()
{
global $wp_query;
$big = 999999999;
echo paginate_links(array(
    'base' => str_replace($big, '%#%', get_pagenum_link($big)),
    'format' => '?paged=%#%',
    'current' => max(1, get_query_var('paged')),
    'total' => $wp_query->max_num_pages
));
}

我对PHP不太熟悉,但我猜我需要将查询合并到一个新查询中,然后对该新查询进行分页?非常感谢帮助!如果有更好的方法,请提供建议。

编辑:这是我的进步。我几乎得到它的工作,但我得到这个代码的错误,即使它看起来很好......?

<?php 
$featured = get_posts(array(
    'post_type' => 'aircraft-refueling',
    'tag' => 'featured'
    ));
$notfeatured = get_posts(array(
    'post_type' => 'aircraft-refueling',
    'tag__not_in' => array('592')
    ));
$mergedposts = array_merge( $featured, $notfeatured );

$postids = array();
foreach( $mergedposts as $item ) {
$postids[]=$item->ID;
}
$uniqueposts = array_unique($postids);

$posts = get_posts(array(
    'post__in' => $uniqueposts,
    'post_type' => 'aircraft-refueling',
    'post_status' => 'publish'
    ));
foreach( $posts as $post ) :
setup_postdata($post);
?>

然后是标准查询:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
// THE CONTENT
<?php endwhile; ?>
<?php endif; ?>

1 个答案:

答案 0 :(得分:0)

根据上面提供的代码,我无法确定如何运行显示数据的循环。 如果你这样做了:

<?php foreach( $posts as $post ) : 
     setup_postdata($post); 
endforeach; ?>

然后没有必要从第二个循环:

while ( have_posts() ) : the_post(); ?>
// THE CONTENT
<?php endwhile; ?>

因为setup_postdata()the_post()基本相同 - 他们使用来自循环的数据设置全局$post对象,因此像the_title(), the_ID() ..这样的模板标签可以正常工作。< / p>

所以你必须这样做:

如果您使用query_posts()

foreach ($posts as $post):
  setup_postdata($post) 
 //THE CONTENT (the_title(), the_ID() will work 
endforeach;

或者如果你使用WP_Query() - 我认为这是最好的方式

$posts = new WP_Query(array(
    'post__in' => $uniqueposts,
    'post_type' => 'aircraft-refueling',
    'post_status' => 'publish'
));

if( $posts->have_posts()):
    while($posts->have_posts()): $posts->the_post()
    //THE CONTENT (the_title(), the_ID() will work 
    endwhile; 
endif;

在这两种情况下,您必须在循环后执行wp_reset_postdata()

在许多情况下,如果您使用custom_post_types进行查询,则会破坏分页:) 如果是这种情况:css-tricks

最后:你需要这个array_unique检查吗?帖子或有或没有这个标签......