新しいテンプレートの作成やそこでの新しい$wp_query
オブジェクトの作成を扱うことなく、特定のカテゴリのWP_Query
オブジェクトを置き換えることを試みています。
私の目的は、The Loopで利用可能なデータを、そのリクエストのデフォルトからカスタムクエリに変更することです。
add_filter( 'pre_get_posts', 'custom_wpquery' );
function custom_wpquery( $query ){
global $wp_query;
if (is_category(121)) {
if ($wp_query === $query) {
$query = new WP_Query('page_id=146');
$query->set('page_id', 146);
}
}
return $query;
};
それはThe Loopにまったく影響を与えないようです、私は何を間違っていますか?
これはうまくいくように思えますが、それがこの種の上書きを提供するための「正しい」方法であるならば、私は他人からのヒアリングに興味があるでしょう。 http://www.example.com/category/computers/ のようなカテゴリアーカイブページにアクセスしているとします。
// landing page = 188
// category = "computers" (#8)
function custom_wpquery( $query ){
// the main query
global $wp_the_query;
if ( 'computers' === $query->get( 'category_name' ) ) {
if ( $wp_the_query === $query) {
// reset and override the active query
$query->init();
$query->query( 'page_id=188' );
}
}
};
add_filter( 'pre_get_posts', 'custom_wpquery' );
これはおそらく$query->is_archive
もテストするはずです。