У меня есть два пользовательских кода, которые должны отображаться при выборе варианта доставки.
При выборе «Единый тариф» этот код показывает:
<?php if ( WC()->cart->needs_shipping() && WC()->cart->show_shipping() ) : ?>
<div class="cart-shipping-method">
<?php do_action( 'woocommerce_review_order_before_shipping' ); ?>
<?php wc_cart_totals_shipping_html(); ?>
<?php do_action( 'woocommerce_review_order_after_shipping' ); ?>
<?php
$extra_time = 45; // Additional time to be added
$data_array = []; // Initializing
foreach ( WC()->cart->get_cart() as $cart_item ) {
if( $cooking_time = $cart_item['data']->get_meta('_custom_time') ) {
$data_array[] = (int) $cooking_time;
}
}
if ( sizeof($data_array) ) {
$max_time = (int) max($data_array);
$delivery_time = $max_time + $extra_time;
echo '<p>' . __("Delivery Time", "woocommerce") . ': ' . $delivery_time . ' min.</p>';
}
?>
</div>
<?php endif; ?>
При выборе «Местный пикап» , этот код показывает:
add_action( 'woocommerce_cart_calculate_fees', 'custom_discount_for_pickup_shipping_method', 10, 1 );
function custom_discount_for_pickup_shipping_method( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
$percentage = 15; // <=== Discount percentage
$chosen_shipping_method_id = WC()->session->get( 'chosen_shipping_methods' )[0];
$chosen_shipping_method = explode(':', $chosen_shipping_method_id)[0];
// Only for Local pickup chosen shipping method
if ( strpos( $chosen_shipping_method_id, 'local_pickup' ) !== false ) {
// Calculate the discount
$discount = $cart->get_subtotal() * $percentage / 100;
// Add the discount
$cart->add_fee( __('Discount for Local Pickup') . ' (' . $percentage . '%)', -$discount );
}
}
Как сделать так, чтобы при выборе «Фиксированная ставка» отображалось только «Время доставки», а при выборе «Местный пикап» - только «Скидка при локальном пикапе» "?
ps У меня есть другая версия кода для" Flat Rate ", но по какой-то причине он не появляется в моей теме. Мне пришлось переделать его и поместить в файл темы.
add_action( 'woocommerce_after_shipping_rate', 'action_after_shipping_rate_callback', 10, 2 );
function action_after_shipping_rate_callback( $method, $index ) {
$chosen_shipping_id = WC()->session->get( 'chosen_shipping_methods' )[$index];
if( $method->method_id === 'flat_rate' && $method->id === $chosen_shipping_id ) {
$extra_time = 45; // Additional time to be added
$data_array = []; // Initializing
// Loop through car items
foreach ( WC()->cart->get_cart() as $cart_item ) {
if( $cooking_time = $cart_item['data']->get_meta('_custom_time') ) {
$data_array[] = (int) $cooking_time;
}
}
if ( sizeof($data_array) ) {
$max_time = (int) max($data_array);
$delivery_time = $max_time + $extra_time;
echo '<p><strong>' . __("Delivery Time", "woocommerce") . '</strong>: ' . $delivery_time . ' min.</p>';
}
}
}