get_posts - получение всех записей по ID автора

12 авг. 2013 г., 02:24:11
Просмотры: 132K
Голосов: 15

Я хочу получить все записи определенного автора по его ID (текущего пользователя). Затем мне нужно выбрать первую запись, созданную этим пользователем (по возрастанию). Похоже, я использую неправильные аргументы в get_posts, не так ли? $current_user_posts всегда содержит массив со всеми записями блога в виде нескольких различных объектов WP_Post.

global $current_user;
get_currentuserinfo();                      

$args = array(
    'author'        =>  $current_user->ID, // Я также мог бы использовать $user_ID, верно?
    'orderby'       =>  'post_date',
    'order'         =>  'ASC' 
    );

// получаем его записи в порядке возрастания
$current_user_posts = get_posts( $args );
1
Комментарии

get_currentuserinfo() устарела начиная с версии 4.5.0. Замените на: $current_user = wp_get_current_user();

Christian Lescuyer Christian Lescuyer
15 мая 2017 г. 11:43:27
Все ответы на вопрос 3
8
27

Я немного запутался. Если вы хотите получить только один элемент из массива постов, вы можете сделать это следующим образом:

  • reset($current_user_posts) - первый пост
  • end($current_user_posts) - последний пост

Но если вы хотите получить только один пост с помощью get_posts(), вы можете использовать аргумент posts_per_page для ограничения результатов.

$args = array(
    'author'        =>  $current_user->ID,
    'orderby'       =>  'post_date',
    'order'         =>  'ASC',
    'posts_per_page' => 1
    );

Больше информации о параметрах вы можете найти на странице Справочник по классу WP Query (get_posts() принимает те же параметры, что и WP Query).

12 авг. 2013 г. 10:22:39
Комментарии

ваши $args работают хорошо, но я не понял ваш первый ответ. Как использовать $current_user_posts. Не могли бы вы показать?

kindo kindo
12 авг. 2013 г. 10:59:48

Если вы хотите вывести заголовок первого поста, используйте: echo $current_user_posts[0]['title']. 'title' - это ключ для нужных вам данных из массива. Полный список ключей можно получить с помощью print_r(array_keys($current_user_posts)).

"Как использовать" зависит от того, что вы хотите с этим сделать.

Marin Bînzari Marin Bînzari
12 авг. 2013 г. 11:17:18

получить id первого поста автора

kindo kindo
12 авг. 2013 г. 11:28:34

Вы можете получить ID с помощью: $current_user_posts[0]['ID']

Marin Bînzari Marin Bînzari
12 авг. 2013 г. 11:29:54

@kindo, помогло ли это? Это тот ответ, который вам был нужен?

Marin Bînzari Marin Bînzari
12 авг. 2013 г. 12:05:34

$current_user_posts[0]['ID'] не работает. Но первое решение с добавлением 'numberposts' или 'posts_per_page' (использовал равное значение) работает отлично. Спасибо.

kindo kindo
12 авг. 2013 г. 14:14:53

@kindo, извини, забыл что get_posts() возвращает массив объектов записей. Используй $current_user_posts[0]->ID

Marin Bînzari Marin Bînzari
12 авг. 2013 г. 14:29:24

Последнее решение теперь тоже работает.

kindo kindo
12 авг. 2013 г. 14:43:19
Показать остальные 3 комментариев
1
global $current_user;                     

$args = array(
  'author'        =>  $current_user->ID, 
  'orderby'       =>  'post_date',
  'order'         =>  'ASC',
  'posts_per_page' => -1 // без ограничений
);


$current_user_posts = get_posts( $args );
$total = count($current_user_posts);

и просто выводим записи текущего пользователя в цикле

9 сент. 2016 г. 06:46:58
Комментарии

Можете также объяснить, что делает приведённый выше код, в дополнение к его публикации? Это будет полезно, спасибо.

bravokeyl bravokeyl
9 сент. 2016 г. 08:11:19
0

Работает на (wp4.9.7)

 $user_id = get_current_user_id();
 $args=array(
 'post_type' => 'POSTTYPE',
 'post_status' => 'publish',
 'posts_per_page' => 1,
 'author' => $user_id
  );

$current_user_posts = get_posts( $args );
$total = count($current_user_posts);
wp_die( '<pre>' .  $total . '</pre>' );
8 июл. 2018 г. 14:13:40