WordPress 外观菜单添加自定义字段
像素鱼丸
08-04
370

一,添加自定义字段

在 WordPress 中,为菜单项添加自定义字段可以让你在每个菜单项中存储和显示额外的信息。

使用 `wp_nav_menu_item_custom_fields` 钩子以及一些自定义代码来实现,代码如下:

步骤 1: 添加自定义字段到菜单项

首先,你需要使用 `wp_nav_menu_item_custom_fields` 钩子来添加自定义字段到菜单项编辑界面。你可以将以下代码添加到你的主题的 `functions.php` 文件中:

function my_custom_fields($item_id, $item, $depth, $args) {
    ?>
    <p>自定义字段标题</p>
    <input type="text" id="custom-field" name="custom-field[<?php echo $item_id; ?>]" value="<?php echo get_post_meta($item_id, '_custom_field', true); ?>">
    <?php
}
add_action('wp_nav_menu_item_custom_fields', 'my_custom_fields', 10, 4);

这段代码会在每个菜单项的配置区域添加一个文本输入框,用于填写自定义字段的值。

步骤 2: 保存自定义字段数据

为了确保你输入的数据能够被正确保存,你需要挂钩到 `wp_update_nav_menu_item` 动作上。以下是示例代码:

function my_save_menu_custom_fields($menu_id, $menu_item_db_id, $menu_item_args) {
    if (defined('DOING_AJAX') && DOING_AJAX) return;
    if (!isset($_REQUEST['custom-field'][$menu_item_db_id])) return;

    $custom_field_value = $_REQUEST['custom-field'][$menu_item_db_id];
    update_post_meta($menu_item_db_id, '_custom_field', $custom_field_value);
}
add_action('wp_update_nav_menu_item', 'my_save_menu_custom_fields', 10, 3);

这段代码会监听菜单项更新的动作,并根据提供的值更新相应的自定义字段。

步骤 3: 使用自定义字段

一旦你完成了上述步骤,你就可以通过 `get_post_meta()` 函数获取并使用这些自定义字段了。例如,在你的主题模板文件中:

$menu_item_id = // 获取当前菜单项ID的方法取决于上下文
$custom_field_value = get_post_meta($menu_item_id, '_custom_field', true);
echo esc_html($custom_field_value);

这样,你就可以在前端显示这个自定义字段的内容了。

二,添加自定义图片

在 functions.php 中添加:

// 添加自定义图片字段到菜单项
function add_menu_custom_image_field($item_id, $item, $depth, $args) {
    ?>
    <p class="field-custom-image description">
        <label for="edit-menu-item-custom-image-<?php echo $item_id; ?>">
            自定义图片 URL
        </label>
        <input type="text" id="edit-menu-item-custom-image-<?php echo $item_id; ?>" 
               class="widefat code edit-menu-item-custom-image" 
               name="menu-item-custom-image[<?php echo $item_id; ?>]" 
               value="<?php echo esc_attr(get_post_meta($item_id, '_menu_item_custom_image', true)); ?>" />
        <button type="button" class="button button-secondary upload-custom-image">选择图片</button>
    </p>
    <?php
}
add_action('wp_nav_menu_item_custom_fields', 'add_menu_custom_image_field', 10, 4);

// 保存自定义图片字段
function save_menu_custom_image_field($menu_id, $menu_item_db_id, $menu_item_args) {
    if (defined('DOING_AJAX') && DOING_AJAX) return;

    if (isset($_POST['menu-item-custom-image'][$menu_item_db_id])) {
        $image_url = $_POST['menu-item-custom-image'][$menu_item_db_id];
        update_post_meta($menu_item_db_id, '_menu_item_custom_image', esc_url_raw($image_url));
    } else {
        delete_post_meta($menu_item_db_id, '_menu_item_custom_image');
    }
}
add_action('wp_update_nav_menu_item', 'save_menu_custom_image_field', 10, 3);


// 加载媒体上传脚本
function enqueue_menu_image_script() {
    wp_enqueue_media();
    wp_enqueue_script('menu-image-upload', get_template_directory_uri() . '/js/menu-image-upload.js', array('jquery'), null, true);
}
add_action('admin_enqueue_scripts', 'enqueue_menu_image_script');

然后在你的主题目录下创建 js/menu-image-upload.js 文件,内容如下:

jQuery(document).ready(function($) {
    $(document).on('click', '.upload-custom-image', function(e) {
        e.preventDefault();

        var button = $(this);
        var input = button.siblings('.edit-menu-item-custom-image');

        var frame = wp.media({
            title: '选择图片',
            button: {
                text: '选择图片'
            },
            multiple: false
        });

        frame.on('select', function() {
            var attachment = frame.state().get('selection').first().toJSON();
            input.val(attachment.url);
        });

        frame.open();
    });
});

效果如下:

收藏
打赏
WordPress 代码实现文章上传多个特色图像
上一篇
Woocomerce 代码获取产品列表
下一篇

发表评论

注册不是必须的

像素鱼丸
159 文章
2 评论
4 喜欢
最新文章

StarFish 配置框架

一个轻量级的 WordPress 选项框架插件,通过配置化的方式,快速为 WordPress 主题或插件生成后台设置页面。 ✨ 特性 🎯 配置驱动 UI:只需定义数组配置,自动生成完整的表单界面 📱 多页面架构:支持多个独立的设置页面 🎨 丰富的字段类型:包含 15+ 种常用字段类型 🔗 字段依赖系统:实现字段间的联动效果 ✅ 数据验证与清理:自动进行安全清理,防止 XSS 攻击 🚀 零依赖:使用 […]

什么是幽灵按钮

“幽灵按钮”(Ghost Button)是一种常见的网页与移动应用 UI 设计模式,指背景透明(或半透明)、仅通过边框(border)和文字(text)定义的按钮,视觉上“若隐若现”,仿佛“幽灵”一般——因此得名。 核心特征: 无填充色(transparent background) 背景完全透明(或与父容器同色),不遮挡背后内容。 清晰的边框(通常 1–2px 实线) 如 border: 2px […]

付费资源下载时间限制有什么用?

这个功能确实挺常见的,它背后的逻辑其实不是“防君子”,而是“防小人”和“控成本”。有没有必要做,主要取决于你平台上的资源类型和你的运营阶段。 我们可以从三个角度来看看这个“10天有效期”到底有什么用: 增加倒卖和二次传播的成本(防黄牛) 这是最核心的意义。如果你的资源是虚拟商品(比如教程、源码、素材包),用户付一次钱理论上可以无限复制。 如果没有有效期: 一个人买了,转手挂到闲鱼或者别的群里卖,你 […]

测试产品

生成中...
扫描二维码
扫描二维码
确认购买

您确定要购买此资源吗?

微信扫码支付

请使用微信扫描二维码完成支付

订单号:

等待支付...