Как изменить сообщение "Вы должны быть авторизованы, чтобы оставить комментарий"
Некоторые пользователи отметили, что мой сайт вызывает у них затруднения. В связи с этим я хочу добавить ссылки на вход/регистрацию для незарегистрированных посетителей, чтобы они могли быстро авторизоваться, если захотят оставить комментарий.
Сейчас отображается просто текст "Вы должны быть авторизованы, чтобы оставить комментарий." без ссылки на вход. Где я могу отредактировать это сообщение и изменить его на "Вы должны Зарегистрироваться или Войти, чтобы оставить комментарий." с соответствующими ссылками?
В WordPress вы можете изменить это сообщение, добавив следующий код в файл functions.php вашей темы:
// Изменяем стандартное сообщение о необходимости авторизации
function change_must_login_message( $message ) {
$login_url = wp_login_url( get_permalink() );
$register_url = wp_registration_url();
$message = sprintf( 'Вы должны <a href="%s">Зарегистрироваться</a> или <a href="%s">Войти</a>, чтобы оставить комментарий.',
esc_url( $register_url ),
esc_url( $login_url )
);
return $message;
}
add_filter( 'comment_form_defaults', 'modify_comment_form_defaults' );
function modify_comment_form_defaults( $defaults ) {
$defaults['must_log_in'] = change_must_login_message( $defaults['must_log_in'] );
return $defaults;
}
Этот код:
- Создает функцию для изменения сообщения с добавлением ссылок
- Использует стандартные функции WordPress для получения URL входа и регистрации
- Применяет фильтр к форме комментариев
После добавления этого кода незарегистрированные пользователи увидят сообщение с кликабельными ссылками вместо обычного текста.

Вы можете попробовать изменить это с помощью фильтра comment_form_defaults
:
/**
* Изменяем текст "must_log_in" в форме комментариев.
*
* @see http://wordpress.stackexchange.com/a/170492/26350
*/
add_filter( 'comment_form_defaults', function( $fields ) {
$fields['must_log_in'] = sprintf(
__( '<p class="must-log-in">
Вы должны <a href="%s">зарегистрироваться</a> или
<a href="%s">войти</a>, чтобы оставить комментарий.</p>'
),
wp_registration_url(),
wp_login_url( apply_filters( 'the_permalink', get_permalink() ) )
);
return $fields;
});
где мы используем основные функции wp_registration_url()
и wp_login_url()
.
Примечание: информация о фильтре comment_form_defaults
отсутствует в Codex.

Спасибо за помощь. Извините за глупый вопрос, но куда это вставить, в functions.php?

А как насчет этой части кода wp_login_url( get_permalink() ) );

да, это тоже должно работать. Я просто хотел повторить, как это сделано в ядре. @BradDalton

Конечно, но зачем возвращать apply_filters при изменении стандартного вывода текста в дочерней теме?

Полагаю, если пользователь использовал этот фильтр для изменения постоянных ссылок (например, добавления дополнительных параметров запроса), было бы логично применить его и здесь?

Значит, нельзя использовать этот фильтр, если он не возвращается в вашей пользовательской функции фильтра?

вам не нужно добавлять собственный фильтр the_permalink
, потому что такая настройка просто вернет значение get_permalink()
.

Вот ссылка на кодекс для comment_form_defaults
https://developer.wordpress.org/reference/hooks/comment_form_defaults/
