Вопрос или проблема
Я хотел бы настроить страницу заказов и страницу загрузок в 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 они играют важную роль для настройки и модификации контента.
Существует два основных типа хуков:
- Actions (действия) — позволяют запускать определённые функции в разных местах темы или плагина.
- Filters (фильтры) — позволяют изменять данные перед их выводом или сохранением.
В контексте нашей задачи, мы сосредоточимся на использовании фильтров, так как это позволяет изменять текстовые сообщения без вмешательства в основной код.
Пример
Для изменения сообщения "No order has been made yet" и "No downloads available yet", мы будем использовать фильтры gettext
или специализированные фильтры WooCommerce, если таковые имеются.
- Изменение сообщения на странице заказов:
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;
}
- Изменение сообщения на странице загрузок:
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;
}
Применение
Шаги для реализации:
-
Резервное копирование: Сделайте резервную копию вашего файла
functions.php
, чтобы избежать потери данных в случае ошибки. -
Добавить код в
functions.php
:Откройте файл
functions.php
вашей дочерней темы и добавьте указанный выше код. Это гарантирует, что изменения будут сохранены, даже если тема будет обновлена. -
Тестирование: После добавления кода проверьте, отобразились ли изменения на страницах ваших заказов и загрузок. Откройте страницу "Мои заказы" при отсутствии заказов и страницу "Мои загрузки" при отсутствии доступных загрузок, чтобы убедиться, что сообщения изменились должным образом.
-
Оптимизация (по желанию): Если на вашем сайте используется многозначный массив строк для перевода, стоит включить проверку наличия строки внутри массива, чтобы снизить вероятность коллизий с другими строками.
Заключение
Используя фильтры gettext
, вы можете эффективно изменять тексты внутри WooCommerce, не редактируя исходные файлы плагина. Это подход является предпочтительным в среде разработки WordPress, поскольку он безопасен и защищает ваши изменения от перезаписи при обновлении плагина или тем. Кроме того, вы всегда можете удалить или изменить свой код в functions.php
, не полагаясь на прямое редактирование шаблонов.
Такой подход к изменению текстов на страницах заказов и загрузок позволит вам добавить необходимую гибкость и создать более адаптированный под нужды вашего бизнеса пользовательский интерфейс.