Как изменить сообщение "Вы должны быть авторизованы, чтобы оставить комментарий"
Некоторые пользователи отметили, что мой сайт вызывает у них затруднения. В связи с этим я хочу добавить ссылки на вход/регистрацию для незарегистрированных посетителей, чтобы они могли быстро авторизоваться, если захотят оставить комментарий.
Сейчас отображается просто текст "Вы должны быть авторизованы, чтобы оставить комментарий." без ссылки на вход. Где я могу отредактировать это сообщение и изменить его на "Вы должны Зарегистрироваться или Войти, чтобы оставить комментарий." с соответствующими ссылками?
В 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?
Aidan Knight
А как насчет этой части кода wp_login_url( get_permalink() ) );
Brad Dalton
да, это тоже должно работать. Я просто хотел повторить, как это сделано в ядре. @BradDalton
birgire
Конечно, но зачем возвращать apply_filters при изменении стандартного вывода текста в дочерней теме?
Brad Dalton
Полагаю, если пользователь использовал этот фильтр для изменения постоянных ссылок (например, добавления дополнительных параметров запроса), было бы логично применить его и здесь?
birgire
Значит, нельзя использовать этот фильтр, если он не возвращается в вашей пользовательской функции фильтра?
Brad Dalton
вам не нужно добавлять собственный фильтр the_permalink, потому что такая настройка просто вернет значение get_permalink().
birgire
Вот ссылка на кодекс для comment_form_defaults https://developer.wordpress.org/reference/hooks/comment_form_defaults/
theKing