Вывод уведомленя в корзине woocommerce?
В хуке woocommerce_shipping_init
Сохраняю данные WC()->session->set( 'volume_weight', $message );
Затем пытаюсь вывести информацию. но ничего не получается, даже если заменить wc_print_notice на var_dump("asdf);
ничего не происходит
function ronbel_notice() { $notice = WC()->session->get('volume_weight'); wc_print_notice( $notice, 'notice' ); } add_action( 'woocommerce_after_shipping_rate', 'ronbel_notice' ); |
function ronbel_notice() { $notice = WC()->session->get('volume_weight'); wc_print_notice( $notice, 'notice' ); } add_action( 'woocommerce_after_shipping_rate', 'ronbel_notice' );
Дополнительно
Выполните свое добавление в сессию, зайдите на страницу корзины, какой результат?
function.php:
function test() { if (WC()->session) { echo 'Сессия инициализирована!'; $notice = WC()->session->get('volume_weight'); echo $notice; } } add_action('woocommerce_before_cart', 'test'); |
function test() { if (WC()->session) { echo 'Сессия инициализирована!'; $notice = WC()->session->get('volume_weight'); echo $notice; } } add_action('woocommerce_before_cart', 'test');
Все остальные строки кроме этого экшена комментировал, ошибки не выскакивают.
function ronbel_notice() { echo "dfthfgh"; } add_action( 'woocommerce_before_cart', 'ronbel_notice' ); |
function ronbel_notice() { echo "dfthfgh"; } add_action( 'woocommerce_before_cart', 'ronbel_notice' );
@Mike_Ro, когда ловлю экшен выводится от двух до пяти раз уведомление, фильтровать пробовал и через wc_notice_count и wc_clear_notices никак не могу избавиться. нужно только один раз вывести.
function ronbel_notice() { if (WC()->session->get('volume_weight')) { $notice = WC()->session->get('volume_weight'); wc_print_notice( $notice, 'notice' ); // WC()->session->__unset( 'volume_weight' ); } } add_action( 'woocommerce_cart_updated', 'ronbel_notice' ); |
function ronbel_notice() { if (WC()->session->get('volume_weight')) { $notice = WC()->session->get('volume_weight'); wc_print_notice( $notice, 'notice' ); // WC()->session->__unset( 'volume_weight' ); } } add_action( 'woocommerce_cart_updated', 'ronbel_notice' );
Ответы:
Через диспетчер поймал событие которое идет после расчета доставки woocommerce_before_calculate_totals
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Вы пытаетесь вывести notice не в том месте или в тот момент, когда WooCommerce notices уже не печатаются.
wc_print_notice()добавляет/печатает уведомления в системе WooCommerce, но если hook не вызывается на странице корзины/checkout или вызывается слишком рано, вы ничего не увидите.Для вывода уведомления в корзине используйте hook, который точно срабатывает на странице cart:
add_action('woocommerce_before_cart', function () { $notice = WC()->session ? WC()->session->get('volume_weight') : ''; if ($notice) { wc_print_notice($notice, 'notice'); } });
Для checkout:
add_action('woocommerce_before_checkout_form', function () { $notice = WC()->session ? WC()->session->get('volume_weight') : ''; if ($notice) { wc_print_notice($notice, 'notice'); } });
Если вы ставите значение в
woocommerce_shipping_init, проверьте, что сессия WooCommerce уже доступна и значение реально сохраняется. Для отладки временно:add_action('woocommerce_before_cart', function () { var_dump(WC()->session->get('volume_weight')); });
Если даже
var_dumpне выводится, значит hook не выполняется на этой странице или тема переопределяет шаблон так, что место вывода другое.Ещё вариант — не печатать notice вручную, а добавить его через
wc_add_notice():wc_add_notice($message, 'notice');
А WooCommerce сам выведет notice там, где в шаблоне вызван
wc_print_notices(). Если тема не выводит notices, нужно проверить шаблоны корзины/checkout.