Вывод уведомленя в корзине woocommerce?

Ссылка скопирована
PHP
1 ответ

В хуке 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' );

  • Михаил Р., на экшене wp_footer сработало, буду перебирать экшены
  • Вывод уведомленя в корзине woocommerce?

    @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

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Frontend-редакция Ответ

    Вы пытаетесь вывести 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');
        }
    });

    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');
        }
    });

    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'));
    });

    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');

    wc_add_notice($message, 'notice');

    А WooCommerce сам выведет notice там, где в шаблоне вызван wc_print_notices(). Если тема не выводит notices, нужно проверить шаблоны корзины/checkout.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно