it-swarm-ja.com

どこのループにフックしているのかを特定します。

どのループに入っているかを判断するための最も効率的な方法は何ですか?

私は WP_Query::get_posts() のさまざまな部分にフックすることによってクエリを変更するいくつかのプラグインを持っています、すなわち posts_whereposts_joinなど ただし、すべてのページですべてのループを実行したくないので、今は debug_backtrace() を実行し、必要に応じてthe main()または query_posts() 関数の存在を確認します。

各ページのプライマリループとサブループを識別するより効率的な方法が必要です。クエリ変数や要求の他の側面について詳しく調べると、見逃していることがありますが、それぞれ固有のものです。どのようにしてこれをやりますか?

3
mwaterous

WP 3.3に新しいメソッドis_main_query()が導入されたことを簡単に更新したものです。

例:

add_action( 'pre_get_posts', 'foo_modify_query_exclude_category' );
function foo_modify_query_exclude_category( $query ) {
    if ( $query->is_main_query() && ! $query->get( 'cat' ) )
    $query->set( 'cat', '-5' );
}

リソース:

5
Michal Mau

二次ループが正しく呼び出された場合(つまり、query_posts()を使わずに、get_posts()または$myloopに等しい変数new WP_Queryを設定することによって)、そのループを識別するのは、変数を参照するのと同じくらい簡単です。

プライマリループ内から2番目のループを呼び出す必要があり、セカンダリループでsetup_postdata()を呼び出す必要がある場合は、テンプレートタグがプライマリループへの適用に戻るように、セカンダリループを閉じるときにwp_reset_query()を呼び出す必要があります。

0
Chip Bennett