Установить стоимость доставки на бесплатную доставку, если на одной странице товара был выбран переключатель (woocommerce) - PullRequest
0 голосов
/ 17 января 2020

Я работаю над проектом woocommerce и использую пользовательские поля WooCommerce (https://support.rightpress.net/hc/en-us/articles/115001968923-Developers-Field-data-storage-structure), чтобы предоставить клиенту две опции (переключатели) на странице продукта для выбора.

Пока это работает хорошо, но теперь мне нужно установить стоимость доставки на бесплатную доставку (или ноль), если выбран второй переключатель.

Как я могу проверить это значение (строка 11 ) внутри этого массива?

array(14) {
    ["wccf"]=>
      array(1) {
          [260]=>
              array(3) {
              ["value"]=>
              string(11) "FIELDNAME"
              ["data"]=>
              array(0) {
              }
      ["files"]=>
      array(0) {
        }
    }    
}

Я получил этот дамп

<code>add_action( 'woocommerce_before_cart', 'bbloomer_print_cart_array' );

function bbloomer_print_cart_array() {
foreach( WC()->cart->get_cart_contents() as $cart_item_key => $cart_item ) {
  echo '<pre>' , var_dump($cart_item) , '
'; }

и добавьте его как if else к этому коду, чтобы цены добавлялись к нулю, когда переключатель / имя поля имеет значение TRUE? В корзине может быть только один товар, поэтому нам не нужно проверять наличие нескольких товаров с разными опциями и т. Д. c

// Null shipping costs if radio button FIELDNAME was selected
add_filter('woocommerce_package_rates', 'shipping_class_null_shipping_costs', 10, 2);
function shipping_class_null_shipping_costs( $rates, $package ){
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return $rates;

    // this is my field name from the array above
    $MY_CUSTOM_FIELD = 'FIELDNAME';

    $found = false;

    // Loop through cart items and check for the right fieldname from my radio button
    foreach( $package['contents'] as $cart_item ) {
        // this is wrong, but I dont know how to acces the right value from my array
        if( $cart_item['data']->get_shipping_class() == $shipping_class_slug )
            $found = true;
    }



    // Set shipping costs to zero if shipping class is found
    if( $found ){
        foreach ( $rates as $rate_key => $rate ){
            $has_taxes = false;
            // Targetting "flat rate" and local pickup
            if( 'flat_rate' === $rate->method_id || 'local_pickup' === $rate->method_id  ){
                // Set the cost to zero
                $rates[$rate_key]->cost = 0;

                // Taxes rate cost (if enabled)
                foreach ($rates[$rate_key]->taxes as $key => $tax){
                    if( $rates[$rate_key]->taxes[$key] > 0 ){
                        $has_taxes = true;
                        // Set taxes cost to zero
                        $taxes[$key] = 0;
                    }
                }
                if( $has_taxes )
                    $rates[$rate_key]->taxes = $taxes;
            }
        }
        // Clear duplicated notices
        wc_clear_notices();
        // Add a custom notice to be displayed
        wc_add_notice( __('My custom shipping message here.', 'woocommerce'), 'notice' );
    }
    return $rates;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...