防止重复后

时间:2014-12-03 22:30:21

标签: wordpress post filter

我负责管理在WordPress中构建的此网站F9 Properties 。在主页上有一个特色属性部分。我注意到如果你列出了一个具有两个不同“状态”的属性,例如“For Sale”或“For Lease”,该属性在轮播中出现两次。下面是列出特色属性的代码。我可以看到它过滤掉属性状态为“租用”。任何人都可以帮我添加一些代码,每个帖子只列出一个属性,无论它有多少不同的属性状态?

<?php
/* Featured Properties Query Arguments */
$featured_properties_args = array(
'post_type' => 'property',
'posts_per_page' => 100,
'meta_query' => array(
    array(
        'key' => 'REAL_HOMES_featured',
        'value' => 1,
        'compare' => '=',
        'type'  => 'NUMERIC'
    )
)
);

$featured_properties_query = new WP_Query( $featured_properties_args );

if ( $featured_properties_query->have_posts() ) :
?>
<section class="featured-properties-carousel clearfix">
    <?php
    $featured_prop_title = get_option('theme_featured_prop_title');
    $featured_prop_text = get_option('theme_featured_prop_text');

    if(!empty($featured_prop_title)){
        ?>
        <div class="narrative">
           <h3><?php echo $featured_prop_title; ?></h3>
            <?php
            if(!empty($featured_prop_text)){
                ?><p><?php echo $featured_prop_text; ?></p><?php
            }
            ?>

        </div>
        <?php
    }

    ?>

       <div class="carousel es-carousel-wrapper">
        <div class="es-carousel">
            <ul class="clearfix">
                <?php
                while ( $featured_properties_query->have_posts() ) :
                    $featured_properties_query->the_post();
                    ?>

                    <?php
                $status_terms = get_the_terms( $post->ID,"property-status" );
                if(!empty( $status_terms )){
                    foreach( $status_terms as $status_term ){

                       if($status_term->name=="Leased"){}else{

                           ?>
                           <li>
                        <figure>
                            <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>">
                                <?php
                                the_post_thumbnail('property-thumb-image',array(
                                    'alt'   => get_the_title($post->ID),
                                    'title' => get_the_title($post->ID)
                                ));
                                ?>
                            </a>
                        </figure>
                        <h4><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h4>
                        <p><?php framework_excerpt(8); ?> <a href="<?php the_permalink() ?>"> <?php _e('Know More','framework'); ?> </a> </p>
                        <span class="price"><?php property_price(); ?></span>

                    </li>
                           <?
                       }


                    }
                }
                ?>

                    <?php
                endwhile;
                wp_reset_query();
                ?>
            </ul>
        </div>
    </div>

2 个答案:

答案 0 :(得分:4)

我可能会误解你的设置,但我想知道你为什么要循环使用这些术语。

我认为您应该考虑{strong>排除 leased部分中的WP_Query()字词(希望您可以共享它)。

然后您的轮播将简化为:

<div class="carousel es-carousel-wrapper">
    <div class="es-carousel">
        <ul class="clearfix">
        <?php while ( $featured_properties_query->have_posts() ) : $featured_properties_query->the_post(); ?>
            <li><!-- YOUR POST ITEM HERE --></li>
        <?php endwhile; ?>
        </ul>
    </div>
</div>

答案 1 :(得分:0)

每次迭代发生时都可以将帖子ID添加到数组中,如果帖子已经呈现,则检查数组:

$shown = array(); // new array
while ( $featured_properties_query->have_posts() ) :
    $featured_properties_query->the_post();
    $status_terms = get_the_terms( $post->ID, 'property-status' );
    if( ! empty( $status_terms ) ){
        foreach( $status_terms as $status_term ){
            if( $status_term->name == "Leased" || in_array( $post->ID, $shown ){
                continue; // post has term "Leased" or already rendered, skip
            }
            $shown[] = $post->ID; // add post ID to array
        ?>
            <!-- HTML here -->
        <?php
        }
    }
endwhile;