如何使用While循环和wp_list_ages将活动类添加到自定义菜单

时间:2016-08-09 作者:Heather

我正在跑步wp_list_pages 通过while循环创建自定义菜单。通过循环运行它,我可以针对特定的元素进行显示。我需要弄清楚如何针对wp_list_pages 或者将自定义活动页面类应用于my while循环生成的列表。

这是我正在使用的代码:

<?php echo \'<ul>\';

$args = array(
    \'post_type\' => \'page\',
    \'post_status\' => \'publish\',
    \'posts_per_page\' => -1,
    \'post_parent\' => $post->post_parent,
);
$query = new WP_Query($args);
while ($query->have_posts()) {
      $query->the_post();

$child = get_pages(\'child_of=\'.$post->ID);

if( count( $child ) != 0 ) : ?>
      <li class="has-children"><span><?php the_title(); ?></span>
      <?php $children = wp_list_pages( \'title_li=&child_of=\'.$post->ID.\'&echo=0\' );
      if ( $children) : ?>
           <ul class="children">
               <li><a href="<?php the_permalink(); ?>">Overview</a></li>
               <?php echo $children; ?>
           </ul>
      <?php endif; ?>
      </li>                           
<?php else : ?>
      <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>

<?php endif; 
}
echo \'</ul>\'; ?>
如果在第2.2页(注意类current_page_item) :

<ul>
    <li><a href="http://website.com/page-1">Page 1</a></li>
    <li class="has-children"><span>Page 2</span>
        <ul class="children">
            <li><a href="http://website.com/page-2">Overview</a></li>
            <li class="page_item page-item-115"><a href="http://website.com/page-2/page-2-1">Page 2.1</a></li>
            <li class="page_item page-item-116 current_page_item"><a href="http://website.com/page-2/page-2-2">Page 2.2</a></li>
        </ul>
    </li>
    <li><a href="http://website.com/page-3">Page 3</a></li>
    <li><a href="http://website.com/page-4">Page 4</a></li>
如果在第1页,则输出为(请注意,没有表示活动页的类):

<ul>
    <li><a href="http://website.com/page-1">Page 1</a></li>
    <li class="has-children"><span>Page 2</span>
        <ul class="children">
            <li><a href="http://website.com/page-2">Overview</a></li>
            <li class="page_item page-item-115"><a href="http://website.com/page-2/page-2-1">Page 2.1</a></li>
            <li class="page_item page-item-116"><a href="http://website.com/page-2/page-2-2">Page 2.2</a></li>
        </ul>
    </li>
    <li><a href="http://website.com/page-3">Page 3</a></li>
    <li><a href="http://website.com/page-4">Page 4</a></li>
你会注意到李在我的第二个<ul> 上课current_page_item 如果在那页上,因为我完全依赖wp_list_pages 生成列表。我想找到一种方法来添加active 类到第一个<ul> 如果其中一个是li的是当前页面或目标类wp_list_pages 动态创建。

1 个回复
最合适的回答,由SO网友:Heather 整理而成

在此处找到答案:Add class to the items in wp_list_pages

只需添加<?php if(is_page($post->ID )) {?> class="current_page_item" <?php }?>. 我把它添加到<li> 第二层包含我的概述链接<ul class="children"> 以及<li> 在顶层<ul> 如果页面没有子级。

<?php echo \'<ul>\';

$args = array(
    \'post_type\' => \'page\',
    \'post_status\' => \'publish\',
    \'posts_per_page\' => -1,
    \'post_parent\' => $post->post_parent,
);
$query = new WP_Query($args);
while ($query->have_posts()) {
      $query->the_post();

$child = get_pages(\'child_of=\'.$post->ID);

if( count( $child ) != 0 ) : ?>
      <li class="has-children"><span><?php the_title(); ?></span>
      <?php $children = wp_list_pages( \'title_li=&child_of=\'.$post->ID.\'&echo=0\' );
      if ( $children) : ?>
           <ul class="children">
               <li <?php if(is_page($post->ID )) {?> class="current_page_item" <?php }?>><a href="<?php the_permalink(); ?>">Overview</a></li>
               <?php echo $children; ?>
           </ul>
      <?php endif; ?>
      </li>                           
<?php else : ?>
      <li <?php if(is_page($post->ID )) {?> class="current_page_item" <?php }?>><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>

<?php endif; 
}
echo \'</ul>\'; ?>