如何为WooCommerce评论添加自定义Meta Box?代码失效求助
在WooCommerce评论编辑后台添加自定义Metabox的正确实现
你的代码无法运行的核心问题在于没搞清楚WordPress评论的metabox注册逻辑,以下是问题点和修正后的完整代码:
原代码的问题
- 错误使用
add_meta_boxes钩子:评论的metabox需要用专门的add_meta_boxes_comment钩子,而非针对文章的add_meta_boxes - 错误指定关联类型:WooCommerce评论属于WordPress的
comment类型,不是product-reviews - 参数错误:回调函数接收的是
$comment对象,不是$post - 语法错误:
basename(FILE)应为basename(__FILE__),缺少双下划线
修正后的完整代码
// 注册评论编辑页的自定义Metabox function kral_product_review_metabox() { add_meta_box( 'kral_product_review', 'اطلاعات دیدگاه', // 评论信息(波斯语) 'kral_product_review_fields_metabox', 'comment', // 关联评论类型 'side', 'high' ); } add_action('add_meta_boxes_comment', 'kral_product_review_metabox'); // 渲染Metabox内容 function kral_product_review_fields_metabox($comment) { // 验证nonce wp_nonce_field(basename(__FILE__), 'kral_product_review_nonce'); // 获取已保存的评论元数据,默认值设为你指定的内容 $product_name = get_comment_meta($comment->comment_ID, 'kral_product_name', true); $product_name = empty($product_name) ? 'salaaaaaaaaaaaaam' : $product_name; ?> <p> <label for="kral_product_name">产品名称</label> <br /> <input class="widefat" type="text" name="kral_product_name" id="kral_product_name" value="<?php echo esc_attr($product_name); ?>" /> </p> <?php } // 保存评论元数据 function kral_save_product_review_meta($comment_id) { // 验证nonce和权限 if (!isset($_POST['kral_product_review_nonce']) || !wp_verify_nonce($_POST['kral_product_review_nonce'], basename(__FILE__))) { return; } if (!current_user_can('edit_comment', $comment_id)) { return; } // 处理并保存字段值 if (isset($_POST['kral_product_name'])) { update_comment_meta($comment_id, 'kral_product_name', sanitize_text_field($_POST['kral_product_name'])); } } add_action('edit_comment', 'kral_save_product_review_meta');
代码说明
- 注册钩子:用
add_meta_boxes_comment替代add_meta_boxes,确保metabox显示在评论编辑页面 - 关联类型:指定
comment作为metabox的关联对象类型 - 字段渲染:从评论元数据中读取已保存的值,默认显示你设置的
salaaaaaaaaaaaaam,同时用esc_attr防止XSS - 数据保存:添加
edit_comment钩子处理保存逻辑,验证权限和nonce,用sanitize_text_field清理输入内容后保存到评论元数据中
内容的提问来源于stack exchange,提问作者raminjvn_
相关产品推荐
相关产品推荐

