WordPress schließt duplizierte $sticky-Posts aus der Schleife aus
Lesezeit: 6 Minuten
Seit WordPress klebrige Beiträge Funktion erlauben die Post überprüft als klebrig im Post-Publish-Panel, das oben auf der Titelseite von Posts platziert wird. Außerdem sollte ich den Sticky Post durch Anpassen anders gestalten als die normalen Posts innerhalb der Schleife Die Schleife Standardcodierung wie folgt:
<?php if (have_posts()) : ?>
<?php $post = $posts[0]; $c=0;?>
<?php while (have_posts()) : the_post(); ?>
<?php $c++;
if( is_home() && !$paged && $c == 1 ) :?>
<!--First sticky post content -->
<?php elseif( is_home() && !$paged && $c == 2 ) :?>
<!--Second sticky post content -->
<?php elseif( is_home() && !$paged && $c == 3 ) :?>
<!--Third sticky post content -->
<?php else:?>
<!-- Standard post content -->
<?php endif;?>
<?php endwhile; ?>
<!-- End of the main loop -->
//pagination
<?php else : ?>
<?php _e('Sorry, no posts matched your criteria.'); ?>
<?php endif; ?>
Das Ergebnis ist, dass ich die ersten drei Beiträge (als klebrig markiert) mit angepasstem Stil erhalte, während sie darin dupliziert werden Standardbeiträge Ausgabe, die ich nicht loswerden konnte.
Ich habe versucht zu ersetzen <?php else : ?> mit <?php elseif(!is_sticky()) : ?> aber diese erstellte Seite, die angezeigt wird, ist “ausgelagert” oder hat eine aktuelle Seitenzahl, die größer als eine ist. Die Anzahl der Posts wird von Sticky-Posts gemäß dem Veröffentlichungsdatum pro Seite abgezogen.
Jede Hilfe, um Sticky-Posts zu erstellen, die nicht dupliziert werden, wird sehr geschätzt.
Hast du 2 Schleifen oder nur 1? Bitte teilen Sie den gesamten Code, wenn möglich …
– schramee
18. August 2016 um 8:05 Uhr
Hey @Ehab, Angenommen, du hast nur eine Schleife, sieh dir meine Antwort unten an 😉
Ich schlage vor, dass Sie 2 aufeinanderfolgende Abfragen machen.
Der erste zum Abrufen der Sticky-Posts und der zweite zum Abrufen aller anderen Posts (mit Ausnahme des Sticky-Posts, wie oben beschrieben).
Ich bin mit Abfrageargumenten vertraut. Dadurch werden klebrige Posts vollständig aus der gesamten Schleife entfernt, während ich sie nur auf der ersten Seite benötige codex.wordpress.org/Sticky_Posts
– Benutzer1556571
16. August 2016 um 11:57 Uhr
In diesem Fall schlage ich vor, dass Sie zwei Schleifen verwenden, die erste, um die klebrigen Posts zu erhalten, und die zweite, um alle anderen Posts (ausgenommen die klebrigen) zu erhalten.
– dev_masta
22. August 2016 um 12:25 Uhr
Um mit Sticky Posts umzugehen
<?php
$sticky_query = new WP_Query( array( 'post__in' => get_option( 'sticky_posts' ) ) );
while ($sticky_query->have_posts()) : $sticky_query->the_post();
?>
Um Posts zu behandeln, die nicht klebrig sind
<?php
$non_sticky_query = new WP_Query( array( 'post__not_in' => get_option( 'sticky_posts' ) ) );
while ($non_sticky_query->have_posts()) : $non_sticky_query->the_post();
?>
PS- is_sticky() wird hier nicht funktionieren, da ich vermute, dass dieser Code auf Ihrer Homepage ausgeführt wird. is_sticky() wird die erfordern post_id um nach Bedarf auf anderen Seiten als der Beitragsseite zu arbeiten.
Sie können so etwas tun is_sticky(get_the_ID()) innerhalb der Schleife in Ihrem aktuellen Code.
Geo Chalkiadakis
Sie können Homepage-Posts und andere Posts wie folgt trennen:
<?php if (have_posts()) : ?>
<!-- if home page -->
<?php if( is_home() && !$paged ) :?>
<!-- First page loop -->
<?php $post = $posts[0]; $c=0;?>
<?php while (have_posts()) : the_post(); ?>
<?php $c++;
if( $c == 1 ) { ?>
<!--First sticky post content -->
<?php } ?>
<?php if( $c == 2 ) { ?>
<!--Second sticky post content -->
<?php } ?>
<?php if( $c == 3 ) { ?>
<!--Third sticky post content -->
<?php } ?>
<?php endwhile; ?>
<!-- End of first page loop -->
<!-- else if not home page -->
<?php else:?>
<!-- exclude stuicky posts, then run the standard loop -->
<?php $query = new WP_Query( array( 'post__not_in' => get_option( 'sticky_posts' ) ) );
<?php while (have_posts()) : the_post(); ?>
<!-- Standard post content -->
<?php endwhile; ?>
<?php endif;?>
<!-- end if home page / else -->
//pagination
<!-- else if have no posts -->
<?php else : ?>
<?php _e('Sorry, no posts matched your criteria.'); ?>
<?php endif; ?>
<!-- end if have posts / else -->
Sie können diesen Code verwenden, um nur Sticky-Beiträge anzuzeigen
Hast du 2 Schleifen oder nur 1? Bitte teilen Sie den gesamten Code, wenn möglich …
– schramee
18. August 2016 um 8:05 Uhr
Hey @Ehab, Angenommen, du hast nur eine Schleife, sieh dir meine Antwort unten an 😉
– schramee
22. August 2016 um 5:39 Uhr