Перебирайте дочерние страницы, когда они уже находятся на дочерней странице

У меня есть сайт недвижимости, где родитель — это развитие, а дети — это застройки.

На странице разработки я использую следующий код для отображения всех дочерних страниц (страниц графиков) этой разработки.

<?php
$args = array(
'post_type'      => 'property',
'posts_per_page' => -1,
'post_parent'    => $post->ID,
'orderby'       => 'plot_number',
'order'         => 'ASC'
);
$parent = new WP_Query( $args );
if ( $parent->have_posts() ) :
?>
<?php while ( $parent->have_posts() ) : $parent->the_post(); ?>

//CONTENT GOES HERE

<?php endwhile; ?>
<?php endif; wp_reset_query(); ?>

Я хочу отобразить то же самое (все дочерние страницы разработки), но на самих дочерних страницах. По сути, мне нужно проверить, есть ли у страницы родитель, а затем перебрать дочерние страницы …

Есть идеи?

0

Решение

Вы можете использовать тот же запрос, что и выше, с одной небольшой модификацией. Только одна записка, прежде чем я продолжу, если вы используете WP_Query, вы должны использовать wp_reset_postdata()не wp_reset_query(), Последний используется с query_posts что в любом случае вы должны никогда использование

Чтобы получить должность родителя, вы можете использовать $post->post_parent, Это вернет идентификатор родителя текущей страницы. Если идентификатор возвращается 0, это означает, что это страница верхнего уровня. Так что вы также хотели бы проверить, если $post->post_parent не является 0 перед выполнением запроса, или вы вернетесь назад ко всем сообщениям независимо от того, является ли текущая страница страницей верхнего уровня

пример

<?php

global $post;

if( 0 != $post->post_parent ) {

$args = array(
'post_type'      => 'property',
'posts_per_page' => -1,
'post_parent'    => $post->post_parent,
'orderby'       => 'plot_number',
'order'         => 'ASC'
);
$parent = new WP_Query( $args );
if ( $parent->have_posts() ) :
?>
<?php while ( $parent->have_posts() ) : $parent->the_post(); ?>

//CONTENT GOES HERE

<?php endwhile; ?>
<?php wp_reset_postdata(); endif;

}
?>

Еще одна вещь, которую я взял сейчас, вы должны использовать wp_reset_postdata() до endif но после endwhile

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]