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

如何用Dokan Lite函数识别卖家以实现WooCommerce邮件自定义内容?

解决WooCommerce邮件场景下识别Dokan卖家的问题

问题根源

你之前的代码失效核心原因是:WooCommerce邮件触发时,当前登录用户不一定是订单对应的卖家。比如系统自动发送订单邮件时,当前用户可能是后台管理员、访客甚至买家,用get_current_user_id()拿到的不是目标卖家ID,导致判断逻辑错误。

正确解决方案:基于订单关联的卖家ID判断

Dokan会给每个订单存储关联的卖家ID元数据,我们需要通过订单对象获取该ID,再验证是否为有效卖家,而非依赖当前登录用户。

完整代码示例

将以下代码添加到主题的functions.php或自定义插件中:

/**
 * 仅向订单关联的Dokan卖家显示WooCommerce邮件自定义附加内容
 */
add_action( 'woocommerce_email_additional_content', 'dokan_vendor_only_email_addon', 10, 3 );
function dokan_vendor_only_email_addon( $additional_content, $email ) {
    // 仅处理订单类邮件
    if ( ! isset( $email->object ) || ! is_a( $email->object, 'WC_Order' ) ) {
        return $additional_content;
    }

    $order = $email->object;
    // 获取订单关联的卖家ID
    $vendor_id = dokan_get_vendor_id_by_order( $order->get_id() );

    // 验证该ID是否为启用状态的卖家
    if ( $vendor_id && dokan_is_seller_enabled( $vendor_id ) ) {
        // 输出格式化后的自定义内容
        return wp_kses_post( wpautop( wptexturize( $additional_content ) ) );
    }

    // 非卖家用户则隐藏内容
    return '';
}

关键细节说明

  1. 获取订单对象:通过邮件钩子的$email->object参数拿到当前邮件对应的订单,确保我们针对的是订单关联的卖家。
  2. 卖家ID获取:使用Dokan内置函数dokan_get_vendor_id_by_order()直接从订单中提取卖家ID,比手动读取元数据更可靠。
  3. 卖家验证:用dokan_is_seller_enabled()确认该卖家账号处于启用状态,避免无效账号的误判。

备选验证方式(权限检查)

如果需要通过权限验证卖家,可将条件替换为:

if ( $vendor_id && user_can( $vendor_id, 'dokan_view_dashboard' ) ) {
    // 输出内容逻辑
}

该权限是Dokan卖家的核心权限,能准确识别卖家身份。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 21:07:16