удалить дочернюю запись из архива пользовательских типов записей
У меня есть пользовательский тип записи и такая страница для отображения записей внутри:
Архив-(mycpt).php Я создал 2 поста, и один из них - ребенок. Как я могу отобразить только родительскую страницу в моем архиве -(mycpt).php
Вот фрагмент из архива-(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
1 answers
Когда сообщение (типа ony) является дочерним, его свойство post_parent
представляет собой число с идентификатором сообщения родителя. Сообщения без родителя вместо этого имеют значение 0
. Таким образом, вы можете проверить это значение:
if ( 0 === (int) $post->post_parent )
{
// show the post
}
Другой вариант - фильтр на pre_get_posts
(не проверено, просто идея):
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
Author: fuxia, 2013-11-06 17:32:25