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

WooCommerce预订-24小时后将订单状态从“待付款”更改为“已取消

闾丘树
2023-03-14

我正在使用WooCommerce预订,客户可以要求预订,需要得到管理员的确认。如果管理员不确认预订,我希望订单在24小时后自动取消。

从更改伍兹商务订单状态后X时间已通过回答代码,我正在寻找任何协助,以满足我的要求,使用WP cron。

共有1个答案

许庆
2023-03-14

我带着一个能解决我的需求的工作方案回来了。我希望它能帮到某人。

计划每30分钟运行一次事件,检查是否有超过24小时的挂起订单,并取消这些订单。

 * Create custom scheduled hook
 *
 * @param $schedules
 * @return mixed
 */
function custom_cron_schedule( $schedules ) {
    if ( ! isset( $schedules["30min"] ) ) {
        $schedules["30min"] = array(
            'interval' => 30 * 60,
            'display' => __( 'Once every 30 minutes' )
        );
    }
    return $schedules;
}
add_filter( 'cron_schedules','custom_cron_schedule' );

//Schedule an action if it's not already scheduled
if ( ! wp_next_scheduled( 'custom_pending_orders_hook' ) ) {
    wp_schedule_event( time(), '30min', 'custom_pending_orders_hook' );
}

add_action( 'custom_pending_orders_hook', 'custom_cancel_pending_orders' );

/**
 * Function to run on the scheduled event, checking for orders older than 24 hours
 *
 */
function custom_cancel_pending_orders() {
    // Get bookings older than 24 hours and with pending status
    $args = array(
        'post_type' => 'wc_booking',
        'posts_per_page' => -1,
        'post_status' => 'pending-confirmation',
        'date_query' => array(
            array(
                'before' => '24 hours ago' // hours ago
            )
        )
    );

    // do the query
    $query = new \WP_Query( $args );

    // The Loop
    if ( $query->have_posts() ) {
        // Get the posts
        $bookings = $query->posts;

        // Loop through posts
        foreach ( $bookings as $booking ) {
            if ( class_exists('WC_Booking') ) {
                // Get the booking object using the id of the post
                $wc_booking = new \WC_Booking( $booking->ID );

                // Change the status
                if ( $wc_booking ) {
                    $wc_booking->update_status( 'cancelled' );
                }
            }
        }
    } else {
        // no posts found, moving on
    }

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

  • 我用woocommerce做了一个简单的网店,有三种付款方式。理想情况下,可通过直接银行转账和开户。订单ID是根据付款方式创建的。例如,如果使用iDEAL付款,订单id将变为ID190100;如果以账户付款,订单id将变为RK190100。我从BeRocket的插件“WooCommerce的顺序订单号”中得到了这一点,但这些都是在付款完成之前创建的。订单ID必须在付款后才能最终确定。现在,尚未付款

  • 我使用WooCommerce通过电话/电子邮件等手动接受订单,我使用后端记录订单,手动添加订单。 目前,当生成“待付款”的订单作为状态时,库存会自动减少/扣减。我不希望这种情况发生。理想情况下,我只想减少库存,当订单被标记为“正在处理”,然后付款,然后采取。 我明白这是如何WooCommerce工作回来,有没有一种方法来避免库存减少,直到某一个状态已经被选中? 我已经在functions.php中

  • 我在我的WooCommerce安装中创建了一个自定义订单状态,称为Quote。 现在我想收到一封电子邮件,每当收到一个订单,已经给出了状态栏。我根据这篇有用的文章创建了一个插件:http://www.skyverge.com/blog/how-to-add-a-custom-woocommerce-email/ 我的插件基本上是从文章复制的,我只是更改了电子邮件的内容。我想改变的是什么触发了电子邮

  • 说明 此消息用于确认或取消一个预订单 请求地址 http://api.dc78.cn/Api/bk_state 请求方式 GET 请求参数 参数 参数名称 必填 描述 范例 id 预订单编号 state 状态 目前取值有两个:1,确认预定,-1,取消预订 op 操作员 可选 table 预订桌台 可选 返回 status:1-成功,0-失败 请求方式 INI 请求参数 [action] 描述 ac

  • 首先,感谢一个人帮我写了一个脚本,将订单状态更改为完成(脚本如下)。 不幸的是,它不会触发订阅进入活动状态。当我在WooCommerce中手动更改订单状态时,它会这样做。所以我的想法是根据给定的订单号激活订阅。 如何根据WooCommerce中的order_id将订阅状态从“待定”更改为“活跃”? 这里有一个代码,当我使用100%优惠券时,它会改变订单状态:在functions.php 我发现像这