Bam*_*ylo 5 wordpress children menu
我正在尝试处理Wordpress 3.0.这是相当酷的事情,但我无法继续解决一个问题.例如,我有这样的菜单树.菜单树由页面构成.
Home
news
video
audio
Blog
About author
Favourite colors
red
blue
green
My car
wheels
tires
Run Code Online (Sandbox Code Playgroud)
想法是:主菜单由根元素组成:home,blog,my car在左侧我想显示当前活动根元素的子元素.
例如,如果人在"主页"页面上,在左侧部分他应该看到:
news
video
audio
Run Code Online (Sandbox Code Playgroud)
如果用户在"博客"页面上,他应该看到:
About author
Favourite colors
red
blue
green
Run Code Online (Sandbox Code Playgroud)
我找不到一个API来做到这一点.请问我能在哪里找到它?
UPD: @Jason McCreary我见过我见过wp_list_pages()并试过了.我不知道如何使用它:请参阅我的模板页面:
<?php
/*
Template Name: page_news
* @package WordPress
* @subpackage Twenty_Ten
* @since Twenty Ten 1.0
*/
get_header(); ?>
<h1>page_news</h1>
<h1>Children menu:</h1>
<?php wp_list_pages('echo=0&child_of=8&title_li='); ?>
<div id="container">
<div id="content" role="main">
<?php
/** Get category id by name*/
//$catId = get_category_by_slug('news')->term_id;
query_posts('category_name=news');
get_template_part( 'loop', 'page' );
?>
</div><!-- #content -->
</div><!-- #container -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Run Code Online (Sandbox Code Playgroud)
看到这行代码:
<?php wp_list_pages('echo=0&child_of=8&title_li='); ?>
Run Code Online (Sandbox Code Playgroud)
我有id = 8的页面(我在URL中看到它).id = 8的页面有几个孩子.我想打印它们,但它们没有打印.函数wp_list_pages()的输出什么都没有.我不知道为什么...... :(
小智 23
您可以编写filter_hook来完成此任务.
我的方法:start_in为wp_nav_menu使用我的自定义钩子创建一个额外的参数:
# in functions.php add hook & hook function
add_filter("wp_nav_menu_objects",'my_wp_nav_menu_objects_start_in',10,2);
# filter_hook function to react on start_in argument
function my_wp_nav_menu_objects_start_in( $sorted_menu_items, $args ) {
if(isset($args->start_in)) {
$menu_item_parents = array();
foreach( $sorted_menu_items as $key => $item ) {
// init menu_item_parents
if( $item->object_id == (int)$args->start_in ) $menu_item_parents[] = $item->ID;
if( in_array($item->menu_item_parent, $menu_item_parents) ) {
// part of sub-tree: keep!
$menu_item_parents[] = $item->ID;
} else {
// not part of sub-tree: away with it!
unset($sorted_menu_items[$key]);
}
}
return $sorted_menu_items;
} else {
return $sorted_menu_items;
}
}
Run Code Online (Sandbox Code Playgroud)
接下来,在您的模板中,您只需wp_nav_menu使用start_in包含您希望子项关闭的页面ID 的附加参数进行调用:
wp_nav_menu( array(
'theme_location' => '<name of your menu>',
'start_in' => $ID_of_page,
'container' => false,
'items_wrap' => '%3$s'
) );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11132 次 |
| 最近记录: |