排除特定产品在Woocommerce自动完成订单流程(Exclude specific produc

2019-09-30 00:59发布

我目前使用的代码从这个答案线程来自动完成订单,使新WooCommerce预订都添加到日历,(他们只得到补充一次标记为已完成)。

这个伟大的工程担保,但是,我想排除其他一些产品自动完成。

你知不知道这是否可能?

Answer 1:

通过订单项目迭代是较重的过程 ,不是制造一个更亮的SQL查询。

这里是将检查在Woocommerce订单(返回true或false)的产品ID的自定义条件函数:

function order_has_products( $order_id, $product_ids ){
    $product_ids = implode( "','", $product_ids );
    global $wpdb;
    $result = $wpdb->get_var( "
        SELECT COUNT(woim.meta_value) FROM {$wpdb->prefix}woocommerce_order_itemmeta as woim
        INNER JOIN {$wpdb->prefix}woocommerce_order_items as woi ON woi.order_item_id = woim.order_item_id
        WHERE woi.order_id = $order_id AND woim.meta_key IN ('_product_id','_variation_id')
        AND woim.meta_value IN ('$product_ids')
    " );
    return $result > 0 ? true : false;
}

然后你会以这种方式使用它:

add_action('woocommerce_thankyou', 'wc_auto_complete_order', 20, 1);
function wc_auto_complete_order($order_id){
    if (!$order_id)  return;

    // HERE define your Product Ids to exclude in the array 
    $product_ids = array( 37, 53 );

    // Get an instance of the WC_Product object
    $order = wc_get_order($order_id);

    $found  = order_has_products( $order_id, $product_ids );

    if ( in_array( $order->get_payment_method(), array('cod', 'cheque', '') ) || $found ) {
        return;
    }
    else {
        $order->update_status('completed');
    }

}

代码放在您的活动子主题的function.php文件(或活动主题)。 测试和工程。


WooCommerce:自动完成支付的订单(取决于付款方式)



文章来源: Exclude specific products on auto-complete orders process in Woocommerce