Как изменить сообщение "Вы должны быть авторизованы, чтобы оставить комментарий"

7 дек. 2014 г., 13:09:23
Просмотры: 16.1K
Голосов: 9

Некоторые пользователи отметили, что мой сайт вызывает у них затруднения. В связи с этим я хочу добавить ссылки на вход/регистрацию для незарегистрированных посетителей, чтобы они могли быстро авторизоваться, если захотят оставить комментарий.

Сейчас отображается просто текст "Вы должны быть авторизованы, чтобы оставить комментарий." без ссылки на вход. Где я могу отредактировать это сообщение и изменить его на "Вы должны Зарегистрироваться или Войти, чтобы оставить комментарий." с соответствующими ссылками?

В 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;
}

Этот код:

  1. Создает функцию для изменения сообщения с добавлением ссылок
  2. Использует стандартные функции WordPress для получения URL входа и регистрации
  3. Применяет фильтр к форме комментариев

После добавления этого кода незарегистрированные пользователи увидят сообщение с кликабельными ссылками вместо обычного текста.

0
Все ответы на вопрос 1
9
11

Вы можете попробовать изменить это с помощью фильтра 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.

7 дек. 2014 г. 13:59:26
Комментарии

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

Aidan Knight Aidan Knight
7 дек. 2014 г. 15:12:32

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

Brad Dalton Brad Dalton
7 февр. 2015 г. 11:22:59

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

birgire birgire
7 февр. 2015 г. 15:36:18

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

Brad Dalton Brad Dalton
7 февр. 2015 г. 15:37:22

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

birgire birgire
7 февр. 2015 г. 15:42:31

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

Brad Dalton Brad Dalton
7 февр. 2015 г. 15:44:08

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

birgire birgire
7 февр. 2015 г. 15:48:56

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

theKing theKing
28 дек. 2021 г. 14:43:23

Спасибо за обновление, @theKing

birgire birgire
28 дек. 2021 г. 15:09:06
Показать остальные 4 комментариев