【问题标题】:How can I insert a dynamic menu item in a specific place?如何在特定位置插入动态菜单项?
【发布时间】:2018-07-17 21:48:34
【问题描述】:

我可以使用这个将一个新的菜单项放在根级菜单项的末尾:

function bv_show_book_online_menu_item($items, $args) {
    if(bv_can_book_online()) {
        if($args->theme_location == 'main-menu') {
            $items .= '<li><a href="/book/">Book Online</a></li>';
        }
    }
    return $items;
}
add_filter('wp_nav_menu_items','bv_show_book_online_menu_item', 10, 2);

但我如何才能将项目实际插入到我想要的任何位置?我实际上想将它放在子菜单的中间,如下所示:

Menu Item
    Submenu Item
    Submenu Item
    <-- Insert new submenu item -->
    Submenu Item
    Submenu Item
Menu Item
    Submenu Item
    Submenu Item
    Submenu Item
etc

【问题讨论】:

    标签: php wordpress wp-nav-menu-item


    【解决方案1】:

    快速而肮脏的解决方案:

    安装menu items visibility control plugin;这允许您通过菜单页面有条件地显示菜单和子菜单项。

    将您自己的“my_function”函数添加到functions.php 或您自己的站点功能插件中。显示子菜单时插件应返回 TRUE。

    在 WP Dashboard 菜单页面上,选择可选子菜单并将此条件 function_exists("my_function") &amp;&amp; my_function() 添加到其可见性字段。简单来说:如果my_function找不到就不要摔倒,只有在my_function返回TRUE时才显示这个子菜单。

    我假设这个插件必须评估可见性字段中的条件。从理论上讲,这是一个轻微的安全风险。但是,当我(几个月前)检查插件的许多支持和评论时,我找不到任何提出这个问题的问题。

    如果您对此感到担忧;然后或者您可以从插件源中找到您需要的代码

    【讨论】:

    • 感谢您,我正在研究一种无需插件的方法,并将其作为主题功能的核心,如果可行,我将更新此问题
    • 如果您想出一个代码解决方案,那么我自己和其他人都会感兴趣,因此将其添加为答案并将其标记为正确答案。我感觉你必须使用 Walker 课程——这对我来说非常麻烦(不同的菜单项和子链接取决于访问者所在的国家/地区),因此我使用了插件。我没有检查过,但上面插件中的代码可能会给你一些如何实现的线索。
    • 其实不需要助行器。与动作挂钩的想法相同,但使用 wp_get_nav_menu_items 来循环它们,然后我只需在第 n 个菜单项之后插入链接或函数。非常简单。
    猜你喜欢
    • 2021-08-25
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    相关资源
    最近更新 更多