get_posts - получение всех записей по ID автора
Я хочу получить все записи определенного автора по его 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 );

Я немного запутался. Если вы хотите получить только один элемент из массива постов, вы можете сделать это следующим образом:
- 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).

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

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

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

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

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

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

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);
и просто выводим записи текущего пользователя в цикле

Работает на (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>' );
