web-dev-qa-db-de.com

Wie erhalte ich eine variable Anzahl von Beiträgen pro Beitragstyp in der Hauptschleife?

Ich suche nach einer Möglichkeit, den Inhalt auf der Homepage meines Blogs auszugleichen:

das Blog hat einige Post-Typen wie Poscasts, Videos und Blogs und ich hätte gerne 10 Posts auf der Homepage, aber ich würde gerne 5 davon immer zum neuesten Blog machen.

Das Erstellen von 3 getrennten Boxen löst mein Problem nicht, da die Posts zusammen gemischt sind und es nicht immer so viele Posts der anderen Typen gibt.

Ich könnte mir die Lösung für dieses Problem auf pure PHP vorstellen, aber ich möchte eine Vorstellung davon bekommen, wie dies mit der WordPress-API geschehen kann. Jede Hilfe, Referenz ist willkommen!

8
jonathan

Wenn Sie noch nach einer Alternative suchen, die möglicherweise schneller ist, kann dies hilfreich sein:

<?php
function customBlogFeed() {

// The Query 
$the_query = new WP_Query( array ( 'post_type' => array( 'post', 'page', 'movie', 'book'), 'posts_per_page' => '6' ) );
//Your post_type array is a list of random post_types. You can add whatever you'd like to match your system.

// The Loop 
while ( $the_query->have_posts() ) : $the_query->the_post(); ?>


  <?php the_title(); ?>
      <?php the_content(); ?>

<?php endwhile;

// Reset Post Data
wp_reset_postdata();
}
?>

Um die Ausgabe zu erhalten, setzen Sie <?php customBlogFeed(); ?>, wo immer Sie dies ausgeben möchten.

Wenn Sie wirklich Lust haben, können Sie sich in den post_limits Filter einhängen und die Anzahl der angezeigten Beiträge pro Beitragstyp begrenzen. Ich hoffe das hilft dir auf deiner Suche.

PS - Schau in WP_Query , es wird dir wirklich helfen.

Nach einigen Recherchen möchten Sie vielleicht tatsächlich nach post_clauses schauen, um diese SQL-Charakterisierungen mit WP3.1 + Syntax durchzuführen

1
David

Also nach ein paar Monaten. Ich habe die Antwort auf Ihre genaue Frage gefunden:

add_action('pre_get_posts', 'custom_main_query', 1);
function custom_main_query( $query ) {
  if ( $query->is_main_query() && is_home() ) { 
  //be super careful with this and to be safe, keep the is_home() 
  //bit there, I've had some funny results without it.

    $query->query_vars['posts_per_page'] = 3; //displays 3 posts ;)
    $query->query_vars['post_type'] = array('post'); //and if you wanted multiple cpts <3

    return $query;

    }
}

Prost

1
David