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++;
}
}
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 );
}