コンテキストに応じてページごとに異なる数の投稿を表示します(例:ホームページ、検索、アーカイブ)
質問
読み取り設定には、すべてのコンテキストで表示される投稿の数に影響を与える投稿の数を設定する場所があります。代わりに、ホームページに特定の数の投稿を表示し、アーカイブ、検索結果などのページに異なる数の投稿を表示したいと思います。
テーマファイルを編集してクエリパラメーターを変更することでこれを行うことができることに気付きましたが、簡単な設定ページに簡単にアクセスできることを好みます。ずっと前に、私はこれを行ったプラグインに出会いましたが、今は見つけることができません。
これを行うプラグインを知っている人、または同じことを達成するためにfunctions.phpを入れることができる関数さえ知っていますか?
解決
プラグインでこれを行う最良の方法は、次のサンプル関数を実行することだと思います。 pre_get_posts
アクションフックに遭遇します。 $wp_query
オブジェクトは利用可能です。つまり、条件付きタグが利用可能ですが、WordPressが投稿を取得する前に、Query_Posts()がテーマファイルで使用されるときのように2番目のクエリを追加するのではなく、最初のクエリが実行される前にクエリVARを変更します。 。
function custom_posts_per_page($query) {
if (is_home()) {
$query->set('posts_per_page', 8);
}
if (is_search()) {
$query->set('posts_per_page', -1);
}
if (is_archive()) {
$query->set('posts_per_page', 25);
} //endif
} //function
//this adds the function above to the 'pre_get_posts' action
add_action('pre_get_posts', 'custom_posts_per_page');
他のヒント
query_postsを使用してカスタムループを実行し、is_home、is_archiveなどで投稿数を指定できます。
query_postsとともに単純なifステートメント
この質問に追加します。この関数のためにpost_per_pageを決定する方法を知っていますか?custom_posts_per_page($ query)は、このようなindex.phpに新しいページを追加する場合:
<?php
if ($_GET['new'] == 1)
{
include ( TEMPLATEPATH . '/newpage.php' );
exit;
}
?>
テーマファイルを編集してクエリパラメーターを変更することでこれを行うことができることに気付きましたが、簡単な設定ページに簡単にアクセスできることを好みます。
完全性のために、私はそれを見つけました query_posts
と組み合わせ $query_string
連結はうまく機能します。
このコードを入れました index.php
(私のテーマにはcategory.phpがありません)...
<?php
if (!is_front_page()) {
query_posts($query_string . "&posts_per_page=20");
}
?>
もちろん、私たちがここでやっていることは、ループの内部クエリ文字列を変更することです。 ページごとの投稿のデフォルト数をオーバーライドします.
ホームページに投稿の小さなリストを提供しているため、私が完全な投稿を表示しているのは、投稿の概要のみを表示するだけの場所(カテゴリ、日付など)のはるかに大きな投稿のリストを提供するために働きます。
ただし、受け入れられている答えとは異なり、 これにより、クエリが2回実行されます, 、だからそれはそれほど良い解決策ではありません。