2024 年 11 月 21 日 我的频道
自定义 ACF WordPress 页脚菜单输出
  • 2024
  • Sunny

在主题开发的过程中,由于兼顾自定义字段与菜单同步输出,导致页脚的菜单因为 html 过滤不严而导致重复的 html 出现,该功能针对在菜单设置时的“ 添加自定义链接”,检查代码后重写:

class Custom_Walker_Nav_Menu extends Walker_Nav_Menu {
    // 开始菜单项的输出
    function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) {
        // 获取菜单项的标题和链接
        $title = apply_filters('the_title', $item->title, $item->ID);
        $url = $item->url;

        // 获取自定义字段 'footer_menu_en' 的值
        $footer_menu_en = get_post_meta($item->ID, 'footer_menu_en', true);

        // 生成菜单项的 HTML 结构
        $output .= '<li class="menu-item-' . esc_attr($item->ID) . '">';
        $output .= '<a href="' . esc_url($url) . '">' . $title; // 不要使用 esc_html,直接输出原始值

        // 如果 'footer_menu_en' 字段存在,添加到菜单项的底部
        if ($footer_menu_en) {
            $output .= '<span>' . esc_html($footer_menu_en) . '</span>';
        }

        $output .= '</a></li>';
    }
}

前端代码引用:

wp_nav_menu(array(
    'theme_location' => 'secondary', // 确保在后台注册了这个菜单位置
    'container'      => 'nav',
    'container_class' => 'footer-menu-container', // 设置容器的 CSS 类
    'fallback_cb' => false, // 如果没有设置菜单,取消回调函数
    'walker' => new Custom_Walker_Nav_Menu() // 使用自定义 Walker 类
));

这段代码定义了一个名为 Custom_Walker_Nav_Menu 的类,它继承自 WordPress 的 Walker_Nav_Menu 类,目的是自定义菜单项的输出。下面是这段代码的详细原理和功能:

原理

1、类的定义:
Custom_Walker_Nav_Menu 类扩展了 WordPress 提供的 Walker_Nav_Menu 类。这允许开发者重写生成菜单项 HTML 的方式。

2、方法重写:
start_el 方法是 Walker_Nav_Menu 类中的一个方法,负责开始输出每个菜单项的 HTML 结构。通过重写这个方法,可以自定义菜单项的输出。

功能
获取菜单项的基本信息

1、使用 apply_filters(‘the_title’, $item->title, $item->ID) 获取菜单项的标题,并应用任何注册的过滤器,以便可以自定义标题的输出。
通过 $item->url 获取菜单项的链接。
获取自定义字段的值:

2、使用 get_post_meta($item->ID, ‘footer_menu_en’, true) 从菜单项的元数据中获取名为 footer_menu_en 的自定义字段值。这可以用来存储与菜单项相关的额外信息。
生成菜单项的 HTML:

output 变量开始构建一个列表项,其中包含菜单项的 ID。生成一个链接 <a>,链接到菜单项的 URL,并显示菜单项的标题。如果 footer_menu_en 字段存在,则将其值作为一个 元素添加到链接的底部,以便在菜单项中显示。</a> 输出结构:

<li class="menu-item-<item_id>">
    <a href="<item_url>"><item_title><span><footer_menu_en_value></span></a>
</li>

总结

通过重写 start_el 方法,Custom_Walker_Nav_Menu 类允许开发者自定义 WordPress 菜单的输出格式,特别是能够根据自定义字段动态地添加额外的信息(如 footer_menu_en 字段)。这使得菜单的展示更加灵活和可定制。

WORDPRESS
58
0

Author Box

名字:Sunny
注册:Jan 30, 2021
简介:技术菜鸟,拷贝、黏贴代码中 ……

Comment Box

0 0 投票数
Article Rating
订阅评论
提醒
guest

0 评论
最旧
最新 最多投票
内联反馈
查看所有评论