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

