2016-04-01 109 views
0

我有一個頁面導航數字自定義WordPress的搜索頁面,我的客戶要求我在第1頁隨機產品,但不爲其他人,但所有產品隨機顯示在首頁應不顯示在其他頁面上。WordPress的,隨機產品只在首頁搜索頁

對於查詢我有這樣的代碼:

$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); 

但它僅洗牌首先將10個產品第1頁上,和其他產品對他人頁第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

嘗試這種形式給出:

<?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

以上您發佈的代碼使用$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;