web-dev-qa-db-ja.com

カスタム投稿タイプ内に子ページを作成する

私はこのようなリンクを持つことができるようにしたい、 site.com/my-custom-type-slug/single-custom-post-name/stats/ 、ここで /stats /my-custom-type-slug ページのコンテンツを含める必要があります。また、 /stats ページにコンテンツを追加する場合は、親のコンテンツの後に追加する必要があります。

/stats ページは、CPT内で作成されたすべてのページで使用できます。たとえば、 /my-custom-type-slug2 /my-custom-type-slug3 など、 // stats とします。

解決策として、 stats という名前のページを作成してカスタムテンプレートを割り当てることができると考えていますが、問題は自分が作成した新しい投稿ごとに追加のコンテンツを作成する方法です。

このようにしているので、コメントを有効にする必要がなければ、これは簡単です。

自分の投稿内に _ acf _ / pluginでカスタムWYSIWYGフィールドを追加してから、エンドポイントを作成します。

function wpa121567_rewrite_endpoints(){
    add_rewrite_endpoint( 'stats', EP_PERMALINK );
}
add_action( 'init', 'wpa121567_rewrite_endpoints' );

この後、私のURLは次のようになります。
site.com/your-custom-type-slug/single-custom-post-name/stats/

それから私のsingle-{cpt}.phpテンプレートで、リクエストが stats に対するものであるかどうかをチェックし、必要なデータを含めるか出力することができます。

if( array_key_exists( 'stats', $wp_query->query_vars ) ){
    // the request is for the comments page
} 
else {
    // the request is for the main post
}

私はそれを作成するためにエンドポイントを使用しているので私は /stats の上でコメントを有効にすることができないのでこの解決策は私のために働かない。

結論として、私が必要としているのは、親ページと "/ stats"ページの両方に対する2つの別々のコメントのセットです。これを達成する方法について何か提案はありますか?

4
agis

私はあなたのsingle-{cpt}.phpに追加のループを作成するための階層的なカスタム投稿タイプと条件を提案します。階層型のカスタム投稿タイプを使用すると、 サブページ のように sub-cpt を親投稿の stats 部分として作成できます。

sub-cpt を使用して、追加データ(post_contentまたはcustom_fieldsなど)と、投稿の stats 部分に固有のコメントを保存できます。

pre_get_postsフックを使ってメインループに親cpt(sub cptを除く)だけを含める必要があることに注意してください。

single-{cpt}.phpでは、これは次のようになります。

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <?php if( array_key_exists( 'stats', $wp_query->query_vars ): ?>

        <!-- output the data for the stats part -->
        <?php
            // query sub cpt data
            $args = array(
                'post_parent' => $post->ID,
                'post_type'   => 'your-cpt', 
                'posts_per_page' => 1,
                'post_status' => 'any'
            );

            $sub_cpt = get_children( $args);

            // query sub cpt comment
            $args = array(
                'post_id' => $sub_cpt->ID,
            );

            $child_post_comment = get_comments( $comment_args );
        ?>

    <?php else: ?>

        <!-- output the data as you intended for the non stats part -->
        <?php the_title(); ?>
        <?php the_content(); ?>
        <?php
            // query sub cpt comment
            $args = array(
                'post_id' => $post->ID,
            );
        ?>
        <?php get_comments( $args ); ?>

    <?php endif; ?> 
<?php endwhile; ?>
<?php endif; ?>
1
ifdion