Настройка сообщений на странице заказа и скачивания Woocommerce с помощью хуков.

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

Я хотел бы настроить страницу заказов и страницу загрузок в WooCommerce.

Я знаю, что могу вручную заменить сообщение Заказов еще не было., создав папку с именем woocommerce в моей дочерней теме, но я действительно хочу сделать это, используя хуки WooCommerce в файле functions.php моей темы. Но как я могу это сделать?

Исходный код (/myaccount/orders.php) следующий:

<?php wc_print_notice( esc_html__( 'Заказов еще не было.', 'woocommerce' ) . ' <a class="woocommerce-Button wc-forward button' . esc_attr( $wp_button_class ) . '" href="' . esc_url( apply_filters( 'woocommerce_return_to_shop_redirect', wc_get_page_permalink( 'shop' ) ) ) . '">' . esc_html__( 'Просмотреть продукты', 'woocommerce' ) . '</a>', 'notice' ); // phpcs:ignore WooCommerce.Commenting.CommentHooks.MissingHookComment ?>

Мне нужно изменить сообщение: Заказов еще не было. на:

"<p class="order-warning"><strong>Заказов еще не было.</strong> Платеж еще не был произведен или не удался. После успешного завершения транзакции ваш заказ будет отображен на этой странице.</p>"

А исходный код (/myaccount/downloads.php) следующий:

<?php

$wp_button_class = wc_wp_theme_get_element_class_name( 'button' ) ? ' ' . wc_wp_theme_get_element_class_name( 'button' ) : '';
wc_print_notice( esc_html__( 'Загрузок пока нет.', 'woocommerce' ) . ' <a class="button wc-forward' . esc_attr( $wp_button_class ) . '" href="' . esc_url( apply_filters( 'woocommerce_return_to_shop_redirect', wc_get_page_permalink( 'shop' ) ) ) . '">' . esc_html__( 'Просмотреть продукты', 'woocommerce' ) . '</a>', 'notice' ); // phpcs:ignore WooCommerce.Commenting.CommentHooks.MissingHookComment 
?>

Мне нужно изменить сообщение: Загрузок пока нет. на:

"<p class="order-warning"><strong>Загрузок пока нет.</strong> Платеж еще не был произведен или не удался. После успешного завершения транзакции ваш заказ будет отображен на этой странице.</p>"

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

Для настройки страниц заказов и загрузок в WooCommerce посредством использования хуков, необходимо чётко понимать принцип работы WordPress и WooCommerce с темами и их функционалом. Давайте рассмотрим, как можно переписать сообщения на страницах заказов и загрузок, использовав подходящие хуки.

Теория

Hooks (хуки) — это механизм в WordPress, позволяющий разработчикам изменять или добавлять функциональность, не изменяя исходный код ядра. В WooCommerce они играют важную роль для настройки и модификации контента.

Существует два основных типа хуков:

  1. Actions (действия) — позволяют запускать определённые функции в разных местах темы или плагина.
  2. Filters (фильтры) — позволяют изменять данные перед их выводом или сохранением.

В контексте нашей задачи, мы сосредоточимся на использовании фильтров, так как это позволяет изменять текстовые сообщения без вмешательства в основной код.

Пример

Для изменения сообщения "No order has been made yet" и "No downloads available yet", мы будем использовать фильтры gettext или специализированные фильтры WooCommerce, если таковые имеются.

  1. Изменение сообщения на странице заказов:
add_filter( 'gettext', 'custom_no_orders_message', 20, 3 );
function custom_no_orders_message( $translated_text, $text, $domain ) {
    if ( 'woocommerce' === $domain ) {
        switch ( $translated_text ) {
            case 'No order has been made yet.':
                $translated_text = '<p class="order-warning"><strong>No order has been made yet.</strong> The payment has not been made yet or has failed. Once the transaction is successfully completed, your order will be visible on this page.</p>';
                break;
        }
    }
    return $translated_text;
}
  1. Изменение сообщения на странице загрузок:
add_filter( 'gettext', 'custom_no_downloads_message', 20, 3 );
function custom_no_downloads_message( $translated_text, $text, $domain ) {
    if ( 'woocommerce' === $domain ) {
        switch ( $translated_text ) {
            case 'No downloads available yet.':
                $translated_text = '<p class="order-warning"><strong>No downloads available yet.</strong> The payment has not been made yet or has failed. Once the transaction is successfully completed, your order will be visible on this page.</p>';
                break;
        }
    }
    return $translated_text;
}

Применение

Шаги для реализации:

  1. Резервное копирование: Сделайте резервную копию вашего файла functions.php, чтобы избежать потери данных в случае ошибки.

  2. Добавить код в functions.php:

    Откройте файл functions.php вашей дочерней темы и добавьте указанный выше код. Это гарантирует, что изменения будут сохранены, даже если тема будет обновлена.

  3. Тестирование: После добавления кода проверьте, отобразились ли изменения на страницах ваших заказов и загрузок. Откройте страницу "Мои заказы" при отсутствии заказов и страницу "Мои загрузки" при отсутствии доступных загрузок, чтобы убедиться, что сообщения изменились должным образом.

  4. Оптимизация (по желанию): Если на вашем сайте используется многозначный массив строк для перевода, стоит включить проверку наличия строки внутри массива, чтобы снизить вероятность коллизий с другими строками.

Заключение

Используя фильтры gettext, вы можете эффективно изменять тексты внутри WooCommerce, не редактируя исходные файлы плагина. Это подход является предпочтительным в среде разработки WordPress, поскольку он безопасен и защищает ваши изменения от перезаписи при обновлении плагина или тем. Кроме того, вы всегда можете удалить или изменить свой код в functions.php, не полагаясь на прямое редактирование шаблонов.

Такой подход к изменению текстов на страницах заказов и загрузок позволит вам добавить необходимую гибкость и создать более адаптированный под нужды вашего бизнеса пользовательский интерфейс.

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

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