web-dev-qa-db-fra.com

Créer une page enfant dans un type de publication personnalisé

Je veux pouvoir avoir un lien comme celui-ci, site.com/my-custom-type-slug/single-custom-post-name/stats/ , où/stats doit contenir le contenu de la page/my-custom-type-slug et lorsque j'ajoute du contenu à la page/stats , il doit être ajouté après le contenu du parent.

La page/stats doit être disponible pour chaque page créée dans mon CPT, par exemple/mon-custom-type-slug2 ,/mon-custom-type-slug3 , et ainsi de suite, pour avoir le/stats .

Je pense qu’une solution peut être de créer une page nommée stats et d’affecter un modèle personnalisé, mais le problème est de savoir comment puis-je créer le contenu supplémentaire pour chaque nouveau message que je crée?

Ce serait facile si je n'avais pas besoin d'activer les commentaires car je le faisais comme ceci:

Ajoutez un champ WYSIWYG personnalisé dans mes publications avec ACF plugin, puis créez un point de terminaison:

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

Après cela, mon URL ressemblerait à ceci:
site.com/your-custom-type-slug/single-custom-post-name/stats/

Ensuite, dans mon modèle single-{cpt}.php, je peux vérifier si la demande concerne stats , et inclure ou générer les données souhaitées:

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

Cette solution ne fonctionne pas pour moi car je ne peux pas activer les commentaires sur/stats car j'utilise un noeud final pour le créer.

En conclusion, il me faut deux ensembles de commentaires distincts pour les pages parent et "/ stats". Des suggestions sur la façon de réaliser ceci?

4
agis

Je suggère un type de publication personnalisé hiérarchique et une condition pour créer une boucle supplémentaire sur votre single-{cpt}.php. En utilisant un type de message personnalisé hiérarchique, vous pouvez créer un sous-cpt , comme une sous page comme la partie stats de son article parent.

Le sous-cpt then peut être utilisé pour stocker des données supplémentaires (par exemple, dans post_content ou custom_fields) ainsi que le commentaire spécifique à la partie stats de la publication.

Notez que vous devrez inclure uniquement le parent cpt (à l'exclusion du sous-cpt) sur la boucle principale à l'aide du hook pre_get_posts.

Sur le single-{cpt}.php cela devrait être quelque chose comme ça

<?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