/ Wordpress / Родительские и дочерние страницы

Родительские и дочерние страницы

HIT

08.07.2019

3372

С недавнего времени стал активно использовать функционал родительских страниц. Для организации небольших разделов (до 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");

Поделиться в соц. сетях:

  • Комментарии
  • Вложения

Добавить комментарий

Пока нет комментариев. Будь первым!

Родительские и дочерние страницы
Посты — метки на карте
Рекомендации для васПосты — метки на картеOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.