web-dev-qa-db-fra.com

Comment obtenir un nombre variable de messages par type de message sur la boucle principale?

Je cherche un moyen d'équilibrer le contenu sur la page d'accueil de mon blog:

le blog a quelques types d'articles comme Poscasts, Videos et Blog et j'aimerais avoir, disons, 10 articles sur la page d'accueil, mais j'aimerais en faire 5 le dernier blog.

Faire 3 cases séparées ne résout pas mon problème car les messages sont mélangés et il n'y aura pas toujours autant de messages des autres types.

Je pourrais penser à la solution sur PHP pur, mais j'aimerais avoir une idée de la procédure à suivre en utilisant l'API wordpress, toute aide ou référence sera la bienvenue!

8
jonathan

Si vous recherchez toujours une alternative plus rapide, cela peut vous aider:

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

Ensuite, pour obtenir sa sortie, mettez <?php customBlogFeed(); ?> où vous voulez que ceci apparaisse.

Si vous voulez vraiment avoir envie de jouer, vous pouvez vous connecter à post_limits Filter et limiter le nombre de publications par type de publication. J'espère que cela vous aide dans votre quête.

PS - Regardez dans WP_Query , cela vous aidera vraiment.

Après quelques recherches, vous voudrez peut-être examiner post_clauses pour obtenir ces caractérisations SQL effectuées avec WP3.1 + Syntaxe

1
David

Donc, après quelques mois. J'ai trouvé la réponse à votre question exacte:

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;

    }
}

À votre santé

1
David