更改/过滤导航菜单链接的文本

时间:2014-07-07 17:26:38

标签: php wordpress attributes navigation

我拥有的:

我在标准的WordPress导航菜单中有一个登录/注销链接。到目前为止,我已经有条件地将URL过滤到必要的登录或注销URL。

我需要什么:

我还需要在导航菜单中有条件地更改链接(菜单项)的文本值。

我的代码:

add_filter( 'nav_menu_link_attributes', 'menu_override_b', 10, 3 );

function menu_override_b( $atts, $item, $args ) {

    if ( is_user_logged_in() ) {

        $url = wp_logout_url();
        $newlink = str_replace("http://--loginout--", $url, $atts[href]);
        $atts[href] = $newlink; 

        //None of the following work...

        /*
        $title ="Logout";
        $atts[title] = $title;  
        $atts[post_excerpt] = $title;
        $atts[description] = $title;
        $atts[attr_title] = $title;
        $atts[post_title] = $title;
        $atts[post_content] = $title;
        */

    }
    else{

        $url = "/somewhere/else";
        $newlink = str_replace("http://--loginout--", $url, $atts[href]);
        $atts[href] = $newlink; 

        //None of the following work...

        /*
        $title ="Login";
        $atts[title] = $title;  
        $atts[post_excerpt] = $title;
        $atts[description] = $title;
        $atts[attr_title] = $title;
        $atts[post_title] = $title;
        $atts[post_content] = $title;
        */

    }   


    return $atts;

}

List of WordPress menu item attributes

2 个答案:

答案 0 :(得分:2)

我知道这是一个古老的帖子,但万一有人在寻找......

您需要在代码中将$atts[href]替换为$atts['href']

答案 1 :(得分:1)

我从这里使用这个非常好的插件

https://wordpress.org/plugins/menu-items-visibility-control/

这允许您设置回调以有条件地隐藏菜单项,我会做的是在登录时有一个菜单项,在登出时有另一个菜单项,只需交换它们。

我必须查找回调所需的确切代码,但它应该放在主题函数文件中,然后根据插件说明在导航项上运行该函数。

这是您目前正在做的一种不同的方法,但保持导航项独立且功能齐全(不依赖于内容的外部代码,仅依赖于其可见性)可能会更加清晰。

将其扩展到其他链接也非常容易,

希望它有所帮助。

- 更新查看它,它可能已经内置了您需要的功能。我将它用于来自第三方应用程序等的产品订阅..但同样的想法真的。