删除WordPress导航菜单

时间:2016-05-30 21:03:19

标签: wordpress templates

我想删除所有使用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

谢谢!

2 个答案:

答案 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 '';
}