2016-09-12 4 views
0

私は最近WordPressに慣れており、最近はpre_get_postsについて多くのことを学んでいます。私は基本的なコンセプトを理解していますが、ドキュメントの一部でうまくいっています。 codexからメインクエリの外でpre_get_postsを使用できますか?

「テンプレートファイル(例えば、archive.php)、で使用される場合、クエリが完了した後に、それらが呼び出されるので、同様に、pre_get_postsは動作しません。」

テンプレートファイルで使用できない場合は、index.phpのみが有効であることを意味しますか?その場合、pre_get_postsがアーカイブの表示方法を変更するために使用されるページの下の例がありますか?

私はpre_get_posts(特にquery_posts)の機能を理解していますが、1つのサイトで何度も何度も使用できるようになっています。私が見ているすべては、それがメインループのために一度だけ使用されていることを示しています。

ご指摘いただきありがとうございます。

答えて

0

archive.php,category.phpのようなファイルは、WordPressがというテンプレートファイルと呼ばれるファイルです。 documentationのように、ページテンプレートは一般に高いレベルの特異性を持っています。これは、テンプレートファイルが呼び出される前にクエリが既に初期化されているため、pre_get_postsがテンプレートファイルのポイントを見つけられない理由を説明します。

archive.php,category.phpなどのテンプレートファイルを使用せずにアーカイブを表示できますが、pre_get_postsは実際にはメインクエリで呼び出されることのみを目的としています。つまり、functions.phpファイルにadd_action('pre_get_posts', 'my_callback_function')を追加すると、サイト全体のクエリが変更されます。あなたはそのようにしてコールバック関数内の特定のページの種類に基づいてフィルタリングすることができます

function my_callback_function($query){ 

    // Only if page type is category 
    if(is_category()){ 
     $query->set('posts_per_page', 7); 
    } 

    // Always except for search page types 
    if(!is_search()){ 
     $query->set('posts_per_page', 4); 
    } 
} 

この方法で二回pre_get_postsをコールする必要はありません。

複数のクエリを実行するか、またはarchive.phpクエリを指定する場合は、WP_Query()のインスタンスを使用します。

More details

+0

本当にありがとうございます。本当にありがとうございます。私の唯一のフォローアップの質問はこれです:pre_get_postsがメインクエリのためのものである場合、 – Travis

+0

その応答をありがとう、私は本当に感謝します。私の考えでは、私がWPで開発するものの大部分は1つのメインクエリを持っていて、他のほとんどのページリクエストはテンプレートファイルに渡されて、WP_Query()のインスタンスを使うことができます。同じサイトでpre_get_postsを複数回使用できるシナリオはありますか?助けてくれてありがとう、私はあなたの応答をupvoteしようとしましたが、まだ登録するための十分な評判がありません。 – Travis

+0

これは本当に私のことを考えていました。私はコーヒーが必要だと思っています...すべてのタイプのページリクエストでメインクエリに影響を与えたい場合、あなたの 'functions.php'ファイルに' add_action'とコールバック関数を入れなければなりません。これは実際には'archive.php'、' category.php'、 'category-category-a.php'のようなすべてのサブテンプレートファイルです。 'function_php'で、' add_action( 'pre_get_posts'、 'my_category_callback_function') 'のように' functions.php'で異なるコールバック関数を作成することはできますが、複数のコールバック関数は1つのクエリにしか影響しないので、 、主なクエリです。 – Joachim

関連する問題