首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wordpress,随机产品,仅在主页搜索页面上

Wordpress,随机产品,仅在主页搜索页面上
EN

Stack Overflow用户
提问于 2016-04-01 17:55:43
回答 2查看 88关注 0票数 0

我有一个自定义的wordpress搜索页面,页面导航号,我的客户要求我随机在第1页上的产品,但不是为其他产品,但所有随机显示在主页上的产品不应该显示在其他页面上。

对于查询,我有以下代码:

代码语言:javascript
复制
$args = array(
  'post_type' => 'products',
  'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1 )
)   

对于随机的:

代码语言:javascript
复制
if( $args['paged'] == 1) {
    $args['orderby'] = 'rand';
} else {
    $args['order'] = 'DESC':
}

当我做一个搜索的时候,结果就在那里,第一页随机很好,但是一些已经因为随机而显示在主页上的产品也显示在其他页面上(例如:第2页)。

目的不是展示已经在主页上展示的产品。

我已经做了类似的事情:

代码语言:javascript
复制
if( $page == 1 ) shuffle($r->posts);

但它只会首先洗牌第一页上的10个产品,而其他页面上的其他产品永远不会显示在第一页上。

经过一些思考后,我认为存储前10个随机产品到cookie或会话,并为其他页面不IN?像这样吗?

代码语言:javascript
复制
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);

                    }

对不起,我的英语不好,你能帮我吗?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2016-04-01 20:05:05

尝试以下方法:

代码语言:javascript
复制
<?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>';
    }
}

希望能有所帮助

票数 0
EN

Stack Overflow用户

发布于 2016-04-01 20:18:23

上面发布的代码使用了$args['NOT IN'] = $not_in;,但是根据WP_Query docs,通过id排除帖子的参数是post__not_in

代码语言:javascript
复制
$query = new WP_Query(
    array('post_type' => 'post', 'post__not_in' => array(2, 5, 12, 14, 20))
);

所以试试吧:

代码语言:javascript
复制
$args['post__not_in'] = $not_in;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36353276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档