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

如何通过钩子将JetFormBuilder提交的产品作者设为Dokan卖家

解决Dokan多卖家商城前端提交产品时自动设置作者为卖家的问题

你的核心问题是没有正确关联WooCommerce产品的post_author字段与Dokan卖家用户ID,而是用了自定义元字段,同时没有结合JetFormBuilder的提交钩子和Dokan的卖家身份校验。以下是修正后的实现方案:

问题分析

  1. 原代码使用自定义元字段_product_author存储卖家名称,但WooCommerce产品的作者是通过post_author字段关联用户ID的,这才是WordPress/WooCommerce的标准做法,也能和Dokan的卖家系统兼容。
  2. save_post_product钩子在JetFormBuilder提交流程中可能触发时机不合适,改用JetFormBuilder专属的提交后钩子更可靠。
  3. 缺少对当前用户是否为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);

代码说明

  1. 产品作者支持:确保product自定义文章类型开启author支持,让WordPress能正确处理产品的作者关联。
  2. JetForm提交钩子:使用jet-form-builder/after-form-submit钩子,在表单提交完成、产品创建后执行作者设置,避免时机问题。
  3. Dokan卖家校验:通过dokan_is_seller()确认当前用户是卖家,防止非卖家用户提交时错误设置。
  4. 标准字段更新:直接更新产品的post_author字段为卖家用户ID,这是WordPress和WooCommerce的标准做法,能和Dokan的卖家管理系统无缝兼容。
  5. 后台作者列优化:直接调用WordPress默认的用户信息,还可以额外显示卖家的店铺名称,提升后台管理体验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:36:09