如何禁用父菜单项链接?

时间:2013-01-18 作者:JohnK

我不想让网站导航菜单的父菜单项链接到单独的页面。首先,我不想有多余的一页。另一方面,这些链接阻碍了无法“悬停”在链接上(显示子项)的移动用户的站点导航。

最好的解决方案是禁用父菜单项链接。但是我该怎么做呢,尤其是现在WordPress 3.5的禁用父菜单项插件已经停止工作了?

一种可能的解决方案是here.

5 个回复
SO网友:fuxia

不要创建假URL(#). 这对使用屏幕阅读器的用户来说是非常糟糕的:他们正在使用可用链接列表来浏览您的网站。这同样适用于javascript: 无论如何,链接并不是很优雅的标记。

您需要两个步骤:

在助行器启动前,用儿童标记物品我将使用空<a> 元素,以便轻松获取光标。在样式表中可能需要这样的内容:

.menu > .has-children {
    cursor: pointer;
}
标记父项的筛选器来自this answer. 第二个函数只检查该属性,并测试该项本身是否不是子项。

add_filter( \'wp_nav_menu_objects\',      \'t5_add_has_children_to_nav_items\' );
add_filter( \'walker_nav_menu_start_el\', \'t5_unlink_parent_item\', 10, 4 );

/**
 * Add aproperty \'has_children\' to menu items
 *
 * @wp-hook wp_nav_menu_objects
 * @param   array $items
 * @return  array
 */
function t5_add_has_children_to_nav_items( $items )
{
    $parents = wp_list_pluck( $items, \'menu_item_parent\' );
    $out     = array ();

    foreach ( $items as $item )
    {
        in_array( $item->ID, $parents ) && $item->has_children = TRUE;
        $out[] = $item;
    }
    return $items;
}
/**
 * Replace top parent element markup.
 *
 * @wp-hook walker_nav_menu_start_el
 * @param   string $item_output
 * @param   object $item
 * @param   int    $depth
 * @param   object $args
 * @return  string
 */
function t5_unlink_parent_item( $item_output, $item, $depth, $args )
{
    // not first level parent item
    if ( empty ( $item->has_children ) or 0 != $item->menu_item_parent )
        return $item_output;

    $title = apply_filters(
        \'the_title\',
        $item->title,
        $item->ID
    );
    $id = apply_filters(
        \'nav_menu_item_id\',
        \'menu-item-\'. $item->ID,
        $item, $args
    );
    $id = $id ? \' id="\' . esc_attr( $id ) . \'"\' : \'\';

    $classes = empty( $item->classes ) ? array() : (array) $item->classes;
    $classes[] = \'menu-item-\' . $item->ID;
    $classes[] = \'has-children\';
    $class_names = join(
        \' \',
        apply_filters(
            \'nav_menu_css_class\',
            array_filter( $classes ),
            $item,
            $args
        )
    );
    $class_names = $class_names
        ? \' class="\' . esc_attr( $class_names ) . \'"\'
        : \'\';

    return "<li$id>$args->before<a class=\'menu-item has-children\'>$title</a>$args->after";
}

SO网友:JCL1178

每当需要父项时,我只需使用javascript:void(0)作为href创建自定义菜单项。

SO网友:Christian Lescuyer

与WordPress 3.5配合使用:

添加一个带有所需名称和URL的链接条目编辑刚刚创建的菜单条目并删除#您必须同时执行这两个步骤,因为无法添加URL为空的菜单条目。

SO网友:Nicole

有点晚了,但供将来使用。您可以为父级创建自定义链接。添加时,必须添加#,但添加后,可以删除它,从而禁用链接。

SO网友:Michael

要消除活动的“悬停”光标,请执行以下操作:

主题选项>下拉菜单>使父菜单项可单击:禁用

结束

相关推荐

Remove menus and submenus

所以我找到了一些方便的代码片段来帮助删除管理菜单项。但是,我对子菜单项有问题。我想保留外观菜单,但去掉主题、小部件和编辑器。function remove_menus() { global $menu; global $current_user; get_currentuserinfo(); if($current_user->user_login == \'username\') { $restricted = array(__(\'