Описание woocommerce_shipping_init
— Action
Хук woocommerce_shipping_init позволяет инициализировать параметры доставки в WooCommerce. Он срабатывает при загрузке страницы оформления заказа и позволяет добавлять или изменять способы доставки и их параметры
Примеры использования
Пример добавления нового способа доставки:
add_action('woocommerce_shipping_init', function() {
class WC_Shipping_Custom_Method extends WC_Shipping_Method {
public function __construct() {
$this->id = 'custom_method';
$this->method_title = 'Кастомный метод';
$this->method_description = 'Описание кастомного метода доставки';
$this->enabled = 'yes';
$this->cost = '10.00';
$this->init();
}
public function calculate_shipping($package) {
$rate = array(
'id' => $this->id,
'label' => $this->method_title,
'cost' => $this->cost,
);
$this->add_rate($rate);
}
}
add_filter('woocommerce_shipping_methods', function($methods) {
$methods['custom_method'] = 'WC_Shipping_Custom_Method';
return $methods;
});
});
В этом примере мы создаем новый способ доставки с помощью кастомного класса и добавляем его к доступным методам доставки
Пример изменения существующего способа доставки:
add_action('woocommerce_shipping_init', function() {
add_filter('woocommerce_shipping_methods', function($methods) {
if (isset($methods['flat_rate'])) {
$methods['flat_rate']->cost = '5.00';
}
return $methods;
});
});
Здесь мы изменяем стоимость существующего способа доставки ‘flat_rate’ на ‘5.00’
— Лучшие практики
– Использование
Используйте этот хук, когда необходимо изменить или добавить способы доставки в WooCommerce
– Производительность
Хук может влиять на производительность, если добавляется большое количество способов доставки, так как это может увеличить время загрузки страницы оформления заказа
– Предупреждения
Убедитесь, что добавленные методы доставки корректно обрабатывают расчеты стоимости и другие параметры
Альтернативы
Тип: filter
Этот фильтр позволяет изменять список доступных способов доставки
Используйте его, если вам нужно изменить уже существующие способы доставки без инициализации в вашем коде