私はいつもカスタム投稿タイプのアーカイブページやランディングページを作成する際に問題に遭遇し、他の人がどのようにこれを処理するのか知りたいと思いました。
カスタム投稿タイプのランディングページが必要な場合は、アーカイブページに編集可能なコンテンツを含める(つまり、物理ページにする)必要があります。アーカイブページ用のカスタムテンプレートを作成する必要があります。これに関するこの問題は、このページとカスタム投稿タイプとの関係がないことです。そのため、今度はarchiveをfalseに設定し、書き換え規則をカスタム投稿タイプのスラッグに一致させる必要があります。カスタム投稿タイプの単一ページを表示しているときも、メニューにカスタムランディングページがアクティブであることがわかりません。
誰もがこれのための論理的な解決策を持っていますか?
このような状況のために、私はtpl-archive-page.php
と言うカスタムページテンプレートを作成します。たとえば、 高度なカスタムフィールド および ポストタイプセレクタフィールド (*)を使用すると、ユーザーは接続先のポストタイプを選択できます。
<?php
/**
* Template Name: CPT Archive Page
*/
get_header();
while (have_posts()) :
the_post();
get_template_part('content', 'page');
$archive_query_post_type = get_post_meta(get_queried_object_id(), 'cpt_archive_query_post_type', true);
if( $archive_query_post_type && is_string($archive_query_post_type) ) {
$args = array(
'post_type' => $archive_query_post_type,
'posts_per_page'=> -1,
'orderby' => 'title',
);
$archive_query = new WP_Query( $args );
if ( $archive_query->have_posts() ) {
while ( $archive_query->have_posts() ) {
$archive_query->the_post();
get_template_part('content', get_post_type() );
}
}
wp_reset_postdata();
}
endwhile;
get_footer();
カスタム投稿タイプを登録するときのhas_archive
オプションはfalse
に設定する必要があります。
(*)ACF5/Proを使用している場合は、 this のフィールドの/を考慮してください。
私は...するだろう...
'has_archive' => false
で登録されたCPTを作成し、それをあなたの「編集可能なコンテンツ」のソースとして使用してください。archive-{cpt-name}.php
を作成し、そのテンプレート内でコンテンツCPTデータまたは「Page」データに対してクエリを実行します。