订阅必须在当天之前开始,我在哪里可以设置时间
Subscription must start before current day, where can I set the time
我安装了 Woo-commerce
我安装了 Woo-commerce 订阅
我安装了 Woo-commerce 条带结帐。
我完成了结帐程序,但收到错误 "Subscription start date must be before the current day"
我已经完成了所有设置,但看不到任何可以设置开始日期的选项,它应该在订阅开始时开始。
我已经重新安装并安装了所有东西,但我一直收到同样的错误。
这是我的配置的副本。
我已经尝试用谷歌搜索所有内容,但我以前从未见过此错误。
我已经尝试在仪表板->设置->常规中更改 UTC 时钟,但我仍然遇到同样的错误。
这是有问题的代码
function wcs_create_subscription( $args = array() ) {
$order = ( isset( $args['order_id'] ) ) ? wc_get_order( $args['order_id'] ) : null;
$default_args = array(
'status' => '',
'order_id' => 0,
'customer_note' => null,
'customer_id' => ( ! empty( $order ) ) ? $order->get_user_id() : null,
'start_date' => ( ! empty( $order ) ) ? $order->order_date : current_time( 'mysql', true ),
'created_via' => ( ! empty( $order ) ) ? $order->created_via : '',
'order_version' => ( ! empty( $order ) ) ? $order->order_version : WC_VERSION,
'currency' => ( ! empty( $order ) ) ? $order->order_currency : get_woocommerce_currency(),
'prices_include_tax' => ( ! empty( $order ) ) ? ( ( $order->prices_include_tax ) ? 'yes' : 'no' ) : get_option( 'woocommerce_prices_include_tax' ),
);
$args = wp_parse_args( $args, $default_args );
$subscription_data = array();
// validate the start_date field
if ( ! is_string( $args['start_date'] ) || false === wcs_is_datetime_mysql_format( $args['start_date'] ) ) {
return new WP_Error( 'woocommerce_subscription_invalid_start_date_format', __( 'Invalid date. The date must be a string and of the format: "Y-m-d H:i:s".', 'woocommerce-subscriptions' ) );
} else if ( strtotime( $args['start_date'] ) > current_time( 'timestamp', true ) ) {
return new WP_Error( 'woocommerce_subscription_invalid_start_date', __( 'Subscription start date must be before current day', 'woocommerce-subscriptions' ) );
}
直到这个被修补改变这一行(对我来说是第 119 行)
} else if ( strtotime( $args['start_date'] ) > current_time( 'timestamp', true ) ) {
至此
} else if ( strtotime( $args['start_date'].' UTC' ) > current_time( 'timestamp', true ) ) {
来自 Woo Commerce class 的 $order->order_date 的值不包含时区格式,所以当这个时间与函数 current_time 比较时,包含的值我服务器当前时区的未来日期。
在 Wordpress 常规设置中将您的时间更改为 UTC(+或-#)以等于您当前的时间,它应该可以解决问题。至少它刚才对我有用...
我安装了 Woo-commerce 我安装了 Woo-commerce 订阅 我安装了 Woo-commerce 条带结帐。
我完成了结帐程序,但收到错误 "Subscription start date must be before the current day"
我已经完成了所有设置,但看不到任何可以设置开始日期的选项,它应该在订阅开始时开始。
我已经重新安装并安装了所有东西,但我一直收到同样的错误。
这是我的配置的副本。
我已经尝试用谷歌搜索所有内容,但我以前从未见过此错误。
我已经尝试在仪表板->设置->常规中更改 UTC 时钟,但我仍然遇到同样的错误。
这是有问题的代码
function wcs_create_subscription( $args = array() ) {
$order = ( isset( $args['order_id'] ) ) ? wc_get_order( $args['order_id'] ) : null;
$default_args = array(
'status' => '',
'order_id' => 0,
'customer_note' => null,
'customer_id' => ( ! empty( $order ) ) ? $order->get_user_id() : null,
'start_date' => ( ! empty( $order ) ) ? $order->order_date : current_time( 'mysql', true ),
'created_via' => ( ! empty( $order ) ) ? $order->created_via : '',
'order_version' => ( ! empty( $order ) ) ? $order->order_version : WC_VERSION,
'currency' => ( ! empty( $order ) ) ? $order->order_currency : get_woocommerce_currency(),
'prices_include_tax' => ( ! empty( $order ) ) ? ( ( $order->prices_include_tax ) ? 'yes' : 'no' ) : get_option( 'woocommerce_prices_include_tax' ),
);
$args = wp_parse_args( $args, $default_args );
$subscription_data = array();
// validate the start_date field
if ( ! is_string( $args['start_date'] ) || false === wcs_is_datetime_mysql_format( $args['start_date'] ) ) {
return new WP_Error( 'woocommerce_subscription_invalid_start_date_format', __( 'Invalid date. The date must be a string and of the format: "Y-m-d H:i:s".', 'woocommerce-subscriptions' ) );
} else if ( strtotime( $args['start_date'] ) > current_time( 'timestamp', true ) ) {
return new WP_Error( 'woocommerce_subscription_invalid_start_date', __( 'Subscription start date must be before current day', 'woocommerce-subscriptions' ) );
}
直到这个被修补改变这一行(对我来说是第 119 行)
} else if ( strtotime( $args['start_date'] ) > current_time( 'timestamp', true ) ) {
至此
} else if ( strtotime( $args['start_date'].' UTC' ) > current_time( 'timestamp', true ) ) {
来自 Woo Commerce class 的 $order->order_date 的值不包含时区格式,所以当这个时间与函数 current_time 比较时,包含的值我服务器当前时区的未来日期。
在 Wordpress 常规设置中将您的时间更改为 UTC(+或-#)以等于您当前的时间,它应该可以解决问题。至少它刚才对我有用...