WP_LIST_PAGES按顶部导航菜单顺序和子项排序

时间:2016-09-30 作者:Amino

我试图在左侧边栏上显示一个框,其中包含当前页面子菜单的链接。但顺序和菜单不一样!有什么问题吗?

<div class="sidebar-box">
                <div class="sidebar-box-title">
                    <h4><?php echo get_the_title($post->post_parent); ?></h4>
                </div>
                <ul class="links">
                    <?php wp_list_pages(\'sort_order=asc&title_li=&sort_column=menu_order&depth=1&child_of=\'.$post->post_parent); ?>
                </ul>
            </div> 
演示:http://www.testhosting.co.uk/speedshealthcare/healthcare-supplies/care-home-pharmacy/

3 个回复
SO网友:TheDeadMedic

因为您仅订购menu_order, 而不是menu_order post_title. 事实上,你可以把你的sort_* 参数为wp_list_pages 默认情况下,将输出正确的自然顺序。

SO网友:Amino

我找到了这个http://wpsmith.net/2011/how-to-get-all-the-children-of-a-specific-nav-menu-item/

并且写了这个代码,所以它被修复了!

函数get\\u nav\\u menu\\u item\\u children($menu,$depth=true){

 $post_id = $post_id ? : get_the_ID();
$menu_items = wp_get_nav_menu_items($menu);

$parent_item_id = wp_filter_object_list($menu_items, array(\'object_id\' => $post_id), \'and\', \'menu_item_parent\');

if (!empty($parent_item_id)) {
    $parent_item_id = array_shift($parent_item_id);
    $parent_post_id = wp_filter_object_list($menu_items, array(\'ID\' => $parent_item_id), \'and\', \'object_id\');

    if (!empty($parent_post_id)) {
        $parent_post_id = array_shift($parent_post_id);

       $parent_id=  get_post($parent_post_id)->ID;
    }
}




$nav_menu_item_list = array();

foreach ((array) $menu_items as $nav_menu_item) {

    if ($nav_menu_item->post_parent == $parent_id) {

        $nav_menu_item_list[] = $nav_menu_item;

    }
}
return $nav_menu_item_list;
}

Usage

 $menuSide=get_nav_menu_item_children(\'Main menu\');

                      foreach ($menuSide as $link):
                        $active=\'\';
                          if(intval($post->ID)===intval($link->object_id)){
                              $active=\' current_page_item \';

                          }
                        echo \' <li class="\'.$active.\'"><a  href="\'.$link->url.\'">\' . $link->title . \'</a></li>\';
                    endforeach;

SO网友:mrwpress

您应该使用页面编辑器并设置“顺序”。设置页面顺序是这里的问题所在。设置顺序(从低到高)后,它将按该顺序显示在wp\\U list\\U页面中,而不是默认顺序,即@TheDeadMedic所述的页面标题。默认情况下,wp\\u list\\u pages按其post\\u标题的字母顺序列出页面。因此,如果你想要与之不同的东西,你必须逐个转到仪表板中的页面,并设置这些顺序。在那之后,你就一切都好了。

希望有帮助!

相关推荐

如何在WooCommerce_Account_Orders函数中传递$CURRENT_PAGE?

woocommerce功能woocommerce_account_orders($current_page) 已调用1个参数$current_page. 该函数通过调用woocommerce_account_orders_endpoint 通过以下挂钩-add_action( \'woocommerce_account_orders_endpoint\', \'woocommerce_account_orders\' );然而,在上述挂钩中,$current_page 未在函数中作为参数传递。情况如何$c