该过滤器前面的几行是这一行:
$sorted_menu_items = apply_filters( \'wp_nav_menu_objects\', $sorted_menu_items, $args );
该过滤器在之前传递顶级菜单项对象
walk_nav_menu_tree()
被调用。
以下是一些测试代码:
add_filter( \'wp_nav_menu_objects\', \'my_nav_menu_objects\', 10, 2 );
function my_nav_menu_objects( $sorted_menu_items, $args ) {
wp_die( \'<pre>\' . var_export( $sorted_menu_items, true ) . \'</pre>\' );
}
它在一个三项菜单上进行了测试。两个顶级项目和一个子菜单。
测试页面上只有一个菜单。您可能需要测试中的值$args
在页面上找到正确的菜单。
正如所料,$sorted_menu_items
返回了3个菜单项对象。顶级菜单对象具有\'menu_item_parent\'
属性设置为0。
\'menu_item_parent\' => \'0\',
您可以使用它来查找顶级菜单项的数量。
add_filter( \'wp_nav_menu_objects\', \'my_nav_menu_objects\', 10, 2 );
function my_nav_menu_objects( $sorted_menu_items, $args ) {
$top_level_menu_item_ids = array();
foreach ( $sorted_menu_items as $sorted_menu_item ) {
if ( 0 == $sorted_menu_item->menu_item_parent )
$top_level_menu_item_ids[] = $sorted_menu_item->ID;
}
wp_die( \'<pre>\' . var_export( count( $top_level_menu_item_ids ), true ) . \'</pre>\' );
}
该代码应断开页面并显示顶级菜单项的数量。
我没有编写限制项目数量所需的代码,但请记住,如果删除(取消设置)菜单项父项,还必须删除其所有子项。
下面是另一个测试:
function my_nav_menu_objects( $sorted_menu_items, $args ) {
// Remove a menu item parent, but leave it\'s child menu item in place.
unset( $sorted_menu_items[2] );
return $sorted_menu_items;
}
结果是子菜单看起来像页面上的顶级菜单。