Сообщения woocommerce — система сопроводительной информации при использовании интернет-магазина. В системе есть 3 типа сообщений: информационные (notice), успешные действия (success), ошибки/предупреждения (error)
Стандартные сообщения
Это перечень стандартных сообщений разделенных по типам.
Информационные сообщения:
- У вас есть купон? Нажмите здесь для введения кода (Оформление)
- Товаров, соответствующих вашему запросу, не обнаружено. (Категория без товаров, Результат поиска)
- Оформление заказа не доступно, пока ваша корзина пуста. (Оформление, переадрессация на пустую корзину)
- Заказов ещё не создано. Перейти в магазин (Личный кабинет/Заказы)
Сообщения при успешных действиях
- Корзина обновлена. (Корзина)
- Вы отложили “Товар” в свою корзину. (Страница товара)
- Товар удален. Отменить? (Страница товара, Архив)
- Product correctly added to cart (Архив). Сообщение появляется при добавлении товара в корзину. Изначально данное уведомление не выводится. Начинает выводится если переместить уведомления в пользовательский хук, который идет раньше woocommerce (см. ниже)
Ошибки/предупреждения
- К сожалению, у нас недостаточно «Наименование товара» для выполнения заказа (в наличии 3). Пожалуйста, измените свой заказ и попробуйте ещё раз. Приносим извинения за доставленные неудобства. (Корзина)
- Вы не можете добавить это количество в корзину — у нас в наличии 3, у вас в корзине уже 3. (Страница товара)
- Платёж Ваш телефон (название поля) является обязательным для заполнения полем. (Оформление)
- Введите код купона, пожалуйста. (Корзина, Оформление)
- Купона «123456» не существует! (Корзина, Оформление)
- Жаль, но этот купон не может быть использован для товаров, которые находятся у вас в корзине. (Корзина, Оформление)
- Этот товар не может быть куплен. (Категория)
- Пожалуйста, укажите опции товара… (Категория)
Пользовательские сообщения
Создадим пользовательские сообщения. Как пример, сообщение появляется на странице Оформление товара.
// Информационное сообщение
add_action( 'woocommerce_before_checkout_form', 'skyverge_add_checkout_notice', 11 );
function skyverge_add_checkout_notice() {
wc_print_notice( __( 'Сообщение уведомления вместо', 'woocommerce' ), 'notice' );
}
// Сообщение success
add_action( 'woocommerce_before_checkout_form', 'skyverge_add_checkout_success', 9 );
function skyverge_add_checkout_success() {
wc_print_notice( __( 'Вы находитесь на странице оформления', 'woocommerce' ), 'success' );
}
// Сообщение предупреждение/ошибка
add_action( 'woocommerce_review_order_before_payment', 'skyverge_before_paying_notice' );
function skyverge_before_paying_notice() {
wc_print_notice( __( 'Сообщение об ошибке', 'woocommerce' ), 'error' );
}
Условия появления сообщений
Сообщения на сайте появляются на определенных страницах при каких-либо условиях. Исследуем это.
function sp_custom_notice() {
$subtotal = WC()->cart->get_cart_subtotal();
$free_shipping_threshold = 5000;
if ( $subtotal < $free_shipping_threshold ) {
wc_add_notice( 'Сумма покупки больше 5000 руб. Бесплатная доставка!', 'notice' );
}
}
add_action( 'wp', 'sp_custom_notice' );
Отключить сообщения
В карточке товара и в архивах уведомления отключаются так:
remove_action( 'woocommerce_before_shop_loop', 'wc_print_notices', 10 ); remove_action( 'woocommerce_before_single_product', 'wc_print_notices', 10 );
Чтобы отключить уведомления в корзине, нужно в файле cart.php закомментировать строку wc_print_notices();
При этом, если закомментировать ту же строку в файле form-checkout.php для отключения сообщений на странице Оформления товара — это не сработает. Уведомления все равно выводятся.
Перенести (пока не знаю зачем это может пригодиться) уведомления в пользовательский хук «выше» вывода woocommerce
remove_action( 'woocommerce_before_shop_loop', 'wc_print_notices', 10 ); remove_action( 'woocommerce_before_single_product', 'wc_print_notices', 10 ); add_action( 'body-after', 'wc_print_notices', 10 ); add_action( 'body-after', 'wc_print_notices', 10 );
Сообщение «товар добавлен в корзину..»
Отключить это уведомление
// Удалить сообщение «Товар добавлен в корзину..»
add_filter( 'wc_add_to_cart_message_html', '__return_null' );
Редактировать его
add_filter( 'wc_add_to_cart_message_html', 'bbloomer_custom_add_to_cart_message' );
function bbloomer_custom_add_to_cart_message() {
$message = 'Nicely done!' ;
return $message;
}
Сообщение «товар удален. Вернуть?»
Отключить это сообщение
// Отключить уведомление о том что товар удален
function sw_delete_remove_product_notice(){
$notices = WC()->session->get( 'wc_notices', array() );
if(isset($notices['success'])){
for($i = 0; $i < count($notices['success']); $i++){
if (strpos($notices['success'][$i], __('removed','woocommerce')) !== false) {
array_splice($notices['success'],$i,1);
}
}
WC()->session->set( 'wc_notices', $notices['success'] );
}
}
add_action( 'woocommerce_before_shop_loop', 'sw_delete_remove_product_notice', 5 );
add_action( 'woocommerce_shortcode_before_product_cat_loop', 'sw_delete_remove_product_notice', 5 );
add_action( 'woocommerce_before_single_product', 'sw_delete_remove_product_notice', 5 );
Убрать слово Billing из уведомления об обязательных полях при оформлении
function customize_wc_errors( $error ) {
if ( strpos( $error, 'Billing ' ) !== false ) {
$error = str_replace("Billing ", "", $error);
}
return $error;
}
add_filter( 'woocommerce_add_error', 'customize_wc_errors' );
Общее сообщение «Заполните обязательные поля»
Удалим в Оформлении перечень полей которые необходимо заполнить, и заменим их общей формулировкой «Заполните все обязательные поля».
add_action( 'woocommerce_after_checkout_validation', 'quadlayers', 9999, 2);
function quadlayers( $fields, $errors ){
// in case any validation errors
if( !empty( $errors->get_error_codes() ) ) {
// omit all existing error messages
foreach( $errors->get_error_codes() as $code ) {
$errors->remove( $code );
}
// display custom single error message
$errors->add( 'validation', 'Заполните все обязательные поля' );
}
}
[site-socialshare]
А как же удалить информационные сообщения на странице оформления заказа?