Показывать пользовательский код при выборе способа доставки в WooCommerce - PullRequest
2 голосов
/ 25 января 2020

У меня есть два пользовательских кода, которые должны отображаться при выборе варианта доставки.

При выборе «Единый тариф» этот код показывает:

<?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>';
        }
    }
}
...