2015-04-12 1 views
1

В настоящее время используется ACF Repeater для WP, чтобы показать некоторые сообщения в категории, но если я добавлю один и тот же ретранслятор, я хочу, чтобы он хранил журнал о том, какие идентификаторы почты были использованы, чтобы он мог исключить их из нового цикла.Игнорирование сообщений в wordpress, уже используемых в цикле

Единственная проблема заключается в том, что мой текущий код отлично работает для первого цикла, а второй, но добавляет больше двух, просто сбрасывается на первый набор сообщений. Сбрасывание массива выглядит так, будто оно не добавляет к массиву, просто переписывая его.

Первый массив выглядит следующим образом

array(3) { [0]=> int(28890) [1]=> int(28790) [2]=> int(28785) } 

Второй массив

array(3) { [0]=> int(28749) [1]=> int(1) [2]=> int(28484) } 

Третьем

array(3) { [0]=> int(28890) [1]=> int(28790) [2]=> int(28785) } 

Вот мой код

<?php 
$cat = get_sub_field('category_name'); 
$args = array(
    'posts_per_page' => 3, 
    'category_name' => $cat, 
    'post__not_in' => $ids 
); 
query_posts($args); 
$ids = array(); 
?> 
<div class="hub-cont"> 
<?php while (have_posts()) : the_post(); ?> 
<?php array_push($ids,get_the_ID()); /*$ids[] = get_the_ID();*/?> 
    <div class="blockitem2 small-12 medium-4 large-4"> 
     <?php 
     // Fetch all posts relating to a certain tag then display 4 of them 
     //Get the Thumbnail URL 
     $src = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), array(720,405), false, ''); 
     ?> 

     <div id="promolink"></div><div class="blockimage" style="background-image: url('<?php echo $src[0]; ?>'); background-repeat: no-repeat; background-size: cover;"> 

      <div class="cats"><?php echo the_category(' '); ?></div> 
     </div> 
     <div class="meta"> 
      <a class="gdbnewslink dark" href="<?php echo get_permalink();?>" ><?php the_title();?> </a> 
     </div> 
     <div class="clear"></div> 
     <div id="newsintro"><?php $text = $post->post_content; $trimmed = wp_trim_words($text, 50, null); echo $trimmed; ?></div> 
    </div> 

<?php endwhile; ?> 
    <?php wp_reset_query(); ?> 
    <?php var_dump($ids); ?> 
</div> 

Массивы по-прежнему новинка для меня, поэтому ваше руководство будет принята с благодарностью!

+0

, где начинается новый цикл? Вызывает ли новый цикл этот точный код, тогда он не будет работать, потому что вы сбросите '$ ids' в пустой массив. – Luceos

+0

Да, петля - тот же самый код снова. Я думал, что это сбрасывает массив, как я смогу создать повторяемый код без его сброса массива? – Kyon147

ответ

1

Здесь находится решение, используя информацию из этой ссылки. https://www.binarymoon.co.uk/2010/03/5-wordpress-queryposts-tips/

Добавьте это в свой файл функций.

$bmIgnorePosts = array(); 

/** 
* add a post id to the ignore list for future query_posts 
*/ 
function bm_ignorePost ($id) { 
    if (!is_page()) { 
     global $bmIgnorePosts; 
     $bmIgnorePosts[] = $id; 
    } 
} 

/** 
* reset the ignore list 
*/ 
function bm_ignorePostReset() { 
    global $bmIgnorePosts; 
    $bmIgnorePosts = array(); 
} 

/** 
* remove the posts from query_posts 
*/ 
function bm_postStrip ($where) { 
    global $bmIgnorePosts, $wpdb; 
    if (count($bmIgnorePosts) > 0) { 
     $where .= ' AND ' . $wpdb->posts . '.ID NOT IN(' . implode (',', $bmIgnorePosts) . ') '; 
    } 
    return $where; 
} 

add_filter ('posts_where', 'bm_postStrip'); 

Затем, чтобы использовать это вы могли бы сделать свой цикл, как обычно, и называют «bm_ignorePost ($ post-> ID);» для каждого поста вы хотите игнорировать. В следующем примере дважды используется один и тот же запрос, но будет отображаться совершенно разные сообщения на каждом выходе.

<?php 
// set the query 
$query = 'posts_per_page=10'; 

// loop 1 - display most recent 10 posts 
$queryObject = new WP_Query($query); 
if ($queryObject->have_posts()) { 
    while ($queryObject->have_posts()) { 
     bm_ignorePost($queryPost->post->ID); 
     $queryObject->the_post(); 
     the_title(); 
     the_content(); 
    } 
} 

// loop 2 - same query, get the next 10 posts 
$queryObject = new WP_Query($query); 
if ($queryObject->have_posts()) { 
    while ($queryObject->have_posts()) { 
     bm_ignorePost($queryPost->post->ID); 
     $queryObject->the_post(); 
     the_title(); 
     the_content(); 
    } 
} 
?> 
Смежные вопросы