web-dev-qa-db-ja.com

カスタム投稿タイプのランディングページまたははアーカイブページを作成するための適切な方法

私はいつもカスタム投稿タイプのアーカイブページやランディングページを作成する際に問題に遭遇し、他の人がどのようにこれを処理するのか知りたいと思いました。

カスタム投稿タイプのランディングページが必要な場合は、アーカイブページに編集可能なコンテンツを含める(つまり、物理ページにする)必要があります。アーカイブページ用のカスタムテンプレートを作成する必要があります。これに関するこの問題は、このページとカスタム投稿タイプとの関係がないことです。そのため、今度はarchiveをfalseに設定し、書き換え規則をカスタム投稿タイプのスラッグに一致させる必要があります。カスタム投稿タイプの単一ページを表示しているときも、メニューにカスタムランディングページがアクティブであることがわかりません。

誰もがこれのための論理的な解決策を持っていますか?

4
hyperdrive

このような状況のために、私は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 のフィールドの/を考慮してください。

2
luke

私は...するだろう...

  1. 'has_archive' => falseで登録されたCPTを作成し、それをあなたの「編集可能なコンテンツ」のソースとして使用してください。
  2. あなたが好めばまたは単純な "ページ"を使用
  3. 次に、テーマ内にarchive-{cpt-name}.phpを作成し、そのテンプレート内でコンテンツCPTデータまたは「Page」データに対してクエリを実行します。
0
s_ha_dum