当前位置: 首页 > 知识库问答 >
问题:

Woocommerce订阅更改截止日期

卢鸿彩
2023-03-14

我尝试创建一个具有特定到期日期的订阅。

在下面的函数中,$PRODUCT_ARGS是一个数组,包含有关产品的详细信息。这个数组包含product_id、regular_price等。product_id引用订阅变量product。

$start_date_timestamp是订阅开始日期。这个时间戳可能是几个月前的。

通过示例,我需要创建一个订阅开始2个月前(4月1日)。认购期限为3个月,因此认购期满必须为7月1日。

但现在的问题是,订阅到期时间定在9月27日。(因为我们目前是6月27日)

 static function create_subscription($customer_id,$product_args,$billing_args,$shipping_args = false,$order_notes = false,$client_notes = false,$order_status = false,$start_date_timestamp = false) {

        $start_date = false;
        if($start_date_timestamp==false)
        {
            $start_date = date( 'Y-m-d H:i:s', strtotime( 'now' ) );
        }
        else
        {
            $start_date = date( 'Y-m-d H:i:s', $start_date_timestamp);
        }

        $order_id = \perfo\woocommerce\order::create_order( $customer_id, $product_args, $billing_args,$shipping_args,$order_notes,$client_notes,$order_status);

        if ( ! is_wp_error($order_id) )
        {
            $wc_product = wc_get_product($product_args['product_id']);

            $period = \WC_Subscriptions_Product::get_period( $wc_product );
            $interval = \WC_Subscriptions_Product::get_interval( $wc_product );
            $length = \WC_Subscriptions_Product::get_length( $wc_product );
            $expiration = \WC_Subscriptions_Product::get_expiration_date( $product_args['product_id'],$start_date );

            $subscription = wcs_create_subscription(array('order_id' => $order_id, 'billing_period' => $period, 'billing_interval' => $interval, 'start_date' => $start_date,'end'=>$expiration));

            if(!is_wp_error($subscription))
            {
                $wc_product->set_regular_price($product_args['regular_price']);
                $wc_product->set_price($product_args['regular_price']);
                $subscription->add_product( $wc_product, $product_args['quantity']);

                $subscription->set_address( $billing_args, 'billing' );

                if($shipping_args)
                    $subscription->set_address( $shipping_args, 'shipping' );

                $subscription->update_dates( array(
                    'end'          => $expiration,
                ) );

                $subscription->calculate_totals();
                $subscription->save();

            }
            else
            {
                wp_delete_post($order_id,true);
            }

            return $subscription;
        }

        return $order_id;
    }

共有2个答案

程凯定
2023-03-14

如果您需要在现有产品的现有数据库中创建一些具有到期日的新订单,那么您可以创建另一个函数来处理一些参数,如$datestart、$dateend,作为一个额外的礼物,您将不用计算日期范围。

您的第一个函数将应用于新订单。好的。新的一个已经注册的命令,以处理在您的应用程序中新实现的过期机制。

简培
2023-03-14

您的结束日期必须是有效日期,并且格式必须为“Y-M-D H:I:S”

请试试这个代码。这在我这边很好用

$current_date = date("Y-m-d H:i:s") ;

// Setting start date to 1 day before the current date : you can set as require
$start_date = date('Y-m-d H:i:s',strtotime($current_date . "-1 days"));           

// end date : setting 12 month after the current date : you can set as require
$end_date = date('Y-m-d H:i:s',strtotime("+12 months", strtotime($start_date)));

$dates_to_update = array();
$dates_to_update['end'] = $end_date;
// $dates_to_update['next_payment'] = $end_date;
// $dates_to_update['trial_end'] = $end_date;
$subscription->update_dates($dates_to_update);

https://hotexample.com/examples/-/wc_subscriptions_product/get_expiration_date/php-wc_subscriptions_product-get_expiration_date-method-example.html

https://hotexample.com/examples/-/-/wcs_is_datetime_mysql_format/php-wcs_is_datetime_mysql_format-function-example.html

 类似资料:
  • 假设我有10个产品,并想提供他们在一个订阅。 正如你所看到的,每个月的价格都不一样。这在木业商业中是可能的吗?(已订阅产品/计划,但每月支付金额不等) 我在WooCommerce文档中找不到任何讨论此场景的内容。 多谢了。

  • 我正在使用Woocomemrce REST API与我的站点连接。当涉及到订单时,一切工作都很好,但对于订阅却不起作用。我尝试了以下代码来获取订阅,但它给出了“错误:找不到匹配URL和请求方法[rest_no_route]的路由” 谁能帮我解决这个问题。谢谢.

  • 在WooCommerce中,我使用以下代码更改订单日期列的管理订单视图格式: 自WooCommerce 3.0以来,它刚刚停止工作。 有什么想法吗? 谢谢

  • 请帮助我订阅更改的变量。我做了简单的微调。服务中的微调状态(真|假)存储: 在组件模板中,我通过条件显示微调器: 在组件中,我尝试订阅服务isVisibleSpinner变量中的更改: 但控制台输出遵循错误消息: 类型“boolean”不可分配给类型“Observable”。

  • 我正试图改变我的WooCommerce商店主页上的“阅读更多”按钮,但我不知道该怎么做。主页使用古腾堡积木展示最受欢迎的产品,当我有一个缺货的产品在那里,而不是“立即购买”按钮,它是一个说“阅读更多”。我想把“阅读更多”改为“缺货”。 我现在做的是: 将商店页面上的阅读更多更改为缺货,使用以下代码: 我不知道怎么做的是在第二个代码片段中包含一个if函数来更改{$data- 谢谢你!

  • 我WooCommerce,我正在使用“更改管理付款状态返回到WoocommercePending order status unpayed for WoocommercePending”答案代码,当订单状态在后端手动更改为pending时,重置订单的已付款状态。 例如,如果订单状态从“完成”更改为“挂起”,则删除以下内容:“支付日期为4月2日,2019年@5:29 PM” 现在我这里的问题是在订单