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

AutomateWoo自定义触发器传参异常:无法获取自定义变量

AutomateWoo自定义触发器无法读取自定义变量的解决方案

问题背景

已依据AutomateWoo官方文档创建多个可正常运行的自定义触发器,现开发复杂触发器时需将product_id、product_name、date_created传递到AutomateWoo用于邮件内容。编写代码后触发器可正常显示,但无法找到这三个自定义变量。

问题原因

核心问题是自定义数据项未在触发器类的supplied_data_items数组中声明,AutomateWoo仅会识别该数组中定义的数据项,未声明的字段无法在邮件模板或规则中被调用。此外代码中还有几处细节需要修正。

解决方案

1. 声明自定义数据项

在触发器类的supplied_data_items数组中添加自定义字段,明确告知AutomateWoo这些数据是可用的:

public $supplied_data_items = array('product', 'product_name', 'product_id', 'created_date');

2. 修正数据传递逻辑

  • 确保catch_hooks方法中传递的变量名清晰准确,同时将WC_DateTime类型的日期转为字符串格式,方便邮件使用:
public function catch_hooks( $product, $product_id ) {
    $product_name = $product->get_name();
    // 将日期对象格式化为可读字符串,可根据需求调整格式
    $date_created = $product->get_date_created()->format('Y-m-d H:i:s');
        
    $this->maybe_run(array(
        'product' => $product,
        'product_name' => $product_name,
        'product_id' => $product_id,
        'created_date' => $date_created,
    ));
}

注:如果外部传入的$product_id实际是SKU,建议改用$product->get_sku()获取,避免依赖外部参数导致数据错误。

3. 优化验证逻辑

若无需额外验证,validate_workflow方法可简化为直接返回true,移除多余的数据读取代码:

public function validate_workflow( $workflow ) {
    return true;
}

4. 确保触发动作参数正确

触发触发器时,需保证do_action的参数顺序与catch_hooks方法一致:

do_action('product_created', $product_object, $product_id);

完整修改后的代码

<?php

if ( ! defined( 'ABSPATH' ) ) {
    exit; // 禁止直接访问
}

/**
 * 自定义产品创建触发器
 * 触发方式: do_action('product_created', $product, $product_id );
 */
class Product_Created_Trigger extends AutomateWoo\Trigger {

    /**
     * 声明触发器提供的数据项
     * @var array
     */
    public $supplied_data_items = array('product', 'product_name', 'product_id', 'created_date');

    /**
     * 初始化触发器
     */
    public function init() {
        $this->title = __( '产品已创建', 'automatewoo-custom' );
        $this->group = __( '产品', 'automatewoo-custom' );
    }

    /**
     * 加载触发器字段(可选)
     */
    public function load_fields() {}

    /**
     * 注册钩子
     */
    public function register_hooks() {
        add_action( 'product_created', array( $this, 'catch_hooks' ), 9999, 2 );
    }

    /**
     * 捕获钩子并触发触发器
     * @param WC_Product $product
     * @param int $product_id
     */
    public function catch_hooks( $product, $product_id ) {
        $product_name = $product->get_name();
        // 格式化创建日期为字符串
        $date_created = $product->get_date_created()->format('Y-m-d H:i:s');
            
        $this->maybe_run(array(
            'product' => $product,
            'product_name' => $product_name,
            'product_id' => $product_id,
            'created_date' => $date_created,
        ));
    }

    /**
     * 验证工作流(可选)
     * @param AutomateWoo\Workflow $workflow
     * @return bool
     */
    public function validate_workflow( $workflow ) {
        // 如需验证可在此添加逻辑,示例直接返回true
        return true;
    }
}

// 在functions.php中注册触发器
add_filter( 'automatewoo/triggers', 'product_created_trigger' );
/**
 * @param array $triggers
 * @return array
 */
function product_created_trigger( $triggers ) {
    include_once 'woocommerce/automatewoo/product_created_trigger.php';
    $triggers['product_created_trigger'] = 'Product_Created_Trigger';
    return $triggers;
}

使用说明

修改完成后,在AutomateWoo的邮件模板或规则配置中,即可通过以下变量调用自定义数据:

  • {{ product_name }}:产品名称
  • {{ product_id }}:产品ID
  • {{ created_date }}:产品创建日期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:52:44