当用户购买产品时,我想在数据库中的自定义表中保存一系列数据。这些数据将是产品ID,我拥有的自定义字段以及其他一些数据。
我的想法是,这应该在产品付款正确时完成,也就是说,在付款时。
我希望你给我建议,我已经创造了一种方法,但我不知道它是否是正确的,或者你是否会推荐其他方式。
我已编辑了thankyou页面,我已插入此代码:
$order = new WC_Order ($order->get_id ();
$check_payment = $order->payment_complete ();
if ($check_payment) {
global $wpdb;
wpdb->insert (/* CODE DATABASE*/);
}
答案 0 :(得分:1)
由于woocommerce订单收到(谢谢你)页面可以重新加载,这不是真正的好方法。
您可以在WC_Order
payment_complete()
方法中找到的正确使用的钩子是woocommerce_payment_complete
。因此,您的代码应该适用于大多数支付网关:
add_action('woocommerce_payment_complete', 'action_payment_complete', 30, 1 );
function action_payment_complete( $order_id ){
global $wpdb;
// Get an instance of the WC_Order object (if needed)
$order = wc_get_order( $order_id );
// Your database actions code
wpdb->insert (/* CODE DATABASE*/);
}
代码进入活动子主题(或活动主题)的function.php文件。
对于付款方式(检查此处)为'check','bacs'和'cod'需要“完成”通过商店经理,您将使用:
add_action( 'woocommerce_order_status_completed', 'action_order_status_completed', 20, 2 );
function action_payment_complete( $order_id, $order ){
// The specific payment methods to be target
$payment_methods = array('bacs','cheque','cod');
// Only for specific payment methods
if( ! in_array( $order->get_payment_method(), $payment_methods ) return;
global $wpdb;
// Your database actions code
wpdb->insert (/* CODE DATABASE*/);
}
因此,当此特定付款方式的订单状态更改为已完成时,将触发此挂钩...
如果您定位处理订单状态,则还可以使用
woocommerce_order_status_processing
;如果定位<woocommerce_order_status_on-hold
,则也可以使用 strong>暂停订单状态
代码进入活动子主题(或活动主题)的function.php文件。
这应该有效。