web-dev-qa-db-ja.com

メインループで投稿タイプごとに可変数の投稿を取得する方法

私は私のブログのホームページで内容のバランスをとる方法を探しています:

ブログには、Poscasts、Videos、Blogなどの投稿タイプがいくつかあります。ホームページで10の投稿を言いたいのですが、そのうち5つを常に最新のブログにしたいと思います。

3つの別々の箱を作ることは私の問題を解決しません。なぜなら、投稿は混ざり合っていて、他のタイプの投稿と同じくらい多くはないからです。

私は純粋なPHPの上でそれに対する解決策を考えることができました、しかし、私はwordpress APIを使ってこれをする方法についてのアイデアを手に入れたいです、どんな助けでも、参照は歓迎されるでしょう!

8
jonathan

もっと速いかもしれない代替手段をまだ探しているなら、これはあなたを助けるかもしれません:

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

それから、その出力を得るために、あなたがこれを出力したいところに<?php customBlogFeed(); ?>を置いてください。

あなたが本当に空想を得たいならば、あなたは post_limits フィルタに引っ掛けることができて、1ポストタイプにつきいくつのポストが表示されるか制限します。これがあなたの探求に役立つことを願っています。

PS - WP_Query を調べてください。これは本当に役に立ちます。

いくつかの調査の後、実際に post_clauses を調べて、WP3.1 +でこれらのSQLの特徴付けを行うことをお勧めします。

1
David

だから、数ヶ月後。私はあなたの正確な質問に対する答えを見つけました:

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;

    }
}

乾杯

1
David