pre_get_posts
をこのように使うと
function ef_company_query($query) {
if ( !is_admin() && $query->is_main_query() && $query->is_post_type_archive( 'company' ) ) {
$query->set('post_type', array( 'company', 'mission', 'values', 'staff' ) );
}
}
add_action('pre_get_posts','ef_company_query');
wordpressはarchive-company.phpではなくarchive.phpをロードしないようです。
アーカイブページに余分なCPTを追加するためにpre_get_posts
を使用するにはどうすればよいですか?
編集1
私はURL www.website.com/companyで追加のCPTをロードしたいのでarchive-company.phpに言及しました。
編集2
URL www.website.com/companyに基づいて特定のテンプレートを取得し、追加のCPTを追加できるようにする(できればpre_get_posts
を使用して、パフォーマンス的には)任意の解決策を選択できます。
編集3
ここで物事をより明確にしようとしている!
Www.website.com/companyのURLで複数のCPTをロードできるようにしたいです。
pre_get_posts
、パフォーマンスの観点から)。私はnew WP_Query()
の使用を避け、ページ内に複数のループを入れようとしています。
あなたはそれが first のために複数の投稿タイプのアーカイブをつかむと仮定するようです。しかし、なぜ?この場合の順序は、いかなる種類の優先順位も示していません。
WPはその論理も同様に考慮しているようです。 get_archive_template()
を見てみると、個々のテンプレートは、クエリに 1つだけ postタイプがある場合にのみ考慮されます。
ご覧のとおり、クエリに複数の投稿タイプがあるとarchive.php
が読み込まれます。
もっと具体的なテンプレートをロードしたい場合は、archive_template
one(get_query_template()
内の動的なもの)のように、フィルタを介してそれを上書きする必要があります。