Получение методов доставки WooCommerce программным путем
Как я могу получить методы доставки в моем магазине WooCommerce? У меня на странице оформления заказа отображается следующее:
А в панели администратора это выглядит так:
Я пробовал использовать:
WC()->shipping->load_shipping_methods()
Но это не возвращает текст/цену для GLS или Click and collect. Возвращаются следующие данные: https://paste.laravel.io/0c1aff96-dbed-452c-856f-6d62b6f1f47e

Вам нужно использовать что-то другое, как показано ниже (с комментариями):
// Цикл по пакетам доставки из WC_Session (в некоторых случаях их может быть несколько)
foreach ( WC()->cart->get_shipping_packages() as $package_id => $package ) {
// Проверяем, существует ли доставка для текущего пакета
if ( WC()->session->__isset( 'shipping_for_package_'.$package_id ) ) {
// Цикл по тарифам доставки для текущего пакета
foreach ( WC()->session->get( 'shipping_for_package_'.$package_id )['rates'] as $shipping_rate_id => $shipping_rate ) {
$rate_id = $shipping_rate->get_id(); // то же самое, что и переменная $shipping_rate_id (комбинация метода доставки и ID экземпляра)
$method_id = $shipping_rate->get_method_id(); // Слаг метода доставки
$instance_id = $shipping_rate->get_instance_id(); // ID экземпляра
$label_name = $shipping_rate->get_label(); // Название метода в виде метки
$cost = $shipping_rate->get_cost(); // Стоимость без налога
$tax_cost = $shipping_rate->get_shipping_tax(); // Сумма налога
$taxes = $shipping_rate->get_taxes(); // Подробности о налогах (массив)
}
}
}
Теперь если сессия покупателя еще не активирована (покупатель еще не добавил товар в корзину), вам нужно принудительно активировать сессию WooCommerce с помощью следующего кода:
// Активация WC_Session для покупателя add_action( 'init', 'wc_session_enabler' ); function wc_session_enabler() { if ( is_user_logged_in() || is_admin() ) return; if ( isset(WC()->session) && ! WC()->session->has_session() ) { WC()->session->set_customer_session_cookie( true ); } }
Код добавляется в файл functions.php вашей активной дочерней темы (или активной темы).
При необходимости вы также можете получить выбранный покупателем метод(ы) доставки следующим образом:
$chosen_shipping_methods = WC()->session->get( 'chosen_shipping_methods' );

Знаете ли вы, работает ли WC()->session->get( 'chosen_shipping_methods' ), если доступен только один способ доставки?
