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

一,添加自定义字段

在 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 代码获取产品列表
下一篇

发表评论

注册不是必须的

像素鱼丸
149 文章
0 评论
4 喜欢
最新文章

Mirage 主题 v2.93.0 发布

更新内容: refactor 移除图片高宽比开关 refactor 移除全局的TOC生成开关 refactor 优化 header.php 中的seo模块和样式覆盖 feat 主题启用的时候,移除非当前主题注册的小工具 fix 修复分类小工具的bug feat 管理员打开后台,检查最当前设置首页布局的模块,如果缺少最新模块,就添加到隐藏模块列表中 fix 优化链接卡片样式 fix 优化热门文章样式 […]

如何使用 WordPress Setting API

使用 WordPress 的 Setting API 是在插件或主题中创建和管理设置页面的标准方式。它提供了一种结构化、安全的方式来保存和获取用户配置的选项。 ✅ 一、Setting API 简介 WordPress 的 Setting API 允许你: 创建设置页面(Settings Page) 注册设置字段(Settings Field) 验证和保存设置数据 使用表单提交来更新设置 ✅ 二、基 […]

详解 WordPress 的评论设置

好的,我们来详细梳理并总结 WordPress 中关于文章评论的两个核心控制层级:全局设置和单篇设置。理解这两者的关系(优先级)是管理网站评论的关键。 1. 全局设置 (Global Settings) —— 网站的“默认规则” 这是整个网站评论系统的总开关和默认行为准则。它决定了新发布的文章默认是什么样子的。 位置:WordPress 后台仪表盘 -> 设置 (Settings) -> […]

wp_handle_comment_submission 函数

wp_handle_comment_submission() 是 WordPress 中用于处理评论提交的核心函数之一。它通常在用户提交评论时被调用,负责验证和处理评论数据,并最终将评论插入到数据库中。 ✅ 函数作用 wp_handle_comment_submission() 的主要功能是: 验证用户提交的评论数据(如评论内容、用户名、邮箱等) 检查是否为垃圾评论(通过 Akismet 或其他过 […]
生成中...
扫描二维码
扫描二维码
用户登录