如何在<li>WordPress导航栏中将类添加到最后?



所以我在wordpress中使用自定义导航器,如下所示:

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添加到列表中的最后一个<li>。像这样:

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管理员中添加类,因为自定义navwalker覆盖了它,我真的不想使用一些黑客的解决方案,当我确信有一些非常优雅的东西来解决这个问题。提前感谢!

在我回答你原来的问题之前,你的示例函数中缺少一些东西,这将有所帮助。$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>";
}
}

现在您已经添加了缺失的类,您可以通过编程方式将类添加到元素中,而不是让用户使用过滤器在admin中执行此操作。这可能会出现在你的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来获得数组的长度,然后减去1,因为数组从0开始。我们就是这样找到最后一件东西的。然后,我们使用classes[](PHP中追加到数组的简写)向classes属性追加了一个新的类。

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

最新更新