使用过滤器更改导航菜单页面链接的HREF

时间:2016-08-13 作者:Aristoatle

我正在试图找到一种方法,将导航菜单页面链接的href从父主题的默认设置(转到其相对页面)更改为另一个url。例如,我有一个菜单链接“我们的哲学”,链接到“我们的哲学”页面,但我希望它能转到timecube。com(rip)。

它似乎可能使用了过滤器(nav\\u menu\\u link\\u attributes?)可能是实现这一目标的简单方法。然而,我一直无法用过滤器来解决这个问题。

我想我需要这样的东西:

function change_nav_url( $atts, $item ) {
    // modify $item href?
}
add_filter ( \'nav_menu_link_attributes\', \'change_nav_url\');
我最初的想法是我需要调用这个函数apply_filters() 也许,需要$atts$item 从某处手动将其传递给它。但这就产生了一个问题——如何获取它们,以及从什么(菜单对象?)获取它们。想想看,如果我必须手动检索它们,我真的看不到使用过滤器v.普通函数的意义,所以可能我必须将其放入插件文件夹中,它会自动让我访问$atts 还是什么?(这不起作用)。不管怎样,我显然不明白什么。

我很感激有人帮我澄清我的无知。

2 个回复
SO网友:Rarst

你在正确的轨道上,没有什么小问题。

您需要修改$atts 并将其退回。第一个参数之后的任何参数都仅供参考,不应更改add_filter() 你期望不止一个论点带有一些调试代码的示例大致如下:

add_filter( \'nav_menu_link_attributes\', function ( $atts, $item, $args, $depth ) {

    var_dump( $atts, $item ); // a lot of stuff we can use

    var_dump( $atts[\'href\'] ); // string(36) "http://dev.rarst.net/our-philosophy/"

    var_dump( get_the_title( $item->object_id ) ); // string(14) "Our Philosophy", note $item itself is NOT a page

    if ( get_the_title( $item->object_id ) === \'Our Philosophy\' ) { // for example

        $atts[\'href\'] = \'https://example.com/\';
    }

    return $atts;
}, 10, 4 ); // 4 so we get all arguments

SO网友:dbmpls

这将允许您更新特定菜单项的URL。在OP中,“链接标题”将替换为“我们的哲学”。

这将被放置在子主题的函数中。php

 function update_menu_link($items){

    //look through the menu for items with Label "Link Title"
        foreach($items as $item){

            if($item->title === "Link Title"){ // this is the link label your searching for
                $item->url = "http://newlink.com"; //this is the new link
            }
        }
        return $items;
    }

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

相关推荐

PAGINATE_LINKS不会在分类过滤的自定义帖子类型归档上创建正确的链接

经过几个小时的测试和混乱。。。我面对墙,厌倦了搜索(主要是因为我的谷歌答案已经全部点击了!)I\'m trying to display paginate_link with a filters taxonomy form (AGAIN ????? ;).通过这里的所有解决方案,我发现了如何在表单的结果中获得正确编号的分页first page 的结果。主要问题,是在分页链接中,他们使用了错误的$第paged页;和我的筛选器从查询中删除(通过tax\\u query=>;…)第/2页,以及下面的其他内容