コンテキスト(ホームページ、検索、アーカイブなど)に応じて、ページごとに異なる数の投稿を表示する


21

閲覧設定には、すべてのコンテキストで表示される投稿の数に影響する、表示される投稿の数を設定する場所があります。代わりに、ホームページに特定の数の投稿を表示し、アーカイブ、検索結果などのページに異なる数の投稿を表示したいと思います。

読み取り設定、ブログページ、ページごとの最大表示

テーマファイルを編集し、そこでクエリパラメータを変更することでこれを実行できることを理解していますが、単純な設定ページに簡単にアクセスできるようにしたいと思います。昔、これを行うプラグインに出くわしましたが、今は見つけることができません。

誰もがこれを行うプラグイン、または同じことを達成するためにfunctions.phpに入れることができる関数さえ知っていますか?


あなたは、おそらくチップ・ベネットの「別の記事ページごとの」プラグイン@のことを考えていました:chipbennett.net/plugins/cbnet-different-posts-per-pageあなたがグラフィカルな方法で何をしたいん。
トム・オージェ

回答:


23

プラグインでこれを行う最良の方法は、pre_get_postsアクションフックに遭遇したときに次のサンプル関数を実行することだと思います。$wp_queryオブジェクトは、利用可能であるあなたの条件タグが利用可能です意味が、ワードプレスは、クエリを変更する手段のポストを、取得する前に、実行されている、というよりもquery_posts()は、テーマで使用されるときのような2番目のクエリを追加する最初のクエリの前にvarsのファイル。

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');

私は自分のサイトでこの機能を使用しています。ここで簡単にカットアンドペーストできました。
kevtrout

0

query_postsを使用してカスタムループを作成し、is_home、is_archiveなどで投稿数を指定できます。

query_postsを伴う単純なifステートメント


はい、質問でそれを言及しました。設定を変更するために複数のテーマファイルを編集する必要がないようにする方法を探しています。ありがとう。
ダグ

1
この方法で行うのはかなり悪い考えです。WordPressはすでにクエリを実行しています。あなたが入れた場合はquery_posts、あなたのテーマで、あなたは元のクエリを無視して別の、冗長なものを作るだろう。
クルジシークドローデドゥ

-1

この質問に追加します。次のようにindex.phpに新しいページを追加する場合、この関数function custom_posts_per_page($ query)のpost_per_pageを決定する方法を誰かが知っていますか。

<?php
if ($_GET['new'] == 1) 
{
    include ( TEMPLATEPATH . '/newpage.php' );
    exit;
}
?>

-1

テーマファイルを編集し、そこでクエリパラメータを変更することでこれを実行できることを理解していますが、単純な設定ページに簡単にアクセスできるようにしたいと思います。

完全をquery_posts期すために、$query_string連結と組み合わせるとうまくいくことがわかりました。

このコードを配置しましたindex.php(私のテーマにはcategory.phpがありません)...

<?php 
if (!is_front_page()) { 
    query_posts($query_string . "&posts_per_page=20"); 
}
?>

もちろん、ここで行っているのは、ループの内部クエリ文字列を変更して、ページあたりのデフォルトの投稿数をオーバーライドすることです

これは、完全な投稿を表示しているホームページの投稿の小さなリストと、投稿の要約のみを表示している他の場所(カテゴリ、日付など)の投稿の大きなリストを提供するのに役立ちます。

ただし、受け入れられた答えとは異なり、これはクエリを2回実行するため、それほど良い解決策ではないことに注意してください。


ジェフ、私は、異なるコンテキストで返される投稿の数を制御するための集中管理された場所を探していました。あなたの答えは、index.phpを使用してすべてのコンテキストを処理する場合にのみ行われますが、ほとんどのテーマではできません。データベースへの呼び出しを増やす(パフォーマンスに影響する)だけでなく、この手法では、予期しない方法で条件タグ(is_home()やis_front_pageなど)への応答を変更することもできます。最後に、ページに2次ループを追加する場合は、query_postsを使用せずに、代わりに「new WP_Query」(またはget_posts)を使用する必要があります。
ダグ

@dougこれはセカンダリループではなく、メインループをオーバーライドします。そして、この特定のテーマはindex.phpを使用してすべてをレンダリングします。これはかなり最小限です。ここでは答えとしてこれがより理にかなっていると感じましたが、もしあなたが望むなら、私自身の質問をして、この答えが何らかの形であなたを怒らせたら答えることができます。
ジェフアトウッド

実際、私はあなたの最後から2番目の段落を読み違え、「より大きい」と「より小さい」投稿のリストが同じページにあると思ったので、上の私の最後の文は無関係でした。もちろん、必要に応じてすべてのコードをindex.phpに入れることは完全に合法です。もしそうなら、あなたの方法はこれを素早く簡単に行う方法なので、20時間のロックが終わった後、私のダウン投票を削除します。それでも、kevtroutの回答のように元のクエリを変更するのではなく、新しいクエリを送信することは、既に述べた理由(私、WP Codex)にとって望ましくありません。
ダグ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.