如何在函数中定位特定的 wordpress 菜单(wp_nav_menu)?

Posted

技术标签:

【中文标题】如何在函数中定位特定的 wordpress 菜单(wp_nav_menu)?【英文标题】:How to target specific wordpress menus (wp_nav_menu) in a function? 【发布时间】:2019-10-29 04:13:18 【问题描述】:

我想创建一个函数,它可以用图标自动替换一个特定菜单中的菜单项。到目前为止有效。 但我只希望该功能针对一个特定的菜单,而不是页脚菜单。

我发现了一个类似的帖子 (How to target specific wp_nav_menu in function?)。但我必须说我对 php 和 wordpress 主题开发还太陌生,所以我无法将其他帖子解决方案转移到我的代码中。

// Register Navigation
add_action('after_setup_theme', 'cwb_register_nav');

function cwb_register_nav() 
    register_nav_menus(array(
        'header_nav_main' => 'Header Main Navigation Menu',
        'header_nav_social' => 'Header Social Menu',
        // 'posts_categories_menu' => 'Posts Categories Menu',
        'footer_sitemap_menu' => 'Footer Sitemap Menu',
        'footer_legal_menu' => 'Footer Legal Menu',
        'footer_social_menu' => 'Footer Social Menu'
    ));


// Replacing Text with Icons in the Navigation, for example Facebook & Twitter

add_filter('wp_nav_menu', 'my_page_menu_link_names');

function my_page_menu_link_names($menu) 
    $menu = str_replace('Facebook', '<i class="icon facebook"></i>', $menu);
    $menu = str_replace('Twitter', '<i class="icon twitter"></i>', $menu);
    $menu = str_replace('Instagram', '<i class="icon instagram"></i>', $menu);
    $menu = str_replace('LinkedIn', '<i class="icon linkedin"></i>', $menu);
    $menu = str_replace('Google Plus', '<i class="icon googleplus"></i>', $menu);
    $menu = str_replace('Pinterest', '<i class="icon pinterest"></i>', $menu);
    $menu = str_replace('RSS', '<i class="icon rss"></i>', $menu);
    $menu = str_replace('Whatsapp', '<i class="icon whatsapp"></i>', $menu);
    return $menu;

再次,我希望 'my_page_menu_link_names' 功能仅影响 'header_nav_social' 菜单,而不影响 'footer_social_menu' 例如,就像它到目前为止所做的那样。

【问题讨论】:

【参考方案1】:

我自己找到了解决方案。我不知道为什么我之前对“theme_location”的尝试没有奏效。

// Replacing Text with Icons in the Navigation, for example Facebook & Twitter
    add_filter( 'wp_nav_menu_items', 'my_page_menu_link_names', 10, 2 );
    function my_page_menu_link_names( $menu, $args ) 
        if ($args->theme_location == 'header_nav_social') 
            $menu = str_replace( 'Facebook', '<i class="icon facebook"></i>', $menu );
            $menu = str_replace('Twitter', '<i class="icon twitter"></i>', $menu );
            $menu = str_replace('Instagram', '<i class="icon instagram"></i>', $menu );
            $menu = str_replace('LinkedIn', '<i class="icon linkedin"></i>', $menu );
            $menu = str_replace('Google Plus', '<i class="icon googleplus"></i>', $menu );
            $menu = str_replace('Pinterest', '<i class="icon pinterest"></i>', $menu );
            $menu = str_replace('RSS', '<i class="icon rss"></i>', $menu );
            $menu = str_replace('Whatsapp', '<i class="icon whatsapp"></i>', $menu );
            return $menu;
        
        return $menu;
    

【讨论】:

也许在您之前的尝试中,您忘记在add_filter( 'wp_nav_menu_items', 'my_page_menu_link_names', 10, 2 ); 中添加第四个参数“2”,这是用于多个参数的。没有那个你的函数将不会接受第二个参数$args

以上是关于如何在函数中定位特定的 wordpress 菜单(wp_nav_menu)?的主要内容,如果未能解决你的问题,请参考以下文章

子菜单不在WordPress下拉菜单中复制样式

wordpress:如何检查 slug 是不是包含特定单词?

PHP 在wordpress电子商务中定位特定页面

Wordpress 如何根据每个页面上的用户角色应用特定的 CSS 属性

Wordpress 3.5 - 如何仅使用 wp_nav_menu 显示父级的子菜单?

如何在 wordpress 仪表板的导航菜单中添加项目?