钥匙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 参数或其他选项可能更方便&;更好的维护。因此,您是否应该使用它完全取决于您自己的特定场景。我刚才解释说,您可以&;怎么了,没什么了。