【问题标题】:How to add class to last <li> in Wordpress navigation bar?如何在 Wordpress 导航栏中将类添加到最后一个 <li>?
【发布时间】:2021-10-27 18:08:43
【问题描述】:

所以我在wordpress中使用了一个自定义的navwalker,如下图:

function start_el(&$output, $item, $depth = 0, $args = null, $id = 0)
    {
        $title = $item->title;
        $permalink = $item->url;

        $output .= "<li>";
        $output .= "<a href='$permalink'>$title</a>";
        }
    }

我只需要将类 .button 添加到列表中的最后一个 &lt;li&gt; 即可。像这样的:

if (not the last class) {
    $output .= "<li>";
    $output .= "<a href='$permalink'>$title</a>";
} else {
    $output .= "<li class = 'button'>";
    $output .= "<a href='$permalink'>$title</a>";
}

谁有一个简单的方法来完成这个?我不能只在 wp admin 中添加该类,因为自定义 navwalker 会覆盖它,而且当我确定有一些非常优雅的方法可以解决这个问题时,我真的不想使用一些 hacky 解决方案。 提前致谢!

【问题讨论】:

    标签: php wordpress wp-nav-walker


    【解决方案1】:

    在我回答您最初的问题之前,您的示例函数中缺少一些有用的东西。 $item 变量有一个名为 classes 的属性,其中包含元素的类数组。这应该包括用户在 admin 中放入菜单构建器的任何类(它解决了您提到的问题之一,但不是原始问题)。

    首先,我们需要添加类似这样的内容

    function start_el(&$output, $item, $depth = 0, $args = null, $id = 0)
        {
            $title = $item->title;
            $permalink = $item->url;
            $classes = implode(" ", $item->classes);
    
            $output .= “<li classes=‘$classes’>”;
            $output .= "<a href='$permalink'>$title</a>";
            }
        }
    

    现在您已经添加了缺失的类,您可以以编程方式向元素添加一个类,而不是让用户在管理员中使用过滤器来执行此操作。这可能会在您的 functions.php 文件中的某个位置。

    function custom_nav_classes ($items) {
        $items[count($items) - 1]->classes[] = 'last';
        return $items;
    }
    add_filter('wp_nav_menu_objects', 'wpb_first_and_last_menu_class');
    

    为了解释,我们添加了一个 WP 过滤器,它将在导航菜单准备渲染时调用。使用的过滤器适用于所有菜单对象,因此我们将收到的参数是所有菜单项的数组。 我们使用count 来获取数组的长度,然后减去一个,因为数组从 0 开始。这就是我们找到最后一项的方法。 然后我们使用classes[](附加到数组的PHP简写)将一个新类附加到classes属性。

    旁注您可能已经这样做了,但是在这种情况下问问自己是否需要这个类或者是否可以使用 CSS/JavaScript 选择器来完成您需要的事情是很有用的。我不知道你的用例,但只是一些值得深思的东西。例如ul.menu &gt; li:last-child 或类似的东西可能很有用。 从技术上讲,这不是答案的一部分,只是值得一提。

    【讨论】:

      猜你喜欢
      • 2019-08-21
      • 2016-04-04
      • 2017-02-06
      • 1970-01-01
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多