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


8

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

ブログには、Poscast、ビデオ、ブログなどのいくつかの投稿タイプがあり、ホームページに10件の投稿があるとしますが、そのうち5件を常に最新のブログにしたいと思います。

3つの別々のボックスを作成しても問題は解決しません。これは、投稿が混合されており、他のタイプの投稿が常に存在するわけではないためです。

私は純粋なPHPでの解決策を考えることができますが、wordpress APIを使用してこれを行う方法についてのアイデアを知りたいと思います。


ええ、それはこれを行うのに効果的または「正しい方法」ではありませんが、とにかく+1です。達成したいことを示すために取った努力に感謝します。:)
カイザー

1
標準的な方法で二次ループを使用することをお勧めします。3 get_postsタイプのクエリを発行するだけです。これらには、キャッシング(利用可能なバックエンドのいずれか)とセキュリティなどの利点が追加されます。codex.wordpress.org/The_Loop#Multiple_Loops
soulseekah

+あなたの努力のために1!
Rutwick Gangurde

回答:


1

あなたがより速いかもしれない代替案をまだ探しているなら、これはあなたを助けるかもしれません:

<?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フィルターをフックして、表示される投稿タイプごとの投稿数を制限できます。これがあなたの探求に役立つことを願っています。

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

いくつかの調査の後、実際にpost_clausesを調べて、WP3.1 +構文でこれらのSQL特性化を行うことができます。


1

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

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;

    }
}

乾杯

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.