【问题标题】:Insert div into a menu item before the link and more在链接之前将 div 插入菜单项等
【发布时间】:2021-09-03 03:37:41
【问题描述】:

我已经在https://wordpress.stackexchange.com/ 上问过这个问题,但没有人回复。有类似的问题,但我认为它们是针对主题开发人员的,而不是针对那些只是使用某个主题并希望扩展其功能的人。

我使用特定主题在 Wordpress 中制作网页。现在,这个主题有一个预期的菜单标记:

<ul id=”primary-navigation-main”>
    <li>
        <a href=”https://example.com/page1”>Page 1</a>
    </li>
    <li>
        <a href=”https://example.com/page1”>Page 2</a>
    </li>
    <li>
        <a href=”https://example.com/page1”>Page 3</a>
    </li>
</ul>

在移动菜单上,愿望略有不同。在公司中,他们希望在按下菜单项时进行一些过渡。我在另一个(硬编码)菜单上解决了这样的问题:

<ul id=”primary-navigation-main”>
    <li>
        <div class=”transition-div”></div>
        <a href=”https://example.com/page1”>
            <p>Page 1</p>
        </a>
    </li>
    <li>
        <div class=”transition-div”></div>
        <a href=”https://example.com/page1”>
            <p>Page 2</p>
        </a>
    </li>
    <li>
        <div class=”transition-div”></div>
        <a href=”https://example.com/page1”>
            <p>Page 3</p>
        </a>
    </li>
</ul>

或者喜欢这个jsfiddle

我不知道这是否是这种过渡的最佳解决方案,但它确实有效。

所以,我想在&lt;a&gt; 之前将&lt;div&gt; 添加到&lt;li&gt; 中,并在&lt;a&gt; 中添加&lt;p&gt;。我在摆弄with wp_nav_menuwp_nav_menu_items,但没有成功。我需要注册&lt;ul&gt; 或其他什么吗?另外,我似乎必须使用 Walker 课程,但我不知道如何使用。

现在,因为我没有收到任何回复,所以我已经为原始主题的标记找到了 solution(没有 divp)。但问题仍然存在:如何将任意标记插入某个现有菜单(在我的情况下是所选主题的主菜单)。即进入每个菜单项 li,然后进入每个链接 a,保留菜单的 URL。

谁能帮助我或简单地告诉我这是不可能的?我已经可以使用wp_nav_menu_items 将项目插入菜单。因此我认为wp_nav_menu 提供了更详细的工作功能。

【问题讨论】:

    标签: wordpress menu menuitem wp-nav-walker


    【解决方案1】:

    在你的函数文件中添加以下代码

    class AWP_Menu_Walker extends Walker_Nav_Menu {
        function start_el(&$output, $item, $depth=0, $args=[], $id=0) {
            $output .= "<li class='" .  implode(" ", $item->classes) . "'>";
     
            $output .= '<div class="transition-div"></div>'; //Put your content here
            
            if ($item->url && $item->url != '#') {
                $output .= '<a href="' . $item->url . '">';
            } else {
                $output .= '<span>';
            }
     
            $output .= $item->title;
     
            if ($item->url && $item->url != '#') {
                $output .= '</a>';
            } else {
                $output .= '</span>';
            }
     
            if ($args->walker->has_children) {
                $output .= '<i class="caret fa fa-angle-down"></i>';
            }
        }
    }
    

    在模板(或标题)中获取菜单的位置添加助行器

    wp_nav_menu([
        ...
        ...
        'walker' => new AWP_Menu_Walker()
    ]);
    

    【讨论】:

    • 非常感谢@VickyP 的回答!我现在才看到,所以回复晚了。我更了解如何将内容插入链接。我在主题中找到了一个地方,我应该将步行者放在 wp_nav_menu() 中,但主题步行者已经存在。原始文件中 wp_nav_menu() 中的这些行:'walker' => '\Neve\Views\Nav_Walker', 'fallback_cb' => '\Neve\Views\Nav_Walker::fallback',我用你的替换了现有的 walker一个,得到一个错误。也许我应该在某个地方注册步行者。当我得到解决方案时,我会接受你的答案。
    • 现在,我明白了。它显示了一个带有我想要的标记的菜单。但是我在现有菜单旁边得到了一个新菜单。我想,我没有瞄准正确的空间。不过,我现在知道如何将标记添加到菜单项中。因此,这个问题得到了回答,我会接受这个答案。如果您能帮助我在 Neve 主题中定位正确的空间,我将不胜感激。但我也会去 Neve 论坛。再次感谢@VickiP!
    • @IgorBeuermann 你可以尝试用上面的 walker 修改 Neve 主题 walker。它放在 inc/views/nav_walker.php
    • 不错的提示,@VickyP!或者,也许因为它只是一个扩展 Walker_Nav_Menu 的类,我可以将它添加到同一个文件中。我不知道,它是如何工作的。值得一试:)
    猜你喜欢
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    相关资源
    最近更新 更多