Post-Duplizierung verhindern

Lesezeit: 3 Minuten

Benutzeravatar von CreativEliza
KreativEliza

Ich bin verantwortlich für die Verwaltung dieser Website F9-Eigenschaften die in WordPress eingebaut ist. Auf der Homepage gibt es einen Abschnitt mit vorgestellten Eigenschaften. Mir ist aufgefallen, dass, wenn Sie eine Immobilie mit zwei unterschiedlichen „Status“ wie „Zu verkaufen“ oder „Zu vermieten“ aufgelistet haben, die Immobilie zweimal im Karussell angezeigt wurde. Unten ist der Code zum Auflisten der empfohlenen Immobilien. Ich kann sehen, dass die Immobilien herausgefiltert werden mit dem Status “vermietet”. Kann mir jemand helfen, ein bisschen Code hinzuzufügen, um nur eine Immobilie pro Beitrag aufzulisten, unabhängig davon, wie viele verschiedene Immobilienstatus sie hat?

<?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="https://stackoverflow.com/questions/27282897/<?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="https://stackoverflow.com/questions/27282897/<?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>

  • Kannst du die teilen WP_Query Teil für die $featured_properties_query ?

    – Birgire

    8. Dezember 2014 um 18:57 Uhr

Ich verstehe Ihr Setup möglicherweise falsch, aber ich frage mich, warum Sie die Begriffe durchlaufen.

Ich denke, Sie sollten stattdessen überlegen ausschließlich das leased Begriff innerhalb der WP_Query() Teil (hoffentlich können Sie es teilen).

Dann würde Ihr Karussell vereinfacht zu:

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

Sie können die Beitrags-ID bei jeder Iteration zu einem Array hinzufügen und das Array überprüfen, ob der Beitrag bereits gerendert wurde:

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

1397080cookie-checkPost-Duplizierung verhindern

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy