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 😉

    – schramee

    22. August 2016 um 5:39 Uhr


Benutzeravatar von dev_masta
dev_masta

Ich würde Ihnen vorschlagen, die WP_Query-Dokumentation zu lesen:
https://codex.wordpress.org/Class_Reference/WP_Query#Pagination_Parameters

Sie können neue Abfragen erstellen (oder vorhandene ändern) und Beiträge ohne die klebrigen abrufen.

Keine klebrigen Beiträge anzeigen

Alle Sticky-Posts von der Abfrage ausschließen:

$query = new WP_Query( array( 'post__not_in' => get_option( 'sticky_posts' ) ) );

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.

Benutzeravatar von Geo Halkiadakis
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

<?php
$args = array(
'posts_per_page' => 4,
'post__in'  => get_option('sticky_posts'), //that will display only sticky posts
);
$my_query = new WP_Query($args);
while($my_query->have_posts()) : $my_query->the_post();
?>
    <!-- sticky posts -->

<?php endwhile; ?>
<?php wp_reset_postdata(); ?>

Verwenden Sie dann diesen Code, um nur klebrige Posts aus der Schleife zu entfernen

<?php
$args = array(
'posts_per_page' => 4,
'post__not_in' => get_option('sticky_posts') //that will remove only sticky posts
);
$my_query = new WP_Query($args);
while($my_query->have_posts()) : $my_query->the_post();
?>
    <!-- normal posts content without sticky -->

<?php endwhile; ?>
<?php wp_reset_postdata(); ?>

Benutzeravatar von Shramee
Shramee

Einfach continue in else wenn Post klebrig ist 😉

Stellen

<?php if ( is_sticky() ) continue;?>

oben im Else-Abschnitt …
Ihr Code wird in etwa so aussehen

<?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:?>
    <?php if ( is_sticky() ) continue;?>
    <!-- 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; ?>

1401840cookie-checkWordPress schließt duplizierte $sticky-Posts aus der Schleife aus

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

Privacy policy