我正在试图找到一种方法,将导航菜单页面链接的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
还是什么?(这不起作用)。不管怎样,我显然不明白什么。
我很感激有人帮我澄清我的无知。
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);