我有一个带有页面导航号码的自定义wordpress搜索页面,我的客户端要求我在第1页上随机选择产品,但不会为其他人提供,但在主页上随机显示的所有产品都不应显示在其他页面上。
对于查询,我有这段代码:
$args = array(
'post_type' => 'products',
'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1 )
)
和随机:
if( $args['paged'] == 1) {
$args['orderby'] = 'rand';
} else {
$args['order'] = 'DESC':
}
当我进行搜索并且第一页随机好的时候会有结果,但是因为随机而已经在主页上显示的一些产品也显示在其他页面上(例如:第2页)。
目标不是显示已在主页上显示的产品。
我已经做了类似的事情:
if( $page == 1 ) shuffle($r->posts);
但它只是第1页上的10个产品,而其他页面上的其他产品从未在第1页上显示。
经过一些想法后,我认为将前10个随机产品存储到cookie或会话中并为其他页面执行NOT IN?像这样?
if( $args['paged'] == 1 ){
$args['orderby'] = 'rand';
$r = new Wp_Query($args);
$randomFirstPage = wp_list_pluck( $r->posts, 'ID' );
print_r($randomFirstPage);
setcookie( 'firstPageResults', $randomFirstPage, time()+3600, '/', 'mydomain.com/dev' );
}else{
$not_in = $_COOKIE['firstPageResults'];
$args['NOT IN'] = $not_in;
$r = new Wp_Query($args);
}
抱歉英文不好,请你帮帮我吧?
由于
答案 0 :(得分:0)
试试这个方法:
<?php
$products1_ids = array();
$products2_ids = array();
$allproducts = get_posts(array('post_type' => 'products'));
$p=1; foreach($allproducts as $products) {
if(is_page(1) && $p<11) {
$products1_ids[] = $products->ID;
}
if(!is_page(1) && $p>10) {
$products1_ids[] = $products->ID;
}
$p++; }
shuffle($products1_ids);
shuffle($products2_ids);
$post_in = is_page(1) ? $products1_ids : $products2_ids;
$products = new WP_Query(array(
'post_type' => 'products',
'posts_per_page' => 10,
'post__in' => $post_in,
));
if($products->have_posts()) {
while($products->have_posts()) { $products->the_post();
echo '<div class="post">'
the_title();
echo '</div>';
}
}
希望有所帮助
答案 1 :(得分:0)
上面发布的代码使用$args['NOT IN'] = $not_in;
,但根据WP_Query docs,按ID排除帖子的参数为post__not_in
:
$query = new WP_Query(
array('post_type' => 'post', 'post__not_in' => array(2, 5, 12, 14, 20))
);
所以试试:
$args['post__not_in'] = $not_in;