web-dev-qa-db-fra.com

supprimer la publication enfant de l'archive de type publication personnalisée

J'ai un type d'article personnalisé et une page comme celle-ci pour afficher les articles à l'intérieur:

archive- (myCPT) .php J'ai créé 2 publications, dont l'une est l'enfant. Comment puis-je afficher uniquement la page parente dans mon archive- (myCPT) .php

Voici un extrait de archive- (myCPT) .php :

<?php 

        if( have_posts() ){ 
            // normal blog layout
                $x = 1;
                while ( have_posts() ){
                    the_post(); 
                    get_template_part( 'inc/post-format/content-debate');
                    // advertising between posts
                    if($ad_posts_mode != 'none'){
                        // take into account ad frequency
                        if (($x % $ad_posts_frequency) == 0){

                            switch ($ad_posts_mode) {
                                case 'image':
                                    echo '<div class="'.(($ad_posts_box) ? 'box' : '').' between_posts"><a target="_blank" href="'.of_get_option('ad_posts_image_link').'"><img src="'.of_get_option('ad_posts_image').'"></a></div>';
                                break;
                                case 'html':
                                    echo '<div class="'.(($ad_posts_box) ? 'box' : '').' between_posts">'.apply_filters('shortcode_filter',do_shortcode(of_get_option('ad_posts_code'))).'</div>';
                                break;
                            }
                        }
                    }
                    $x++;
                }
            }
1
agis

Lorsqu'une publication (de type unique) est un enfant, sa propriété post_parent est un numéro avec l'identifiant de publication du parent. Les publications sans parent ont plutôt la valeur 0. Vous pouvez donc tester cette valeur:

if ( 0 === (int) $post->post_parent )
{
    // show the post
}     

Une autre option est un filtre sur pre_get_posts (non testé, juste une idée):

add_action( 'pre_get_posts','hide_children' );

function hide_children( $query ) 
{
    remove_action( 'pre_get_posts', current_filter() );

    if ( is_admin() or ! $query->is_main_query() ) 
        return;

    if ( ! $query->is_post_type_archive( 'your_post_type_name' ) )
        return;

    // only top level posts
    $query->set( 'post_parent', 0 );
}
5
fuxia