Предотвращение дублирования сообщений

Я отвечаю за управление этим сайтом F9 Properties, который построен в WordPress. На домашней странице есть раздел с характеристиками. Я заметил, что если вы указали свойство с двумя разными "статусами", например "Продажа или аренда", свойство появилось дважды в карусели. Ниже приведен код для перечисления признанных свойств. Я вижу, что он отфильтровывает свойства с статусом "Сдано в аренду". Может ли кто-нибудь помочь мне добавить немного кода, чтобы перечислять только одно свойство за сообщение независимо от того, сколько у него различного статуса свойства?

<?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>

Ответ 1

Возможно, я неправильно понимаю вашу настройку, но мне интересно, почему вы перебираете термины.

Я думаю, вам стоит вместо < исключить термин 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>

Ответ 2

Вы можете добавить идентификатор сообщения в массив каждый раз, когда происходит итерация, и проверить массив, если сообщение уже было показано:

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