我想删除所有使用register_nav_menu
或类似功能注册的导航菜单。有人可以帮我弄这个吗?这就是我尝试过的。
public static function _modify_template(){
global $_wp_registered_nav_menus;
$_wp_registered_nav_menus = array();
}
add_action('wp', array(__CLASS__, '_modify_template'));
wp_delete_nav_menu
也不起作用,但我非常确定这是wp_create_nav_menu
,而不是register_nav_menu
。
谢谢!
答案 0 :(得分:1)
function unhook_menus(){
$menus = get_registered_nav_menus();
foreach($menus as $name=>$desc){
unregister_nav_menu( $name );
}
$menus= get_registered_nav_menus();
var_dump($menus);
if(!$menus)
echo 'empty';
exit;
}
add_action('init', 'unhook_menus', 100); // if not working double check when menus are actually registered!!
这将删除您提出的注册菜单,但这实际上并不意味着不会显示菜单,菜单是一个数据库项目,因此它会查找包含项目的内容....您可以使用过滤器取决于用于调用的代码
' wp_get_nav_menu_object' - >如果找到请求的菜单/主题位置菜单 ' wp_get_nav_menus' - >如果以上都没有找到
e.g。
add_filter('wp_get_nav_menus', 'inspect', 10, 2);
function inspect($menus,$args){
var_dump($menus);
var_dump($args);
return $menus;
}
答案 1 :(得分:0)
为了真正阻止任何导航显示,我使用了这个解决方案。
if( $no_nav ){
// Avoid `wp_nav_menu` outputting data before any database calls are made.
add_filter('pre_wp_nav_menu', '_disable_navigation_menu');
// Avoid `wp_get_nav_menu_object`, which is deeper to the core, from returning any data.
// The filter above should be used with this one as you don't want WordPress to create a default navigation menu.
add_filter('wp_get_nav_menu_object', '_disable_navigation_menu');
}
function _disable_navigation_menu($output)
{
return '';
}