Вопрос или проблема
Получил способ изменить метки повсюду для типа поста “Пост”. Для сайта клиента мне нужно использовать комментарии WordPress. Просто нужно изменить метку с “Комментарии/Комментарий” на “Обзор” повсюду. Но где для типа поста “Пост” мы можем использовать $wp_post_types;
, что мы можем использовать для комментариев?
Я пробовал с $wp_comments
, $wp_comment
и т. д., но не удалось.
Как я могу это сделать?
ПС: Я не хочу способа перевода всех строк и т. д. Просто нужен способ, как в ссылке выше. И не только метки меню, мне нужно изменить их повсюду, чтобы на странице написания поста в чекбоксе с надписью “Все комментарии” также изменялось.
Вы можете попробовать фильтр gettext
.
Согласно Codex:
Этот фильтр применяется к переведенному тексту международными функциями (__(), _e(), _x() и т. д.). Этот фильтр всегда применяется, даже если интернационализация не в действии и если домен текста не был загружен.
Вот пример:
function custom_gettext( $translated_text, $untranslated_text, $domain )
{
if( FALSE !== stripos( $untranslated_text, 'comment' ) )
{
$translated_text = str_ireplace( 'Comment', 'Review', $untranslated_text ) ;
}
return $translated_text;
}
is_admin() && add_filter( 'gettext', 'custom_gettext', 99, 3 );
чтобы изменить строки, содержащие Comment
, на Review
(не учитывая регистр).
Вы можете настроить замены по своим нуждам.
Более грубый простой метод взлома – использовать jQuery, чтобы найти целевую строку Comment
и заменить ее на Review
. Для этого вы можете ознакомится с этой темой:
https://stackoverflow.com/questions/8146648/jquery-find-text-and-replace
Пример:
$("#container p:contains('Comment')").text("Review");
Чтобы включить этот скрипт в заголовки WordPress, вы можете добавить действие и функцию в файл functions.php вашей темы. Для получения более подробной информации, ознакомьтесь с:
http://codex.wordpress.org/Plugin_API/Action_Reference/wp_head
http://codex.wordpress.org/Function_Reference/wp_enqueue_script
Единственный способ изменить все места со словом “комментарий/комментарии” на “обзор/обзоры” – это создать новый файл перевода для ядра, соответствующих плагинов (akismet) и темы. Их просто слишком много, чтобы справляться каким-либо другим способом.
Разница между комментариями и постами в том, что вы не можете регистрировать новые типы комментариев (нет API для этого), и именно поэтому нет простого способа удалить комментарии тем же образом, как были удалены посты в вопросе, на который вы указали.
Ответ или решение
Чтобы изменить название "Комментарии" на "Ревью" по всей установке WordPress без использования перевода, вы можете воспользоваться фильтром gettext
. Этот подход обеспечивает гибкость, позволяя изменять строки, выводимые по всему сайту, без необходимости редактирования исходного кода или создания переводов.
Шаги для реализации:
-
Открытие файла functions.php:
Вам нужно добавить код в файлfunctions.php
вашей активной темы. Это можно сделать через админ-панель WordPress, перейдя в раздел "Внешний вид" → "Редактор" и выбрав файлfunctions.php
. -
Использование фильтра gettext:
Вставьте следующий код в файлfunctions.php
:function custom_gettext( $translated_text, $untranslated_text, $domain ) { if ( FALSE !== stripos( $untranslated_text, 'comment' ) ) { $translated_text = str_ireplace( 'Comment', 'Review', $translated_text ); $translated_text = str_ireplace( 'Comments', 'Reviews', $translated_text ); } return $translated_text; } add_filter( 'gettext', 'custom_gettext', 99, 3 );
В этом коде проверяется, содержит ли
$untranslated_text
слово "comment". Если да, то оно заменяется на "review". Также добавлена замена множественного числа – "Comments" на "Reviews", чтобы изменения охватывали все возможные варианты.
Как это работает
Фильтр gettext
обрабатывает все строки, которые были подготовлены для перевода с помощью функций интернационализации, таких как __()
, _e()
и другие. Мы добавляем свой собственный фильтр, который проверяет каждую строку на наличие слова "comment" и заменяет его.
Альтернативный метод: jQuery
Если вы хотите использовать более "бревенчатый" подход, вы можете заменить текст непосредственно с помощью JavaScript. С помощью jQuery ваш код будет выглядеть так:
jQuery(document).ready(function($) {
$("body:contains('Comment')").each(function() {
$(this).html($(this).html().replace(/Comment/g, 'Review'));
$(this).html($(this).html().replace(/Comments/g, 'Reviews'));
});
});
Этот код можно вставить через элемент <script>
в head
вашей темы, используя хук wp_head
:
add_action('wp_head', 'add_custom_script');
function add_custom_script() {
?>
<script>
jQuery(document).ready(function($) {
$("body:contains('Comment')").each(function() {
$(this).html($(this).html().replace(/Comment/g, 'Review'));
$(this).html($(this).html().replace(/Comments/g, 'Reviews'));
});
});
</script>
<?php
}
Замечания:
- Тестирование: После добавления кода, рекомендуется протестировать изменения на сайте, чтобы убедиться, что все строки заменены корректно.
- Учитывайте производительность: Частые замены текстов через JavaScript могут повлиять на производительность, особенно на больших страницах.
- Обновления: При обновлении WordPress или темы, не забудьте проверить, что custom-код не был затерт.
С помощью этих подходов вы сможете полностью заменить название "Комментарии" на "Ревью" на вашем сайте WordPress без использования систем перевода.