使用多个循环时防止POST复制的最佳方法

时间:2017-02-23 作者:C-M

我在我的网站上的一个页面上有以下循环。

修改下面的代码以阻止第一个循环中的帖子在第二个循环中重复的最好方法是什么?

    <?php query_posts(\'showposts=1&post_type=post\'); ?>

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<div id="latestpost" <?php

    if ( $thumbnail_id = get_post_thumbnail_id() ) {
        if ( $image_src = wp_get_attachment_image_src( $thumbnail_id, \'normal-bg\' ) )
            printf( \' style="background-image: url(%s);"\', $image_src[0] );     
    }

?>>

    <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                    <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>">



    <h2><?php the_title() ;?></h2>      
    <div class="summary" style="color:#fff;">
        <?php the_excerpt(); ?>
        </div>
    <!-- <?php the_post_thumbnail(); ?> -->
<?php endwhile; else: ?>

    <p>Sorry, there are no posts to display</p>
                    </a><!-- permalink -->
<?php endif; ?>
    </article>
</div><!-- latest post -->

<?php wp_reset_query(); ?>


<div id="postlist">

<h2>Personal finances</h2>

<?php query_posts(\'showposts=3&post_type=post&category_name=Personal\');
 ?>

<?php if ( have_posts() ) : while ( have_posts() ) : the_post();  ?>

    <!-- article -->
    <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
        <!-- post title -->
        <div class="post-thumbnail">
        <!-- post thumbnail -->
        <?php if ( has_post_thumbnail()) : // Check if thumbnail exists ?>
            <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>">
                <?php the_post_thumbnail(array(120,120)); // Declare pixel size you need inside the array ?>
            </a>
        <?php endif; ?>
        <!-- /post thumbnail -->
        </div>

        <h3 class="postlist-article-header">
            <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
        </h3>
        <!-- /post title -->


    </article>
    <!-- /article -->

<?php endwhile; ?>

<?php else: ?>

    <!-- article -->
    <article>
        <h2><?php _e( \'Sorry, nothing to display.\', \'html5blank\' ); ?></h2>
    </article>
    <!-- /article -->

<?php endif; ?>

<?php wp_reset_query(); ?>

1 个回复
最合适的回答,由SO网友:danbrellis 整理而成

您可以从数组中的第一个循环收集post id,然后在第二个循环中使用post\\u not\\u in arg。

$exclude = array();
if ( have_posts() ) : while ( have_posts() ) : the_post();
//first loop
$exclude[] = get_the_ID();
...


//second loop
$second_loop_args = array(
    \'showposts\' => 3,
    \'post_type\' => \'post\',
    \'category_name\' => \'Personal\', //should make sure you\'re using category slug here
    \'post__not_in\' => $exclude //this arg needs to be an array, hence moving from string to array format for query_post args
);
query_posts($second_loop_args);
....
**但我要说的是,您应该重新考虑在循环中使用新的WP\\u Query(),而不是像下面详述的那样使用Query\\u帖子:https://codex.wordpress.org/Class_Reference/WP_Query

基本上是一样的,但不使用query\\u post,只需为新的WP\\u查询类分配一个变量并循环它即可。

相关推荐