ACF WordPress Соответствие пользователя с пользовательским типом записи

Вопрос или проблема

Я создал серию текстовых полей, поле пользователя и поле повторителя (с подполями), которые отображаются, когда я создаю новый пост в пользовательском типе поста “доставка” из административной панели. Я хочу привязать тип поста к конкретному пользователю (которого я выбираю из выпадающего списка поля пользователя).

Далее я хочу отображать значения подполей повторителя (например, данные поля повторителя) из поста, к которому прикреплен выбранный пользователь, на фронтенде моего сайта для текущего вошедшего пользователя. Если нет постов, назначенных конкретному пользователю, то должно отображаться сообщение, например, “Доставок не найдено для вашей учетной записи”.

add_shortcode('display_delivery_info', 'render_delivery_info');
function render_delivery_info() {

    $customer_delivery = wp_get_current_user();
    $customer_id_delivery = get_current_user_id();
    

if( have_rows('parcel_update_manager', 'user_', $customer_id_delivery ) ): ?>

    <ul>

    <?php while( have_rows('new_parcel_update', 'user_', $customer_id_delivery) ): the_row(); ?>

        <li><?php the_sub_field('delivery_status'); ?></li>

    <?php endwhile; ?>

    </ul>

<?php endif; 

}

В данный момент приведенный выше код не возвращает никаких данных из полей, которые я создал, и я не уверен, пропустил ли я какой-либо важный шаг ранее – нужно ли мне добавить действие, чтобы привязать пользователя к созданному мной пользовательскому типу поста, чтобы отобразить связанные данные на фронтенде моего сайта (чтобы мой пользователь увидел их, когда он вошел в систему)?

(Я новичок в ACF, поэтому сейчас просто следую рекомендациям документации по полям повторителей, пытаясь заставить это работать)

Спасибо!

Ответ или решение

Привязка пользователей к пользовательскому типу записи WordPress с использованием ACF

Ваш вопрос о привязке пользовательского типа записи "доставки" к конкретному пользователю через поле выбора пользователя и отображении данных на фронтенде является актуальным и требует системного подхода. Давайте разберем решение поэтапно.

Шаг 1: Настройка полей ACF

  1. Создайте пользовательский тип записи: Убедитесь, что тип записи "доставки" (deliveries) зарегистрирован. Это можно сделать с помощью функции register_post_type().

  2. Настройка пользовательских полей: В интерфейсе ACF создайте необходимые поля:

    • Поле "Пользователь" для выбора пользователя, которому будет принадлежать запись.
    • Повторитель (Repeater) с подполями для хранения данных о доставках.

Шаг 2: Привязка пользователя к записи

Чтобы привязать пользователя к записи, убедитесь, что при создании или редактировании записи "доставки" вы выбрали нужного пользователя в поле, которое вы настроили. ACF автоматически сохранит это значение в метаполях записи.

Шаг 3: Извлечение данных

Теперь необходимо извлечь данные для текущего пользователя, чтобы отобразить их на фронтенде. Ваш текущий код можно доработать с учетом следующих моментов:

  1. Запрос на получение данных: Вам нужно запросить записи типа "доставки", отфильтровав их по ID текущего пользователя.

  2. Отображение данных: Используйте циклы для отображения содержимого повторителя только для записей, принадлежащих текущему пользователю.

Вот пример, как можно изменить ваш код:

add_shortcode('display_delivery_info', 'render_delivery_info');
function render_delivery_info() {
    $current_user_id = get_current_user_id();

    // Запрос записей "доставки", связанных с текущим пользователем
    $args = array(
        'post_type' => 'deliveries',
        'meta_query' => array(
            array(
                'key' => 'user_field_name', // Замените на имя вашего пользовательского поля
                'value' => $current_user_id,
                'compare' => '='
            )
        )
    );

    $deliveries_query = new WP_Query($args);

    // Проверка наличия записей
    if ($deliveries_query->have_posts()) {
        echo '<ul>';
        while ($deliveries_query->have_posts()) {
            $deliveries_query->the_post();

            // Для каждой записи "доставки" проверяем наличие подполей
            if (have_rows('new_parcel_update')) {
                while (have_rows('new_parcel_update')) {
                    the_row();
                    echo '<li>' . get_sub_field('delivery_status') . '</li>'; // Замените на имя вашего подполе
                }
            }
        }
        echo '</ul>';
    } else {
        echo '<p>Доставок не найдено для вашей учетной записи.</p>';
    }

    // Сбрасываем данные после запроса
    wp_reset_postdata();
}

Шаг 4: Тестирование и отладка

  1. Проверьте наличие данных: Убедитесь, что для записей установлены корректные метаданные, а также что у текущего пользователя есть связанные записи "доставок".

  2. Тестируйте вывод: Зайдите как авторизированный пользователь и проверьте, отображаются ли доставки корректно.

Заключение

Следуя приведенным выше шагам, вы сможете успешно привязать записи пользовательского типа к конкретным пользователям и отобразить данные на фронтенде. Это обеспечит интеграцию вашего проекта и улучшит пользовательский опыт.

Если у вас возникнут дальнейшие вопросы по работе с ACF или кодом, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...