如何用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 ''; }
关键细节说明
- 获取订单对象:通过邮件钩子的
$email->object参数拿到当前邮件对应的订单,确保我们针对的是订单关联的卖家。 - 卖家ID获取:使用Dokan内置函数
dokan_get_vendor_id_by_order()直接从订单中提取卖家ID,比手动读取元数据更可靠。 - 卖家验证:用
dokan_is_seller_enabled()确认该卖家账号处于启用状态,避免无效账号的误判。
备选验证方式(权限检查)
如果需要通过权限验证卖家,可将条件替换为:
if ( $vendor_id && user_can( $vendor_id, 'dokan_view_dashboard' ) ) { // 输出内容逻辑 }
该权限是Dokan卖家的核心权限,能准确识别卖家身份。
内容的提问来源于stack exchange,提问作者xhebruski
相关产品推荐
相关产品推荐

