2016-04-01 14 views
0

Sayfa navigasyon numaralarını içeren özel bir wordpress arama sayfasına sahibim, istemcim sayfa 1'de rastgele ürünlere soruyor, ancak başkaları için değil, ancak ana sayfada rastgele görüntülenen tüm ürünlerin görüntülenmemesi gerekiyor diğer sayfalarda.Wordpress, rastgele ürün sadece ana sayfadaki arama sayfasında

$args = array(
    'post_type' => 'products', 
    'paged' => (get_query_var('paged') ? get_query_var('paged') : 1) 
) 

ve rastgele için:

if($args['paged'] == 1) { 
    $args['orderby'] = 'rand'; 
} else { 
    $args['order'] = 'DESC': 
} 

sonuç iyi i bir arama yaptığınızda vardır ve ilk sayfa rastgele, ancak bazı ürünler sorgu için

ben bu kodu var Ana sayfada zaten rastlananlar rastgele olduğundan diğer sayfalarda da görüntülenir (ör: sayfa 2).

Amaç, ana sayfada zaten görüntülenen ürünleri görüntülemiyor.

Zaten benzer bir şey:

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

Ama sayfalar bence bazı düşünceler sonra sayfa 1.

görüntülemek asla başkalarına sadece ilk 10 sayfa 1 ürünler ve diğerleri ürünleri karıştırmak ilk 10 rastgele ürünü çerezlere veya oturuma depolayın ve başka sayfalar için DEĞİLDİR? bunun gibi ?

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

        } 

Kötü ingilizce için özür dilerim, lütfen bana yardımcı olabilir misiniz?

Teşekkür

cevap

0

bu yaklasimimizi deneyin:

<?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>'; 
    } 
} 

o Yayınladığınız Yukarıdaki kod $args['NOT IN'] = $not_in; kullanır

0

yardımcı olur umarım ama WP_Query docs için kimliğe göre Mesajları dışlamak için argüman göre post__not_in geçerli:

$query = new WP_Query(
    array('post_type' => 'post', 'post__not_in' => array(2, 5, 12, 14, 20)) 
); 

Yani deneyin:

İlgili konular