Изменить название ярлыка способа доставки в зависимости от его стоимости в WooCommerce

#php #wordpress #woocommerce #checkout #shipping-method

#php #wordpress #woocommerce #Оформить покупку #способ доставки

Вопрос:

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

Из того, что я нашел в HTML, текущая структура метода доставки выглядит следующим образом:

 <td data-title="Shipping">
<ul id="shipping_method" class="shipping__list woocommerce-shipping-methods">
    <li class="shipping__list_item">
        <input type="hidden" name="shipping_method[0]" data-index="0" id="shipping_method_0_flat_rate24" value="flat_rate:24" class="shipping_method" /><label class="shipping__list_label" for="shipping_method_0_flat_rate24">Flat Rate Shipping Fee: <span class="woocommerce-Price-amount amount"><bdi><span class="woocommerce-Price-currencySymbol">amp;#36;</span>10.00</bdi></span></label>                                
    </li>
</ul>
  

Я пытаюсь создать функцию для functions.php файл моей темы WordPress, я просмотрел некоторый код в Google и нашел аналогичную функцию, включающую «$available_shipping_methods», но я не был слишком уверен, как использовать эту переменную, поэтому в настоящее время у меня есть это:

 add_filter('woocommerce_package_rates', 'wc_shipping_rate_rename', 100, 2)

function wc_shipping_rate_rename($rates, $package){
    //Checking if the shipping rate exists
    if ( isset( $rates['flat_rate:24'] ) ) {
        //Getting the rate
        $ship_cost = $rates['flat_rate:24']->cost;
        if ( $ship_cost == 10) {
            $rates['flat_rate:24'] -> 'Subsidized shipping fee:';
        }
        if ( $ship_cost == 100) {
            $rates['flat_rate:24'] -> 'Flat rate shipping fee:';
        }
    }
    return $rates;
}
  

Целью было бы изменить часть в HTML, которая гласит «Плата за доставку по фиксированной ставке:» в зависимости от стоимости платы за доставку. Любая помощь будет очень признательна.

Ответ №1:

Для определенного идентификатора скорости доставки, чтобы изменить отображаемый ярлык скорости доставки в зависимости от его стоимости, используйте:

 add_filter('woocommerce_package_rates', 'custom_shipping_rate_label_based_on_cost', 100, 2)
function custom_shipping_rate_label_based_on_cost( $rates, $package ){
    // Here your targeted shipping rate Id
    $targeted_rate_id = 'flat_rate:24';
    
    // Loop through available shipping rates
    foreach ( $rates as $rate_key => $rate ) {
        // Targetting specific rate Id
        if( $targeted_rate_id === $rate_key ) {
            $rate_cost = $rate->cost;
            
            if ( $rate_cost < 100 ) {
                $rate_label = __('Subsidized shipping fee');
            } 
            elseif ( $rate_cost >= 100 ) {
                $rate_label = __('Flat rate shipping fee');
            }
            
            if ( isset($rate_label) ) {
                $rates[$rate_key]->label = $rate_label;
            }
        }
    }
    return $rates;
}
  

Код поступает functions.php файл вашей активной дочерней темы (или активной темы). Это должно работать.

Очистка кэша доставки:

  • Вам нужно будет очистить корзину, чтобы очистить кэшированные данные о доставке
  • Или в настройках доставки вы можете отключить / сохранить любой способ доставки, а затем включить возврат / сохранение.