2016-08-13 4 views
14

Seit Wordpress sticky posts Feature erlauben den Beitrag als Sticky in Post Publish Panel überprüft werden oben auf der Titelseite der Beiträge platziert werden. Ich wurde auch durch Customizing The Loop Standardcodierung, wie sie innerhalb der Schleife der klebrigen Post anders als normale, Stil bestimmt:

<?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 ich die ersten drei Beiträge (markiert als klebrig) mit individuellem Stil erhalten, während dupliziert innerhalb Standard Beiträge Ausgang, in denen ich nicht loszuwerden.

Ich habe versucht, <?php else : ?> durch <?php elseif(!is_sticky()) : ?> zu ersetzen, aber die Seite, die angezeigt wird, ist "paged" oder hat die aktuelle Seitennummer größer als eins hat die Anzahl der Beiträge durch klebrige Beiträge nach Veröffentlichungsdatum pro Seite subtrahiert.

Jede Hilfe, um klebrige Beiträge nicht dupliziert zu machen, wird sehr geschätzt.

+0

zu entfernen Haben Sie 2 Schlaufen oder nur 1? Teilen Sie bitte den ganzen Code, wenn möglich ... – shramee

+0

Hey @Ehab, Angenommen, Sie haben nur eine Schleife, überprüfen Sie meine Antwort unter – shramee

Antwort

4

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

Sie können neue erstellen (oder ändern bestehende) Abfrage und holen Beiträge ohne die klebrig denjenigen.

zeigen Sticky Beiträge nicht

alle sticky Beiträge aus der Abfrage ausschließen:

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

Ich schlage vor, dass Sie 2 aufeinander folgende Abfragen machen.

Zuerst die klebrigen Posts holen und die zweite um alle anderen Posts zu holen (sticky one ausgeschlossen, wie oben beschrieben).

+0

Ich bin vertraut mit Abfrage Argumente. Das wird klebrige Beiträge vollständig von der ganzen Schleife entfernen, während ich sie nur auf der ersten Seite brauche https://codex.wordpress.org/Sticky_Posts –

+1

In diesem Fall schlage ich vor, dass Sie zwei Schleifen verwenden, die erste, um die klebrigen Beiträge zu erhalten, und der zweite um alle anderen Beiträge zu bekommen (klebrige werden ausgeschlossen). –

1

Sie können Homepage-Beiträge und andere Beiträge wie das 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 --> 
1

sticky Beiträge So behandeln Sie

<?php 
    $sticky_query = new WP_Query(array('post__in' => get_option('sticky_posts'))); 
    while ($sticky_query->have_posts()) : $sticky_query->the_post(); 
?> 

Beiträge Zur handhaben, 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 nicht funktionieren hier, wie ich vermute, läuft dieser Code auf Ihrer Homepage. is_sticky() erfordert die post_id, um auf anderen Seiten als der Post-Seite wie erforderlich zu arbeiten.

Sie können etwas wie diese is_sticky(get_the_ID()) innerhalb der Schleife in Ihrem aktuellen Code tun.

1

einfach continue in else wenn Post klebrig

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

auf der Oberseite des anderen Abschnitts ...
code Sie werden Sie etwas wie folgt 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; ?> 
1

kann diesen Code verwenden, um nur klebrige Beiträge anzuzeigen

dann diesen Code verwenden nur sticky Beiträge aus der Schleife

<?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(); ?> 
Verwandte Themen