2016-04-01 9 views
0

私はページナビゲーション番号のカスタムワードプレス検索ページを持っていますが、クライアントは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)。

すでにホームページに表示されている製品は表示されません。

私はすでに似たようなん

:いくつかの考えは、私が思う後のページに1

を表示することはありません

if($page == 1) shuffle($r->posts); 

をしかし、それは他のページにのみ、最初のページ1、および他の製品の10社の製品をシャッフル最初の10個のランダムな商品をクッキーやセッションに保存し、他のページには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

このaproachを試してみてください:

<?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; 
関連する問題