С недавнего времени стал активно использовать функционал родительских страниц. Для организации небольших разделов (до 10 страниц) это удобнее чем делать рубрику с записями.
Вывод дочерних страниц
Вывод на текущей странице-родителе
<?php $page_children = new WP_Query(array(
'post_type' => 'page',
'post_parent' => get_the_ID()
)
); ?>
<?php if($page_children->have_posts()) : ?>
<ul>
<?php while($page_children->have_posts()): $page_children->the_post();
echo '<li><a href="'.get_the_permalink().'">'.get_the_title().'</a></li>';
endwhile; ?>
</ul>
<?php endif; wp_reset_query(); ?>
Проверка, является ли страница родительской
<?php if ( is_page() && $post->post_parent ) { echo 'This Parent Page'; } ?>
Шорткод вывода дочерних страниц ( [wpb_childpages] ):
function wpb_list_child_pages() {
global $post;
if ( is_page() && $post->post_parent )
$childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=0' );
else
$childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0' );
if ( $childpages ) {
$string = '<ul>' . $childpages . '</ul>';
}
return $string;
}
add_shortcode('wpb_childpages', 'wpb_list_child_pages');
Получение родительской страницы из дочерней
ID страницы-родителя
$post->post_parent;
Кнопка возврата на родительскую страницу, если она есть:
<?php $parent_page = $post->post_parent;
if ( !empty($parent_page) ): ?>
<a class="back" href="<?php echo esc_url( get_page_link( $parent_page ) ); ?>"><i class="fa fa-reply" aria-hidden="true"></i> Вернуться в раздел <?php echo get_the_title( $parent_page ); ?></a>
<?php endif; ?>
Стиль кнопки
a.back {
background: #FF9800;
color: #fff;
padding: 12px 45px;
display: inline-block;
border-radius: 3px;
}
Следующая и Предыдущая страница (page)
Данный функционал в WP настроен на посты, но можно сформировать запрос и для страниц:
<?php
$pagelist = get_pages("child_of=".$post->post_parent."&parent=".$post->post_parent."&sort_column=menu_order&sort_order=asc");
$pages = array();
foreach ($pagelist as $page) {
$pages[] += $page->ID;
}
$current = array_search($post->ID, $pages);
$prevID = $pages[$current-1];
$nextID = $pages[$current+1];
?>
<div class="nav">
<?php if (!empty($prevID)) { ?>
<a id="nav-left" href="<?php echo get_permalink($prevID); ?>" title="<?php echo get_the_title($prevID); ?>"><?php echo get_the_title($prevID); ?></a>
<?php }
if (!empty($nextID)) { ?>
<a id="nav-right" href="<?php echo get_permalink($nextID); ?>" title="<?php echo get_the_title($nextID); ?>"><?php echo get_the_title($nextID); ?></a>
<?php } ?>
</div>
Можем изменить формирование порядка страниц не по индексу (если он не задан), а по дате публикации:
$pagelist = get_pages("child_of=".$post->post_parent."&parent=".$post->post_parent."&sort_column=post_date&sort_order=desc");