将wp_NAV_MENU_OBJECTS()限制为仅限于第一级菜单项

时间:2018-08-23 作者:Kristián Filo

我需要改变我的菜单URL和添加“/”到每一页的开始,除了主页。使用这段代码可以很好地工作:

function change_menu($items){

    if(!is_front_page()){
        foreach($items as $item){
            $item->url = "/" .  $item->url;
        }
    }

    return $items;
}

add_filter(\'wp_nav_menu_objects\', \'change_menu\');
但是,我还需要将其限制为仅第一级项目(子菜单中的所有项目应保持不变)。我知道有“深度”的论点,但我不知道如何使用它。

UPDATE: 我的目的是从经典链接中筛选锚链接。我有一个微型网站,它使用菜单项作为锚链接。其中一个有一个子菜单,其中包含指向自定义子页面的链接。在每个子页面的所有菜单链接的开头添加斜线,将锚指向主页(效果很好),但这会弄乱经典链接。

我设法写了一个变通方法:

// if the URL is an anchor, add a slash   
if (strpos($item->url, \'#!/\') !== false) {
    $item->url = "/" .  $item->url;
}
然而,如果能以更优雅的方式完成,我想听听一些想法。

1 个回复
SO网友:nmr

depth 参数,在附加到的函数中可用wp_nav_menu_objects 挂钩,是指渲染菜单的最大深度(在站点上可以看到多少菜单级别)。

若要仅更改第一级元素,可以在循环中检查菜单项是否有父项。

function change_menu($items) {

    if( !is_front_page() ) {
        foreach($items as $item) {
            if ( $item->menu_item_parent != 0 )
                continue;
            $item->url = "/" .  $item->url;
        }
    }
    return $items;
}

add_filter(\'wp_nav_menu_objects\', \'change_menu\');

结束

相关推荐

用标准的干净文件替换NAV-menus.php文件?

我是一个自学成才的wordpress网站设计师,请原谅我的无知。我为一个客户开发的几个网站最近被一个印尼黑客组织破坏了(很有趣!)。客户端没有更新wordpress安装和其他一些危及安全的事情。遗憾的是,没有网站的清理备份。网络主机给了我一个包含恶意软件扫描结果的文本文件。看起来很多受影响的文件都是导航菜单。网站的php文件。文本文件中显示的扫描结果示例如下:“[主目录]/[网站文件夹名称]/wp includes/nav-menu.php:SL-php-INJECTOR-1-ejw.UNOFFICIAL