钥匙menu
对于参数$args
定义为:
(int | string | WP\\u Term)所需菜单。接受(按顺序匹配)id、slug、名称、菜单对象。
现在,如果你深入研究implementation of wp_nav_menu()
function, 您将看到,无论您提供什么价值,无论它是否是int
id,astring
名称,astring
slug或object
WP_Term
, 它将始终检索WP_Term
object
在创建菜单之前,为相应的菜单id命名。
例如:如果您有一个id为的菜单3
, 名称My Menu
和slugmy-menu
; 您可以使用以下任意代码添加该菜单:
// with id: 3
wp_nav_menu( array(
\'menu\' => 3
) );
// with name: My Menu
wp_nav_menu( array(
\'menu\' => "My Menu"
) );
// with slug: my-menu
wp_nav_menu( array(
\'menu\' => "my-menu"
) );
即使您不提供
menu
参数,它将尝试获取
WP_Term
对象来自其他参数,如
theme_location
.
例如:说出菜单位置top
已使用注册register_nav_menus()
在主题中的功能functions.php
&文件;名为的菜单My Menu
被任命为top
位置位于WP管理面板中。在这种情况下,您可以使用以下方法获得相同的菜单:
wp_nav_menu( array(
\'theme_location\' => \'top\'
) );
在上述每种情况下,
wp_nav_menu()
函数检索
WP_Term
对象,然后生成菜单。它使用wp_get_nav_menu_object()
函数来执行此操作。实施
因此而不是theme_location
参数,或menu
参数为int
id或string
name|slug,您可以直接提供相应的WP\\u Term对象。单向获取WP_Term
对象是通过使用WP_Term::get_instance()
方法:
// get the WP_Term object using menu id 3
$menu_obj = WP_Term::get_instance( 3, \'nav_menu\' );
您还可以获得WP_Term
使用菜单名称的对象get_term_by()
功能: // by menu slug
$menu_obj = get_term_by( \'slug\', \'my-menu\', \'nav_menu\' );
// or, by menu name
$menu_obj = get_term_by( \'name\', \'My Menu\', \'nav_menu\' );
现在你有了WP_Term
对象$menu_obj
, 您可以使用它生成菜单: wp_nav_menu( array(
\'menu\' => $menu_obj
) );
用例:因此您知道如何使用WP_Term
对象作为wp_nav_menu()
作用现在的问题是:你为什么要使用它除了以下事实it\'s just another option, 您可能想使用它,因为它可能是一个稍微快一点的选项。例如,如果要两次使用同一菜单,一次在页眉中(&A);然后在页脚中,在这种情况下,您可以创建WP_Term
标题菜单模板中的对象:
global $menu_obj;
$menu_obj = WP_Term::get_instance( 3, \'nav_menu\' );
wp_nav_menu( array(
\'menu\' => $menu_obj,
\'menu_id\' => \'header_menu\'
) );
然后简单地使用$menu_obj
在页脚模板中: // global declaration is needed to access the global variable from another template
global $menu_obj;
wp_nav_menu( array(
\'menu\' => $menu_obj,
\'menu_id\' => \'footer_menu\'
) );
如果您调查wp_nav_menu()
函数,您将看到,通过这样做,您将避免WordPress core中的一些额外函数调用,因此总体执行速度将略快。但是,请记住使用theme_location
参数或其他选项可能更方便&;更好的维护。因此,您是否应该使用它完全取决于您自己的特定场景。我刚才解释说,您可以&;怎么了,没什么了。