Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据订单id将订阅状态更改为“活动”_Php_Wordpress_Woocommerce_Hook Woocommerce_Woocommerce Subscriptions - Fatal编程技术网

Php 根据订单id将订阅状态更改为“活动”

Php 根据订单id将订阅状态更改为“活动”,php,wordpress,woocommerce,hook-woocommerce,woocommerce-subscriptions,Php,Wordpress,Woocommerce,Hook Woocommerce,Woocommerce Subscriptions,首先,感谢一位帮我写了一个脚本,将订单状态更改为已完成(下面的脚本) 不幸的是,它不会触发订阅进入活动状态。当我在WooCommerce中手动更改订单状态时,它会这样做。所以我的想法是根据给定的订单号激活订阅 如何根据WooCommerce中的订单id将订阅状态从“待定”更改为“活动”? 下面是一段代码,当我使用100%优惠券时,它可以改变订单状态:在functions.php中 <?php add_action('woocommerce_checkout_order_processed

首先,感谢一位帮我写了一个脚本,将订单状态更改为已完成(下面的脚本)

不幸的是,它不会触发订阅进入活动状态。当我在WooCommerce中手动更改订单状态时,它会这样做。所以我的想法是根据给定的订单号激活订阅

如何根据WooCommerce中的订单id将订阅状态从“待定”更改为“活动”?

下面是一段代码,当我使用100%优惠券时,它可以改变订单状态:在functions.php中

<?php

add_action('woocommerce_checkout_order_processed', 'custom_woocommerce_auto_complete_order');
function custom_woocommerce_auto_complete_order($order_id)
{
    if (!$order_id) {
        return;
    }

      $order = wc_get_order($order_id);
    if ($order->get_total() == 0) {
        $order->update_status('processing');
        $order->update_status('completed');
    }
}
 
我试过这个,但不起作用:

add_action('woocommerce_checkout_order_processed', 'custom_woocommerce_auto_complete_order');
function custom_woocommerce_auto_complete_order($order_id)
{
    if (!$order_id) {
        return;
    }

      $order = wc_get_order($order_id);
    if ($order->get_total() == 0) {
        $order->update_status('processing');
        $order->update_status('completed');
    }
}


do_action('woocommerce_checkout_order_processed', 'subscriptions_activated_for_order', $order_id );
function activate_subscriptions_for_order( $order_id ) {

  $subscriptions = wcs_get_subscriptions_for_order( $order_id );

  if ( ! empty( $subscriptions ) ) {

    foreach ( $subscriptions as $subscription ) {

      try {
        $subscription->update_status( 'active' );
      } catch ( Exception $e ) {
        // translators: $1: order number, $2: error message
        $subscription->add_order_note( sprintf( __( 'Failed to activate subscription status for order #%1$s: %2$s', 'woocommerce-subscriptions' ), is_object( $order_id ) ? $order->get_order_number() : $order_id, $e->getMessage() ) );
      }
    }

  }
}

致以最诚挚的问候

您的代码中存在错误和错误。您可以尝试将所有内容合并在一起,如:

add_action('woocommerce_checkout_order_processed', 'custom_woocommerce_auto_complete_order');
function custom_woocommerce_auto_complete_order($order_id)
{
    if (!$order_id) {
        return;
    }

    $order = wc_get_order($order_id);

    if ($order->get_total() == 0) {
        // $order->update_status('processing'); // Unneeded as you complete the order
        $order->update_status('completed');
    }

    $subscriptions = wcs_get_subscriptions_for_order( $order );
    
    if ( ! empty( $subscriptions ) ) {
        activate_subscriptions_for_order( $order );
    }
}
代码进入活动子主题(或活动主题)的functions.php文件。它可以工作


或者你可以保留:

add_action('woocommerce_checkout_order_processed', 'custom_woocommerce_auto_complete_order');
function custom_woocommerce_auto_complete_order($order_id)
{
    if (!$order_id) {
        return;
    }

    $order = wc_get_order($order_id);

    if ($order->get_total() == 0) {
        // $order->update_status('processing'); // Unneeded as you complete the order
        $order->update_status('completed');
    }
}
并使用订单状态为“完成”时触发的钩子
woocommerce\u order\u status\u completed
,如下所示激活与订单相关的订阅:

add_action( 'woocommerce_order_status_completed', 'order_complete_activate_subscription', 10, 2 );
function order_complete_activate_subscription( $order_id, $order ) {
    $subscriptions = wcs_get_subscriptions_for_order( $order );
    
    if ( ! empty( $subscriptions ) ) {
        activate_subscriptions_for_order( $order );
    }
}

代码进入活动子主题(或活动主题)的functions.php文件。它可以工作。

谢谢你回答我,第一个和以前一样工作,没有改变,只是增加了会话超时,第二个解决方案也没有使订阅状态从挂起变为活动。
add_action( 'woocommerce_order_status_completed', 'order_complete_activate_subscription', 10, 2 );
function order_complete_activate_subscription( $order_id, $order ) {
    $subscriptions = wcs_get_subscriptions_for_order( $order );
    
    if ( ! empty( $subscriptions ) ) {
        activate_subscriptions_for_order( $order );
    }
}