Remove a menu item in menu

时间:2013-02-14 作者:Chetana Kestikar

我知道这已经被问过很多次了。但从我搜索后得到的信息来看,我不能理解太多。我用过wp_update_nav_menu_item 以编程方式添加菜单项。但我不知道如何删除特定的菜单项。在其中一个论坛中,它被告知要取消设置数组元素(forum). 但我不明白。有人能解释一下怎么做吗?

3 个回复
最合适的回答,由SO网友:Ahmad M 整理而成

我认为从菜单中删除菜单项的最好方法是wp_nav_menu_objects 过滤器(@Otto answer from the thread you提及)。您使用的方法是首先检查要筛选的菜单是否正确,然后搜索菜单项并通过从$sorted_menu_objects 大堆

以下示例将删除Uncategorized 上的菜单中的菜单项secondary-menu 主题位置:

add_filter(\'wp_nav_menu_objects\', \'ad_filter_menu\', 10, 2);

function ad_filter_menu($sorted_menu_objects, $args) {

    // check for the right menu to remove the menu item from
    // here we check for theme location of \'secondary-menu\'
    // alternatively you can check for menu name ($args->menu == \'menu_name\')
    if ($args->theme_location != \'secondary-menu\')  
        return $sorted_menu_objects;

    // remove the menu item that has a title of \'Uncategorized\'
    foreach ($sorted_menu_objects as $key => $menu_object) {

        // can also check for $menu_object->url for example
        // see all properties to test against:
        // print_r($menu_object); die();
        if ($menu_object->title == \'Uncategorized\') {
            unset($sorted_menu_objects[$key]);
            break;
        }
    }

    return $sorted_menu_objects;
}

SO网友:Larzan

IT IS ACTUALLY WAAAY EASIER

<人力资源>

Simple solution :

在使用wp_update_nav_menu_item 函数(见下文)我只是浏览了代码,看看如果管理员点击菜单项的“删除”链接,WP会做什么。

事实证明它只是调用wp_delete_post 对于特定的菜单项,就是这样。没有别的,没有花哨。因此,如果要删除菜单项,只需获取其db\\u id并调用该函数

wp_delete_post($menu_item_db_id);
nbsp;

为清楚起见,我将以前的解决方案留在这里,以向您保证,没有任何复杂的东西是真正必要的:

 ;

DO NOT USE ONE OF THE FOLLOWING, NOW OBSOLETE, USE THE SIMPLE ONE FROM ABOVE

<人力资源>

Version 1:

正在添加(publishing) 菜单项很容易删除(unpublishing) 也可以使用相同的功能完成。

我假设您使用了几乎没有文档记录的wp\\u update\\u nav\\u menu item函数(请参阅带有示例的帖子链接)以编程方式添加菜单项,并知道如何调用它,因此要删除它,您可以使用对象id和状态unpublish调用相同的函数

function removeMenuEntry($menu_id, $object_id, $menu_item_db_id) {
    $itemData = array(
        \'menu-item-object-id\' =>  $object_id,
        \'menu-item-status\' => \'unpublish\'
    );
    return wp_update_nav_menu_item( $menu_id, $menu_item_db_id, $itemData );
}
$menu_id 是条目所在菜单的id,以及$object_id 菜单条目唯一的WP id,您知道如何获取,正如您所说,您已经手动添加了一个条目,如果没有,请参阅我为WP\\u update\\u nav\\u menu\\u item函数提供的链接以查看示例。

上面的代码将取消发布该条目,这似乎正是您通过管理面板删除菜单条目时发生的情况。

Version 2:

之前我没有使用$menu_item_db_id 只需将该值设置为零,对于\'menu-item-type\' => \'taxonomy\', 但对于类型为的菜单项,相同的功能不起作用\'menu-item-type\' => \'post_type\'.在查看了一点WP源之后,似乎它在没有$menu_item_db_id 设置更像是一种疏忽,正确的做法是使用它,因为零值将创建一个新的菜单项(在后一种情况下是这样的,显然没有标题或任何东西)。

上面的代码示例已经更新,现在对于分类法和post\\u类型菜单项应该可以正常工作。

SO网友:Woody Hayday

这里有一些有用的答案,对于那些只想“从任何菜单中删除特定页面ID”的人来说,我提供了一个简单的功能:

/**
 * Removes a page from front-end menus by ID
 *
 * @param int id        WordPress Page ID
 *
 * @return int count of removed
 */
function zeroBSCRM_wp_removePageFromMenus($pageID=-1){

    // only if a valid $pageID
    if ($pageID > 0){

        // get menu locations
        $locations = get_nav_menu_locations();

        // cycle through (any) and get menu in slot
        if (is_array($locations)) foreach ($locations as $location => $menuID){

            // Retrieve Menu & Pages in menu
            $menu = wp_get_nav_menu_object($menuID);            
            $pagesItem = wp_get_nav_menu_items($menu, array("object"=>"page"));

            // Cycle through pages & remove target menu page link if present
            if (is_array($pagesItem)) 
              foreach ($pagesItem as $page)
                if ($page->object_id == $pageID) wp_delete_post($page->db_id);

        }

    }

    return 0;

}

结束

相关推荐

Wordpress Custom Menus Issue

在我的模板中,我使用这样的调用来输出一些自定义菜单:<?php wp_nav_menu(array(\'container_class\' => \'secondary-navigation\', \'theme_location\' => \'secondary\')); ?> 自从升级到WordPress 3.1.4后,我就可以获得完整的页面列表,而不是自定义菜单我看到修复程序(通过谷歌)说我应该添加以下内容来修复此问题:\'fallback_cb\' => f