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

如何从Memberpress非订阅新交易中正确获取企业账户ID

问题原因说明
  • Memberpress Corporate 插件对订阅交易和非订阅交易的corporate_account_id字段赋值时机确实存在差异:
    • 订阅交易的企业账户ID会在交易对象初始化阶段就完成写入,mepr-event-transaction-completed触发时该属性已经完成赋值
    • 非订阅一次性交易的企业账户ID是在mepr-event-transaction-completed钩子触发后,才由Corporate插件的后置关联逻辑写入数据库,因此你在该钩子下直接读取交易对象的属性只会拿到默认值0,和数据库实际存储的内容不一致。
解决方案

方案1:直接查询数据库读取最新值

因为数据库中已经存在对应字段值,只需要在钩子触发时通过交易ID主动查询数据库获取即可,无需依赖交易对象的预赋值属性:

$transaction = $event->get_data();
$membership_type_ids = array(1, 2, 4);
if (in_array($transaction->product_id, $membership_type_ids) && $transaction->txn_type == 'payment') {
    global $wpdb;
    // 直接从数据库查询最新的企业账户ID
    $org_id = $wpdb->get_var(
        $wpdb->prepare(
            "SELECT corporate_account_id FROM {$wpdb->prefix}mepr_transactions WHERE id = %d",
            $transaction->id
        )
    );
    my_custom_function($org_id);
}

方案2:更换触发时机更晚的钩子

选择所有交易关联数据写入完成后才触发的mepr_transaction_confirmed钩子,该钩子对订阅、非订阅交易均生效,此时读取交易对象的corporate_account_id属性已经完成赋值:

add_action('mepr_transaction_confirmed', function($transaction) {
    $membership_type_ids = array(1, 2, 4);
    if (in_array($transaction->product_id, $membership_type_ids) && $transaction->txn_type == 'payment') {
        $org_id = $transaction->corporate_account_id;
        my_custom_function($org_id);
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:39:03