You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WordPress中编程向「添加菜单项」区块添加内容及自定义菜单项属性

WordPress菜单功能自定义实现方案

1. 向「添加菜单项」区块注入自定义项目

该需求完全可以实现,WordPress后台的菜单设置页的「添加菜单项」区域由多个元盒子组成,你可以通过注册自定义元盒子的方式添加自有项目:

// 注册自定义菜单项元盒子
add_action( 'admin_init', 'custom_register_nav_menu_metabox' );
function custom_register_nav_menu_metabox() {
    add_meta_box(
        'custom_nav_menu_source',
        '自定义项目组',
        'custom_render_nav_menu_metabox',
        'nav-menus',
        'side',
        'default'
    );
}

// 渲染自定义元盒子内容
function custom_render_nav_menu_metabox() {
    ?>
    <div class="custom-menu-items">
        <label class="menu-item-title">
            <input type="checkbox" class="menu-item-checkbox" value="custom_item_1" name="custom_menu_items[]">
            自定义项目1
        </label>
        <label class="menu-item-title">
            <input type="checkbox" class="menu-item-checkbox" value="custom_item_2" name="custom_menu_items[]">
            自定义项目2
        </label>
        <p class="button-controls">
            <input type="submit" class="button button-primary submit-add-to-menu right" value="添加到菜单" name="add-custom-menu-items" id="submit-custom-menu-items">
            <span class="spinner"></span>
            <br class="clear">
        </p>
    </div>
    <?php
}

后续需要追加提交处理逻辑,通过wp_update_nav_menu_item函数将选中的自定义项目转换为标准菜单项结构存入数据库即可。

2. 为菜单项添加自定义配置选项

2.1 「新标签页打开」配置

该功能为WordPress内置支持,无需额外开发:点击菜单设置页右上角的「屏幕选项」,勾选「链接目标」即可在每个菜单项的编辑面板中显示该配置项。如果需要全局默认开启该字段的展示,可通过get_user_option过滤器修改用户菜单配置的默认值。

2.2 「自定义图标」配置实现

使用wp_nav_menu_item_custom_fields钩子向菜单项编辑面板注入字段,同时追加保存逻辑即可:

// 注入自定义图标字段
add_action( 'wp_nav_menu_item_custom_fields', 'custom_add_menu_icon_field', 10, 2 );
function custom_add_menu_icon_field( $item_id, $item ) {
    $saved_icon = get_post_meta( $item_id, '_custom_menu_icon', true );
    ?>
    <p class="field-custom-icon description description-wide">
        <label for="menu-icon-<?php echo esc_attr( $item_id ); ?>">
            自定义图标类名<br>
            <input 
                type="text" 
                id="menu-icon-<?php echo esc_attr( $item_id ); ?>" 
                class="widefat" 
                name="menu_icon[<?php echo esc_attr( $item_id ); ?>]" 
                value="<?php echo esc_attr( $saved_icon ); ?>"
                placeholder="例如 fa fa-home"
            >
        </label>
    </p>
    <?php
}

// 保存图标字段值
add_action( 'wp_update_nav_menu_item', 'custom_save_menu_icon_field', 10, 2 );
function custom_save_menu_icon_field( $menu_id, $item_id ) {
    if ( isset( $_POST['menu_icon'][$item_id] ) ) {
        update_post_meta( $item_id, '_custom_menu_icon', sanitize_text_field( $_POST['menu_icon'][$item_id] ) );
    }
}

2.3 前端调用自定义图标

通过过滤器在菜单输出前拼接图标元素:

add_filter( 'wp_nav_menu_objects', 'custom_render_menu_icon_frontend', 10 );
function custom_render_menu_icon_frontend( $menu_items ) {
    foreach ( $menu_items as $item ) {
        $icon = get_post_meta( $item->ID, '_custom_menu_icon', true );
        if ( !empty( $icon ) ) {
            $item->title = '<i class="' . esc_attr( $icon ) . '"></i> ' . $item->title;
        }
    }
    return $menu_items;
}

注意事项

如果你使用的是WordPress 6.0+默认的块编辑器模式菜单管理页,需要额外通过WordPress块编辑器提供的JS钩子wp.hooks.addFilter,注入React组件来扩展菜单项的编辑属性和添加侧边栏的自定义项目区块。


内容的提问来源于stack exchange,提问作者Hossein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:39:03