Я работаю над проектом 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;
}