在WooCommerce中为付费订单添加自定义数据库表中的数据

时间:2018-01-31 17:17:39

标签: php sql wordpress woocommerce payment-gateway

当用户购买产品时,我想在数据库中的自定义表中保存一系列数据。这些数据将是产品ID,我拥有的自定义字段以及其他一些数据。

我的想法是,这应该在产品付款正确时完成,也就是说,在付款时。

我希望你给我建议,我已经创造了一种方法,但我不知道它是否是正确的,或者你是否会推荐其他方式。

我已编辑了thankyou页面,我已插入此代码:

$order = new WC_Order ($order->get_id ();
$check_payment = $order->payment_complete ();

if ($check_payment) {
    global $wpdb;
    wpdb->insert (/* CODE DATABASE*/);
} 

1 个答案:

答案 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文件。

这应该有效。