показать уведомления wc_add на определенной странице в разработке пользовательского плагина WooCommerce

Вопрос или проблема

Я новичок в разработке плагинов для WordPress. Я работаю над плагином, в котором создаю кастомную страницу корзины, похожую на корзину WooCommerce. И я добавляю уведомление wc, когда товар удаляется со страницы корзины, которое также отображается на этой странице, а также при обновлении магазина отображается на странице магазина/архива. Я не знаю, как с этим справляться. Извините за плохой английский и заранее спасибо.

            public function WhatsApp_cart_page_setting1() {
        if ( empty( WC()->session->get( 'WhatsApp_cart' ) ) ) {
            return;
        }
        if ( isset( $_GET['index_to_remove'] ) ) {
            $index        = sanitize_text_field( wp_unslash( $_GET['index_to_remove'] ) );
            $cart_session = WC()->session->get( 'WhatsApp_cart' );
            unset( $cart_session[ $index ] );
            WC()->session->set( 'WhatsApp_cart', $cart_session );
            $page = get_page_by_path( 'whatsapp-cart' );

            global $post;

            $whatsapp_slug = $post->post_name;
            if ( $whatsapp_slug === 'whatsapp-cart' ) {
                            wc_add_notice( 'Товар успешно удален из корзины WhatsApp', 'success' );
            }
        }
        ?>

Я решил эту проблему, ниже приведен код.

         add_action( 'woocommerce_init', array( $this, 'afwo_add_notices' ) );

             public function afwo_add_notices() {

        if ( isset( $_POST['whatsapp_cart_nonce_field'] ) && wp_verify_nonce( 
    sanitize_text_field( wp_unslash( $_POST['whatsapp_cart_nonce_field'] ) ), 
    'whatsapp_cart_field' ) ) {
                    echo '';
        }

        if ( empty( WC()->session->get( 'WhatsApp_cart' ) ) ) {
            return;
        }
        if ( isset( $_GET['index_to_remove'] ) ) {
            $index        = sanitize_text_field( wp_unslash( $_GET['index_to_remove'] 
   ) );
            $cart_session = WC()->session->get( 'WhatsApp_cart' );
            if ( isset( $cart_session[ $index ] ) ) {
                unset( $cart_session[ $index ] );
                WC()->session->set( 'WhatsApp_cart', $cart_session );

                wc_add_notice( 'Товар успешно удален из корзины WhatsApp', 
        'success' );
            }
        }
    }

Ответ или решение

Показ уведомлений wc_add на определенной странице в WooCommerce

Создание специального плагина для WooCommerce может вызывать растерянность, особенно когда речь идет о получении и отображении уведомлений. В этой статье мы рассмотрим, как правильно интегрировать уведомления wc_add_notice на отдельной странице вашей функции корзины WhatsApp, чтобы клиенты могли видеть уведомления об изменениях в своей корзине.

Шаг 1: Подключение к хукам WooCommerce

Для начала, вам нужно правильно использовать хуки WooCommerce. Вам понадобится следующий код, который привяжется к хуку woocommerce_init:

add_action('woocommerce_init', array($this, 'afwo_add_notices'));

Этот код позволяет вашей функции afwo_add_notices выполняться на этапе инициализации WooCommerce, что дает возможность обрабатывать действия, связанные с корзиной.

Шаг 2: Обработка удаления элементов из корзины

Ваша функция afwo_add_notices будет содержать логику удаления элемента из корзины и добавления уведомления. Пример кода выглядит следующим образом:

public function afwo_add_notices() {
    // Проверка nonce для безопасности
    if (isset($_POST['whatsapp_cart_nonce_field']) && wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['whatsapp_cart_nonce_field'])), 'whatsapp_cart_field')) {
        // пустой блок для обработки
    }

    // Проверка наличия корзины WhatsApp
    if (empty(WC()->session->get('WhatsApp_cart'))) {
        return;
    }

    // Удаление элемента из корзины
    if (isset($_GET['index_to_remove'])) {
        $index = sanitize_text_field(wp_unslash($_GET['index_to_remove']));
        $cart_session = WC()->session->get('WhatsApp_cart');

        if (isset($cart_session[$index])) {
            unset($cart_session[$index]);
            WC()->session->set('WhatsApp_cart', $cart_session);
            wc_add_notice('Элемент успешно удален из корзины WhatsApp', 'success');
        }
    }
}

Шаг 3: Отображение уведомлений на специальной странице

Теперь, когда уведомление добавлено, нам необходимо убедиться, что оно отображается только на нужной странице. Убедитесь, что ваша функция проверяет текущую страницу:

global $post;
if ($post->post_name === 'whatsapp-cart') {
    // Уведомление добавлено, и оно будет отображаться на этой странице
    wc_print_notices();
}

Полный пример кода

Объединяясь, весь код может выглядеть следующим образом:

add_action('woocommerce_init', array($this, 'afwo_add_notices'));

public function afwo_add_notices() {
    if (isset($_POST['whatsapp_cart_nonce_field']) && wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['whatsapp_cart_nonce_field'])), 'whatsapp_cart_field')) {
        // Удалить и добавить уведомление
    }

    if (empty(WC()->session->get('WhatsApp_cart'))) {
        return;
    }

    if (isset($_GET['index_to_remove'])) {
        $index = sanitize_text_field(wp_unslash($_GET['index_to_remove']));
        $cart_session = WC()->session->get('WhatsApp_cart');

        if (isset($cart_session[$index])) {
            unset($cart_session[$index]);
            WC()->session->set('WhatsApp_cart', $cart_session);
            wc_add_notice('Элемент успешно удален из корзины WhatsApp', 'success');
        }
    }
}

if (is_page('whatsapp-cart')) {
    wc_print_notices();
}

Заключение

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

Если у вас есть дальнейшие вопросы или необходимость в помощи с более сложными требованиями, не стесняйтесь задавать их!

Оцените материал
Добавить комментарий

Капча загружается...