Frage

Ich versuche, die Hauptschleife so zu ändern: Ich habe einen Meta -Schlüssel zum Anzeigen von Elementen, die nur auf der Startseite des A -Blogs angezeigt werden sollten. Ich ziehe sie in einem Code, der von der Hauptschleife getrennt ist, so etwas wie -

$leading = get_posts('showposts=5&meta_key=_pull_leading3&meta_value=on');      
    foreach ($leading as $post) : 
        setup_postdata($post);
        //some code to show posts data
    endforeach;

In der Hauptschleife möchte ich dann nur Beiträge zeigen, die nicht wie vorgestellt werden. Daher verändere ich die Hauptschleife mit query_posts:

query_posts('posts_per_page=7&paged='.$paged.'&meta_key=_pull_leading3&meta_value=off');

Bis hier ist alles in Ordnung. Aber ich möchte auch, dass ich die vorgestellten Beiträge wieder auf den neuesten Stand erhalten werde, wenn sie auf natürliche Weise über die reguläre Bestellung dort sein sollten. In diesem Fall bekomme ich sie nicht, da ich die Meta -Werte verwende. Wenn ich so etwas versuche - -

if (is_home() && $paged == '0') {  //$paged value is 0 on 1st page and not 1 !          
        query_posts('posts_per_page=7&paged='.$paged.'&meta_key=_pull_leading3&meta_value=off');                         
      }
      else {
        query_posts('posts_per_page=7&paged='.$paged);          
      } 

Dann bekomme ich auf Seite 2 die Beiträge nach Bedarf, aber ich wiederhole einen Teil der Beiträge, die auf Seite 1 (Startseite) waren (da ich in der Homepage -Schleife nur Beiträge gezeigt habe, die nicht vorgestellt wurden, also seit diesem Teil von diesem Teil von Die bereits dort angegebenen Beiträge und jetzt sollten von Seite 2 ausgeschlossen werden).

Wie kann ich die Hauptschleife auf eine Weise ändern Beiträge von der vorherigen Seite?

Ich hoffe wirklich, dass es mir gelingt, mein Problem zu erklären ...

Vielen Dank, Maor

War es hilfreich?

Lösung

Ich denke, das wird tun, was Sie wollen. Aber ich frage mich immer noch, ob Sticky -Posts nicht besser gewesen wären ...

if (is_home() && $paged == '0') {  //$paged value is 0 on 1st page and not 1 !          
        query_posts('posts_per_page=7&paged='.$paged.'&meta_key=_pull_leading3&meta_value=off');                         
      }
      else {
        // recreate the home page "loop" to figure out which posts to exclude
        $excluded = array_map(
            create_function('$post', 'return $post->ID;' ),
            get_posts('numberposts=7&meta_key=_pull_leading3&meta_value=off')
            );
        query_posts( array(
            'posts_per_page' => 7,
            'paged' => $paged-1, // since we already excluded the first page
            'post__not_in' => $excluded) );          
      } 

Andere Tipps

@Goldenapples, wie ich bereits kommentierte, hat Ihr Code einen guten Start erlangt, aber auf den vorhandenen Seiten gab es einige nicht benötigte Beiträge, die vorgestellt wurden. Ich habe eine Funktion hinzugefügt, um die Posts zu filtern, wo das Datum des letzten Beitrags auf der ersten Seite und Filter berechnet wird, um Beiträge zu bringen, die früher als es sind. Es scheint, dass es es tut, aber ich bin mir nicht ganz sicher, ob es keine Fehler darin gibt. Könnten Sie einen Blick in diese Funktion werfen und Ihre Meinung sagen:

add_filter( 'posts_where' , 'tc_special_posts_where' );
function tc_special_posts_where( $where ) { 
    global $wpdb, $paged, $post;
    $paged = get_query_var('paged');
    $g = get_posts('numberposts=7&meta_key=_pull_leading3&meta_value=off&paged=0');
    foreach ($g as $p) { $i = $p->post_date; } 

    if (is_home() && $paged > 0) {
     $where .= " AND post_date < '" . $i . "'";
    }   
return $where; }

Mehr als das, seit wir die $ Page geändert haben, also die Funktion next_posts_link () In einem solchen Fall wird die aktuelle Seite als nächste Seite angezeigt, sodass ich einige Ersetzungen vornehmen musste -

$uri = $_SERVER["REQUEST_URI"];
$x = preg_match('/(\d){1,}/', $uri, $matches); //catch the digit of page number     
$nextlink = get_next_posts_link('Next Page »', 0);
if ($matches) {   //on the first page not needed to replace, only from page 2 and on
    $nextlink = preg_replace('/(\d){1,}/e', '"$1"+1'  ,$nextlink);  
}
<span class="alignleft"><?php echo $nextlink;?></span>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top