我目前正在开发一个WordPress网站,该网站的大多数页面上都有一个侧边栏,该侧边栏应该显示正在浏览的当前父页面下的所有子页面的小导航,以及其中两个最新帖子。
我目前无法在侧边栏上显示链接;它们仅显示在网站的主要父页面上,而不显示在我需要的子页面上。
我创建了以下内容:
<?php
$args = array(
'post_type' => 'page',
'posts_per_page' => 10,
'post_parent' => $post->ID,
'order' => 'ASC',
'orderby' => 'menu_order'
);
$parent = new WP_Query( $args );
if ( $parent->have_posts() ) : ?>
<section class="links border shadow">
<ul>
<?php while ( $parent->have_posts() ) : $parent->the_post(); ?>
<li class="child-title">
<a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
<?php
$args2 = array(
'post_type' => 'page',
'posts_per_page' => 10,
'post_parent' => $post->ID,
'order' => 'ASC',
'orderby' => 'menu_order'
);
$parent2 = new WP_Query( $args2 );
if ( $parent2->have_posts() ) : ?>
<?php while ( $parent2->have_posts() ) : $parent2->the_post(); ?>
<div id="sub-<?php the_ID(); ?>" class="child-sub">
<p class="sub-title"><a href="<?php the_permalink(); ?>"
title="<?php the_title(); ?>"><?php the_title(); ?></a></p>
</div>
<?php endwhile; ?>
</li>
<?php endif; wp_reset_postdata(); ?>
<?php endwhile; ?>
</ul>
</section>
我还偶然发现了这段代码,来自另一个问题。这样做的作用相同(仅显示在父页面上),但也会显示指向实际父页面的链接。
<?php
if($post->post_parent){
$children = get_pages("child_of=".$post->post_parent);
$parent_title = get_the_title($post->post_parent);
$link = get_permalink($post->post_parent);
}
else{
$children = get_pages("child_of=".$post->ID);
$parent_title = get_the_title($post->ID);
$link = get_permalink($post->ID);
$parent_page = $post->ID;
}
if ($children) {
?>
<li <?php if( !empty($parent_page) && $parent_page==$post->ID){echo 'class="current-menu-item"';} ?>><a href="<?php echo $link; ?>"><?php echo $parent_title;?></a></li>
<?php
foreach( $children as $post ) : setup_postdata($post);
?>
<li <?php if(is_page($post->ID)){echo 'class="current-menu-item"';} ?>>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</li>
<?php
endforeach;
?>
<?php
}
?>
感谢您的帮助。谢谢。
答案 0 :(得分:1)
以下代码为我解决了该问题:
<?php
switch ($isBlogsPostPage){
case true:
$parentID=get_correct_id($post, $isBlogsPostPage);
break;
default:
$parentID=get_correct_id($post);
}
$args = array(
'post_type' => 'page',
'posts_per_page' => 10,
'post_parent' => $parentID,
'orderby' => 'menu_order'
);
$parent = new WP_Query( $args );
if ( true ) : ?>
<section class="links border shadow">
<ul>
<?php while ( $parent->have_posts() ) : $parent->the_post();?>
<li class="child-title <?php if ((is_page(get_the_ID())) || (get_the_ID()===(int) get_option( 'page_for_posts' ) && $isBlogsPostPage)) echo ('active'); ?>">
<a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
</li>
<?php /*endif;*/ wp_reset_postdata(); ?>
<?php endwhile; ?>
</ul>
</section>
<?php endif; wp_reset_postdata(); ?>