WordPress - получайте сообщения для каждого пользователя - PullRequest
1 голос
/ 18 июня 2020

Для проекта со студентами я использую WordPress с Timber (TWIG) + ACF

Для этого проекта я создал 3 пользовательских типа сообщений: dissertation, subject-imposed и subject-free

Каждый учащийся может создать только ОДИН пост по индивидуальному типу поста (я создал для этого ограничение).

Но теперь я хотел бы вывести список с именем каждого ученика и их 3 постами.

Список вроде этого:

Nicolas Mapple

  • Название произвольного типа сообщения dissertation + название произвольного типа сообщения + изображение (поле ACF)
  • Название произвольного типа сообщения subject-imposed + название произвольного типа сообщения + изображение (поле ACF)
  • Название произвольного типа сообщения subject-free + название произвольного типа сообщения + изображение (поле ACF)

Бренда Смит

  • Название произвольного типа сообщения dissertation + название произвольного типа сообщения + изображение (поле ACF)
  • Название произвольного типа сообщения subject-imposed + название произвольного типа сообщения + изображение (поле ACF)
  • Название произвольного типа сообщения subject-free + произвольное сообщение введите имя + изображение (поле ACF)

Для начала я попытался получить идентификатор каждого студента:

$students = get_users( array(
    'role'    => 'student',
    'orderby' => 'user_nicename',
    'order'   => 'ASC',
    'has_published_posts' => true
));

$students_id = array();

foreach ($students as $student) {
    $students_id[] = $student->ID;
}

После, чтобы получить все сообщения с этого идентификатора:

$get_posts_students = get_posts( array(
    'author' => $students_id,
    'post_type' => array('dissertation', 'subject-imposed', 'subject-free')
));

$context['list_of_students'] = $get_posts_students;

Я получил ошибку urldecode() expects parameter 1 to be string и массив, но со всеми сообщениями, не сгруппированными по студентам

Могу я получить помощь? Как сгруппировать сообщения по студентам?

ОБНОВЛЕНИЕ - лучше, но не полное (решение @disinfor):

С помощью get_posts в foreach я сгруппировал сообщения. Но У меня нет имени ученика в каждой группе .

$students = get_users( array(
    'role'    => 'student',
    'orderby' => 'rand',
    'has_published_posts' => true
));

$students_posts = array();

foreach ($students as $student) {
    $students_posts[] = get_posts( array(
        'author' => $student->ID,
        'post_type' => array('dissertation', 'subject-imposed', 'subject-free')
    ));
}

$context['students_posts'] = $students_posts;

У меня есть такой массив, мне бы хотелось, чтобы имя ученика в каждой группе: enter image description here

1 Ответ

0 голосов
/ 18 июня 2020

Вы можете включить имя студента в массив, используя get_user_meta():

foreach ($students as $student) {
    // Get the first name from user meta.
    $first_name = get_user_meta( $student->ID, 'first_name');
    // Get the last name from user meta.
    $last_name = get_user_meta( $student->ID, 'last_name');
    // Add a new array key for "name". The first name and last name return as arrays, so we use [0] to get the first index.
    $students_posts['name'] = $first_name[0] . ' ' . $last_name[0];
    $students_posts[] = get_posts( array(
        'author' => $student->ID,
        'post_type' => array('dissertation', 'subject-imposed', 'subject-free')
    ));
}

$context['students_posts'] = $students_posts;
...