簡體   English   中英

根據購物車商品數量取消設置 WooCommerce 結帳字段

[英]Unset WooCommerce checkout fields based on cart items quantities

根據三種不同產品(數組)的數量,我需要取消設置不同的結帳字段。

問題是,無論我如何嘗試使用下面的代碼,我都會在網站上收到“嚴重錯誤”。

我需要檢查:

  • 如果陣列中三種產品中任何一種的數量為 8 或更多,請刪除國家和 state(計費和運輸)。

  • 如果數組中的三個產品中的任何一個的數量少於 8 個,則刪除除名稱、電話和 email(計費和運輸)之外的所有字段。

這是代碼:

add_filter('woocommerce_checkout_fields', 'remove_cheeckout_fields_based_on_product_qty' );
function remove_cheeckout_fields_based_on_product_qty( $fields ) {

    $targeted_ids = array( 123, 456, 789 ); // how do I add qty to these?

    $found = false;

    foreach ( WC()->cart->get_cart() as $item ) {
    
        if (array_intersect( $targeted_ids, array( $item['product_id'], $item['variation_id'] ) ) ) {

    $found = true;

    break;

        }
    }
    
    if ( $found ) {
    
    unset($fields['shipping']['shipping_country']);
    unset($fields['shipping']['shipping_state']);
    unset($fields['billing']['billing_country']);
    unset($fields['billing']['billing_state']);

    } else {

    unset($fields['shipping']['shipping_company']);
    unset($fields['shipping']['shipping_country']);
    unset($fields['shipping']['shipping_address_1']);
    unset($fields['shipping']['shipping_address_2']);
    unset($fields['shipping']['shipping_city']);
    unset($fields['shipping']['shipping_state']);
    unset($fields['shipping']['shipping_postcode']);
    unset($fields['billing']['billing_address_1']);
    unset($fields['billing']['billing_address_2']);
    unset($fields['billing']['billing_city']);
    unset($fields['billing']['billing_postcode']);
    unset($fields['billing']['billing_country']);
    unset($fields['billing']['billing_state']);
    unset($fields['billing']['billing_company']);
    return $fields;
}

有什么建議嗎?

您得到的“嚴重錯誤”是因為您的 else 語句未正確應用。

要獲取購物車商品數量,您可以使用WC()->cart->get_cart_item_quantities()

操作如下:

  • 如果陣列中三種產品中任何一種的數量為 8 或更多,請刪除國家和 state(計費和運輸)。

  • 如果數組中的三個產品中的任何一個的數量少於 8 個,則刪除除名稱、電話和 email(計費和運輸)之外的所有字段。

所以你得到:

function filter_woocommerce_checkout_fields( $fields ) {
    // The targeted product ids, multiple product IDs can be entered, separated by a comma
    $targeted_ids = array( 123, 456, 789 );
    
    // Required minimum quantity
    $minimum_quantity = 8;
    
    // Flag, default = false
    $flag = false;
    
    // Loop trough cart items quantities
    foreach( WC()->cart->get_cart_item_quantities() as $product_id => $cart_item_quantity ) {
        // Product ID in targeted IDs?
        if ( in_array ( $product_id, $targeted_ids ) ) {
            // Greater than or equal to
            if ( $cart_item_quantity >= $minimum_quantity ) {
                $flag = true;
            }

            // Break loop
            break;
        }
    }
    
    // True
    if ( $flag ) {      
        unset( $fields['shipping']['shipping_country'] );
        unset( $fields['shipping']['shipping_state'] );
        unset( $fields['billing']['billing_country'] );
        unset( $fields['billing']['billing_state'] );
    } else {        
        // Unset
        unset( $fields['shipping']['shipping_company'] );
        unset( $fields['shipping']['shipping_country'] );
        unset( $fields['shipping']['shipping_address_1'] );
        unset( $fields['shipping']['shipping_address_2'] );
        unset( $fields['shipping']['shipping_city'] );
        unset( $fields['shipping']['shipping_state'] );
        unset( $fields['shipping']['shipping_postcode'] );
        unset( $fields['billing']['billing_address_1'] );
        unset( $fields['billing']['billing_address_2'] );
        unset( $fields['billing']['billing_city'] );
        unset( $fields['billing']['billing_postcode'] );
        unset( $fields['billing']['billing_country'] );
        unset( $fields['billing']['billing_state'] );
        unset( $fields['billing']['billing_company'] );
    }    

    return $fields;
}
add_filter( 'woocommerce_checkout_fields' , 'filter_woocommerce_checkout_fields', 10, 1 );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM