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

Как узнать ID автора на странице архива автора?

Подскажите, пожалуйста, как сделать, чтобы пользователь на своей странице с архивом записей: http://mysite.ru/blogs/author/username видел определенную информацию, а другие эту информацию на его странице не видели?

Мне это нужно для личного кабинета пользователя.

0
Гость год назад
  • 1
    Kama4464

    Ответ:

    На странице архива автора текущий объект запроса содержит все данные пользователя этой страницы автора...

    См. get_queried_object()

    Т.е. если нужно проверить находиться ли текущий пользователь на своей странице со списком постов, делаем так:

    // авторизован и на странице автора
    if( is_author() && is_user_logged_in() ){
    
    	if(  wp_get_current_user()->ID == get_queried_object()->ID ){
    		// текущий юзер на своей странице автора
    	}
    	else {
    		// текущий юзер на чужой странице автора
    	}
    }

    Кол-во записей пользователя можно получить функцией count_user_posts()

    Юрий год назад

    За ответ спасибо, это проще чем я сделал.
    А как все таки правильно узнать ID пользователя на странице которого я нахожусь?
    Вот так ведь то же неправильно

    $userLogin = basename($_SERVER['REQUEST_URI']);
    $userQQQ = get_user_by('login', $userLogin);
    Kama год назад

    Вот так ведь то же неправильно

    Да, это мини-извращение...

    Как я написал в коде выше:

    // получим ID автора на странице автора
    echo get_queried_object()->ID; //> 5

    Можно еще так

    echo get_query_var('author'); //> 5
    echo get_query_var('author_name'); //> yasha

    Это пожалуй один из самых грамотных способов.

    Комментировать
  • 0
    stepan1187 cайт: www.weblancer.net/users/stepanko/?affili...

    Если пользователь залогин, то можно узнать его ID, емайл и т.д

    Так вот на странице http://mysite.ru/blogs/author/username делайте проверку.

    Ведь на той странице выводятся данные пользователя username, и у этого username есть свой емайл ID и т.д .

    Сравнивайте емайлы (ID) - и если они совпадают, значит САМ автор смотрит информацию о себе.

    Не забывайте ставить "плюс", говорить спасибо.

    Юрий год назад

    В теории я это знаю и понимаю, как на практике это сделать, какой код написать чтоб можно было сравнить?
    Вот это

    get_current_user_id()

    id текущего пользователя, с чем нужно его сравнить?

    stepan год назад

    http://mysite.ru/userspage/?userid=1

    Вот так к примеру должна выглядеть страница профиля.

    При переходе на нее Вы сможете сравнить ИД текущ. юзера с ИД, который передается в урл.

    Юрий год назад

    С такой ссылкой я могу сравнить, в этом нет проблем. Мне надо вытащить id пользователя "username" из такой ссылки http://mysite.ru/blogs/author/username. Я знаю, что это можно сделать, но вот как.

    stepan год назад

    get_user_by()
    по полю slug

    Должно сработать.

    Юрий год назад

    С get_user_by() у меня не получилось, но натолкнуло на мысль, а если сделать так

    $url = parse_url($_SERVER['REQUEST_URI']);
    $current_user = wp_get_current_user();
    if($url[path] == '/blogs/author/'.$current_user->user_login) {
    	// Делаем вот это
    } else {
    	// Делаем по другому
    }

    это нормально или совсем неправильно?

    stepan год назад

    Я считаю нормальным вариантом.

    Юрий год назад

    Этот вариант мне помог определить у себя я или у другого пользователя, но вот как определить id пользователя у которого я нахожусь?

    stepan год назад
    '/blogs/author/'.$current_user->user_login

    Сейчас проверю у себя и отпишусь. Разве нельзя узнать ID пользователя зная его
    user_login

    stepan год назад

    Проверять не пришлось.

    Функция: http://wp-kama.ru/function/get_user_by

    get_user_by( string $field, int|string $value )
    $field
    (string) (Required) The field to retrieve the user 
    with. id | ID | slug | email | login.

    Как видно, по логину МОЖНО узнать пользователя, в том числе и его ID

    Юрий год назад
    $current_user->user_login

    Это логин текущего пользователя

    Пока сделал вот так

    $userLogin = basename($_SERVER['REQUEST_URI']);
    $userQQQ = get_user_by('login', $userLogin);
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Регистрация. Вход.