WordPress как на ладони

Как получить ID автора комментария?

Столкнулся с такой проблемой.

Хочу, чтобы в статье у каждого комментатора возле его ника выводился его авторский ID (не самого комментария, а автора, они все зарегистрированы). Допустим, есть Олег Петрович, у него ID при регистрации выдан был 587, вот эту цифру требуется вывести.

И вторая сопутствующая проблема:

Чтобы при выводе его имени, получалась ссылка, ведущая на его профиль на сайте. Сейчас у меня сделано, что ссылка ведет на профиль и он отображается, если логин совпадает с отображаемым именем. Но если автор вместо логина выводит что-то другое, то я получаю 404 ошибку sad.

0
campusboy
9.4 года назад 4752
  • 2

    Получить ID комментатора можно так:

    echo $GLOBALS['comment']->user_id;

    Профиль на сайте:
    Можно решить так - получаем ID пользователя и через функцию get_userdata получаем логин пользователя ('user_login'). Далее формируем ссылку на профиль уже исходя из логина пользователя.

    $user_id = $GLOBALS['comment']->user_id;
    $user_info = get_userdata($user_id);
    $username = $user_info->user_login;
    campusboy 9.4 года назад

    Спасибо большое, оба кода работают. Как говорится, то что доктор прописал! Ниже WP_Panda предложил другой способ вывода ID автора. Как Вы думаете, какой из этих способов предпочтительнее (скорость, безопасность)?

    WP_Panda 9.4 года назад

    С точки зрения API движка мой вариант правильнее

    WP_Panda 9.4 года назад

    опять же не надо всех этих прыжков , можно сделать так

    $args = get_comment(get_comment_ID());
    $user_id = $args->user_id;
    $user_name = $args->comment_author;
    Kama 9.4 года назад

    Не вижу смысла вызвать дополнительные функции для получения данных, которые уже есть. Даже не смотря на то, что get_comment(), get_comment_ID() и т.д. работаеют с кэшем, все равно это лишние ресурсы на ровном месте.

    Не знал, что циклы комментариев записывают комменты в глобальную переменную. $GLOBALS['comment'].

    Я бы сделал так: у вас есть цикл комментариев, в нем для каждого комментария отпределяется переменная, обычно, $comment, которая содержит данные комментария. В этом ответе такой переменной является $GLOBALS['comment']. Отсюда, используйте такой код в цикле комментариев:

    // ID пользователя на сайте, который оставил текущий коммент
    $comment->user_id;
    
    // логин пользователя на сайте, который оставил текущий коммент
    $comment->comment_author;
    campusboy 9.4 года назад
    $comment->user_id;

    Да, супер, то что нужно!

    $comment->comment_author;

    А вот это не то, так как выводится не логин автора комментария, а его ник (как он указал отображать его на сайте).

    Комментировать
  • 2
    WP_Panda166 wp-panda.com
    $id = get_comment(get_comment_ID())->user_id
    campusboy 9.4 года назад

    Большое спасибо, код абсолютно рабочий. Подскажите, в первом комментарии автор дал другой вариант решения проблемы.Как Вы думаете, какой из этих способов предпочтительнее (скорость, безопасность)?

    Комментировать
  • 1
    Kama9619

    Допустим, у вас есть цикл комментариев, в нем для каждого комментария определяется переменная, обычно, $comment, которая содержит данные комментария. Используйте такой код в цикле комментариев:

    // ID пользователя на сайте, который оставил текущий коммент
    $user_id = $comment->user_id;
    
    // логин пользователя на сайте, который оставил текущий коммент
    $user_login = get_userdata( $comment->user_id )->user_login;

    П.С. Вариант с get_userdata() будет делать 2 дополнительных запроса к БД. Учитывая это я бы порекомендовал сделать доступность страницы профиля по ID пользователя.

    campusboy 9.4 года назад

    Разобрался, мне нужно получить user_nicename.
    Попробовал по аналогии вот так и не вышло:
    user_nicename?>
    Пришлось код первого комментатора чуть доработать. Сменить $username = $user_info->user_login на $username = $user_info->user_nicename и стало всё отлично, идеально smile

    Учитывая это я бы порекомендовал сделать доступность страницы профиля по ID пользователя.

    Проанализировал страницу автор.php и не понял, как она работает у меня сайте (почему принимает именно user_nicename).

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация