仅订阅的Woocommerce自动完成订单

时间:2019-09-16 20:03:34

标签: php woocommerce

如何结合这些内容,以便仅使用虚拟订阅文章就可以自动完成订单?

add_action( 'woocommerce_payment_complete', 'woocommerce_subscriptions_auto_complete_order' );
function woocommerce_subscriptions_auto_complete_order( $order_id ) { 
    if ( ! $order_id ) {
        return;
    }
    $order = wc_get_order( $order_id );
    $order->update_status( 'completed' );
}

,这将自动完成虚拟产品。虽然我的订阅是虚拟的,但这没用

/**
 * Auto Complete all WooCommerce virtual orders.
 * 
 * @param  int  $order_id The order ID to check
 * @return void
 */
function custom_woocommerce_auto_complete_virtual_orders( $order_id ) {
    // if there is no order id, exit
    if ( ! $order_id ) {
        return;
    }
    // get the order and its exit
    $order = wc_get_order( $order_id );
    $items = $order->get_items();
    // if there are no items, exit
    if ( 0 >= count( $items ) ) {
        return;
    }
    // go through each item
    foreach ( $items as $item ) {
        // if it is a variation
        if ( '0' != $item['variation_id'] ) {
            // make a product based upon variation
            $product = new WC_Product( $item['variation_id'] );
        } else {
            // else make a product off of the product id
            $product = new WC_Product( $item['product_id'] );
        }
        // if the product isn't virtual, exit
        if ( ! $product->is_virtual() ) {
            return;
        }
    }
    /*
     * If we made it this far, then all of our items are virtual
     * We set the order to completed.
     */
    $order->update_status( 'completed' );
}
add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_virtual_orders' );

1 个答案:

答案 0 :(得分:0)

我在https://action-a-day.com/autocomplete-orders-in-woocommerce-3-0/找到了一种更简单的方法

var epoch = null;
var accuracy = null;

app.get('/', (_req, res) => {
  res.send({"epoch": epoch, "accuracy": accuracy});
})

app.post('/', (req, res) => {
  epoch = req.body.epoch;
  accuracy = req.body.accuracy;

  console.log("Epoch: "+epoch);
     console.log("Accuracy: "+accuracy);
  res.send("");
   })