WooCommerce在X天后自动取消暂挂

时间:2018-02-21 作者:Daniel Romagnoli

我到处寻找,但没有决心。因此,我们为我们的站点开发了一个定制的“bacs”类型网关。在巴西,你可以通过银行付款。钢坯通常有付款到期日(约7天)。因此,当一个人办理退房手续时,网关会将钢坯发送给我们的客户,他必须在到期日之前付款。

由于这是离线支付,订单状态变为“暂停”。我一直在寻找一种方法来指定暂停订单在8天后自动取消(因为有7天的限制)。

如果看到一些代码,其中人们钩住了挂起的订单取消超时,但似乎不是这样。有什么想法吗?

1 个回复
SO网友:Daniel Romagnoli

所以我成功了。我创建了一个插件,在几个论坛上运行了几个小时,得到了很多帮助,我找到了一些非常有趣的东西。

因此,呼叫订单、BAC和所有其他类型的离线订单都将暂停,直到付款得到验证。post\\U状态为“wc处于保留状态”。我们需要的是将规则排除在检查之外,因为我们不需要处理到期日期。这是我们的代码:

// To change the amount of days just change \'-7 days\' to your liking
function get_unpaid_submitted() {        
            global $wpdb;

            $unpaid_submitted = $wpdb->get_col( $wpdb->prepare( "
                    SELECT posts.ID
                    FROM {$wpdb->posts} AS posts
                    WHERE posts.post_status = \'wc-on-hold\'
                    AND posts.post_date < %s
            ", date( \'Y-m-d H:i:s\', strtotime(\'-7 days\') ) ) );

            return $unpaid_submitted;
    }

    // This excludes check payment type.
    function wc_cancel_unpaid_submitted() {        
            $unpaid_submit = get_unpaid_submitted();

            if ( $unpaid_submit ) {                
                    foreach ( $unpaid_submit as $unpaid_order ) {                        
                            $order = wc_get_order( $unpaid_order );
                            $cancel_order = True;

                            foreach  ( $order->get_items() as $item_key => $item_values) {                                
                                    $manage_stock = get_post_meta( $item_values[\'variation_id\'], \'_manage_stock\', true );
                                    if ( $manage_stock == "no" ) {                                        
                                            $payment_method = $order->get_payment_method();                                        
                                            if ( $payment_method == "cheque" ) {
                                                    $cancel_order = False;
                                            }
                                    }                                
                            }
                            if ( $cancel_order == True ) {
                                    $order -> update_status( \'cancelled\', __( \'Pagamento não identificado e cancelado.\', \'woocommerce\') );
                            }
                    }
            }        
    }
    add_action( \'woocommerce_cancel_unpaid_submitted\', \'wc_cancel_unpaid_submitted\' );
    /* End of code. */

结束

相关推荐

在样式表中使用PHP(可能是“.htaccess”问题?)

很抱歉,我问了一个(从我收集的信息中)相对频繁的问题,但我认为我已经把问题复杂化了,因为我离开了一个项目,然后在我的技能变得生疏之后再回来。因此,在我不久前为一位朋友创建的一个非常基本的主题中,我在样式表中使用PHP创建了一些变量,以便可以随机化某些元素的颜色。我实现这一点的方法是命名样式表style.php (与CSS相反),包括<?php header(\"Content-type: text/css; charset: UTF-8\"); ?> 在文件的顶部。这在当时效果很好,但自从我完