2016-05-30 176 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