如何通过钩子将JetFormBuilder提交的产品作者设为Dokan卖家
解决Dokan多卖家商城前端提交产品时自动设置作者为卖家的问题
你的核心问题是没有正确关联WooCommerce产品的post_author字段与Dokan卖家用户ID,而是用了自定义元字段,同时没有结合JetFormBuilder的提交钩子和Dokan的卖家身份校验。以下是修正后的实现方案:
问题分析
- 原代码使用自定义元字段
_product_author存储卖家名称,但WooCommerce产品的作者是通过post_author字段关联用户ID的,这才是WordPress/WooCommerce的标准做法,也能和Dokan的卖家系统兼容。 save_post_product钩子在JetFormBuilder提交流程中可能触发时机不合适,改用JetFormBuilder专属的提交后钩子更可靠。- 缺少对当前用户是否为Dokan卖家的校验,避免非卖家用户提交产品时错误设置作者。
修正代码
// 确保WooCommerce产品支持作者字段(部分主题可能默认关闭) function add_product_author_support() { add_post_type_support('product', 'author'); } add_action('after_setup_theme', 'add_product_author_support'); // JetFormBuilder提交后自动设置产品作者为当前卖家 function assign_dokan_seller_as_product_author($form_id, $post_id) { // 仅针对产品类型的提交 if (get_post_type($post_id) !== 'product') return; // 校验当前用户是Dokan卖家 if (!is_user_logged_in() || !dokan_is_seller()) return; $current_user = wp_get_current_user(); // 更新产品的post_author字段为卖家用户ID wp_update_post(array( 'ID' => $post_id, 'post_author' => $current_user->ID )); } add_action('jet-form-builder/after-form-submit', 'assign_dokan_seller_as_product_author', 10, 2); // 管理后台产品列表显示作者列(如果默认没显示的话) function add_author_column_to_products($columns) { // 在日期列前插入作者列 $new_columns = array(); foreach ($columns as $key => $title) { if ($key === 'date') { $new_columns['author'] = __('卖家', 'dokan'); } $new_columns[$key] = $title; } return $new_columns; } add_filter('manage_edit-product_columns', 'add_author_column_to_products'); // 填充作者列内容(直接用WordPress默认的作者信息,无需自定义元字段) function populate_product_author_column($column, $post_id) { if ($column === 'author') { $author_id = get_post_field('post_author', $post_id); $author = get_user_by('id', $author_id); if ($author) { echo esc_html($author->display_name); // 可选:显示卖家店铺名称 $store_info = dokan_get_store_info($author_id); if (!empty($store_info['store_name'])) { echo ' (' . esc_html($store_info['store_name']) . ')'; } } } } add_action('manage_product_posts_custom_column', 'populate_product_author_column', 10, 2);
代码说明
- 产品作者支持:确保
product自定义文章类型开启author支持,让WordPress能正确处理产品的作者关联。 - JetForm提交钩子:使用
jet-form-builder/after-form-submit钩子,在表单提交完成、产品创建后执行作者设置,避免时机问题。 - Dokan卖家校验:通过
dokan_is_seller()确认当前用户是卖家,防止非卖家用户提交时错误设置。 - 标准字段更新:直接更新产品的
post_author字段为卖家用户ID,这是WordPress和WooCommerce的标准做法,能和Dokan的卖家管理系统无缝兼容。 - 后台作者列优化:直接调用WordPress默认的用户信息,还可以额外显示卖家的店铺名称,提升后台管理体验。
内容的提问来源于stack exchange,提问作者maliktanveer
相关产品推荐
相关产品推荐

