2016-05-30 178 views
-1

我想删除所有使用register_nav_menu或类似功能注册的导航菜单。有人可以帮我弄这个吗?这是我试过的。删除WordPress导航菜单

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

为了真正阻止任何导航出现,我使用了这种解决方案。

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 ''; 
} 
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!! 

这将删除注册菜单,这是你的要求,但这并不意味着实际上没有菜单将显示,菜单是DB项目,以便它会寻找一些在它的项目....你可以使用过滤器来闲逛取决于用来调用

“wp_get_nav_menu_object”的代码 - >如果请求的菜单中找到/主题位置菜单 “wp_get_nav_menus” - >如果没有先前的发现

例如

add_filter('wp_get_nav_menus', 'inspect', 10, 2); 

function inspect($menus,$args){ 
    var_dump($menus); 
    var_dump($args); 

    return $menus; 
} 
+0

你说的是正确的1+,但我没有注意到,用'我的主题wp_get_nav_menu_object',而不是'wp_nav_menu'所以这就是为什么它带来了一些问题。我应该用钩子。谢谢。 – JMRC