Как создать архив автора только для определенной роли пользователя и показать связанные настраиваемые типы записей.

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

Сценарий

Я создал CPT, где беру ID заинтересованного лица в качестве пользовательского поля. Все заинтересованные лица на самом деле являются зарегистрированными пользователями WordPress с другой ролью stakeholders – потому что в какой-то момент мне нужно, чтобы они вошли в систему и публиковали свой собственный контент. Так что на самом деле я беру userID и передаю их в качестве пользовательского поля в этот CPT.

Теперь мне нужно создать архив авторов, специфичный для этой роли, где я могу иметь все посты этого CPT в соответствии с совпадением пользовательского поля.

Что я сделал

На самом деле, я не справился с этой задачей. Так что я создал пользовательский шаблон страницы: где я запрашивал всех пользователей с ролью stakeholders. Теперь они видны. Но теперь я сталкиваюсь с проблемой отображения постов, с которыми они связаны через их ID в качестве пользовательского поля.

Кроме этой мысли, я изменил свой маршрут на другой способ, публикуя в этот CPT, используя определенного пользователя для активации их архивов авторов. Так что я пытался, как администратор, опубликовать пост от имени другого пользователя, но, кроме администратора, другие пользователи не видны в выпадающем меню. Так что я не могу выбрать другого пользователя для поста, пока я вошел в систему. 🙁
выпадающее меню авторов

Что можно сделать

Что я могу представить или сделать это: на моем шаблоне страницы, по клику передать ID в URL, захватить его и показать посты, специфичные для этого ID на том же шаблоне страницы. Но такие параметры, как ?id=#, не являются SEO-дружественными, и мне нужно будет переписывать URL – но я никогда этого не пробовал, так что немного боюсь этого.

Вопрос

Какой правильный подход к осуществлению такого трюка?

Вы можете отображать посты пользователя, используя ID пользователя. Этот код может предоставить быструю демонстрацию того, как это сделать (я не тестировал этот код).

$user_id = $_GET['author_id'];
//Запрос
query_posts("author={$user_id}");

//Цикл
if ( have_posts() ) : while ( have_posts() ) : the_post();
     the_title();
echo "<br>";
     endwhile;

else:
      echo "Нет постов!";
endif;

//Сброс запроса
wp_reset_query();

Что касается SEO, вы можете использовать множество плагинов WordPress, которые предлагают эту функциональность. Yoast SEO – хороший плагин для этого.

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

Как создать архив автора только для определенной роли и отображать связанные пользовательские типы записей (CPT)

Ситуация

В вашей системе WordPress создан пользовательский тип записей (CPT), который включает в себя кастомное поле, содержащее идентификатор заинтересованного лица (stakeholder). Эти заинтересованные лица — зарегистрированные пользователи с определенной ролью stakeholders, которые в дальнейшем будут публиковать свой контент. Вам необходимо создать пользовательский архив авторов исключительно для пользователей с этой ролью, где будут отображаться все записи данного CPT, соответствующие указанному идентификатору.

Проблема

Вы уже видите всех пользователей с ролью stakeholders в вашем кастомном шаблоне страницы. Однако у вас возникли трудности с отображением записей, связанных с их идентификатором, который хранится в кастомном поле. Кроме того, вам предстоит решить проблему видимости других пользователей в выпадающем меню при создании записи, так как в нём отображаются только администраторы.

Решение

Для решения данной задачи вам потребуется несколько шагов:

Шаг 1: Создание пользовательского архива для stakeholders

Вам понадобится шаблон страницы, который будет принимать идентификатор пользователя и отображать связанные с ним записи. Вот примерный код, который поможет вам реализовать это:

// Получаем ID автора из URL, если он доступен
$user_id = isset($_GET['author_id']) ? intval($_GET['author_id']) : 0;

// Проверяем, если текущий пользователь имеет роль 'stakeholders'
if (user_can($user_id, 'stakeholders')) {
    // Создаем новый WP_Query для получения записей CPT по ID автора
    $args = array(
        'post_type' => 'ваш_CPT', // Замените на ваш CPT
        'meta_query' => array(
            array(
                'key' => 'stakeholder_id', // Название вашего кастомного поля
                'value' => $user_id,
                'compare' => '='
            ),
        ),
    );

    $query = new WP_Query($args);

    // Проверяем наличие записей
    if ($query->have_posts()) {
        while ($query->have_posts()) : $query->the_post();
            the_title('<h2>', '</h2>');
            the_content();
        endwhile;
    } else {
        echo "Нет записей для данного автора!";
    }

    // Сбрасываем данные запроса
    wp_reset_postdata();
} else {
    echo "У вас недостаточно прав для доступа к этому архиву.";
}

Шаг 2: SEO-дружественные URL

Чтобы избежать использования не SEO-дружественных URL, таких как ?id=#, вы можете реализовать человекопонятные URL с помощью возможности создания пользовательских пермалайнов. Например, вы можете добавить следующий код в файл functions.php вашей темы:

function custom_rewrite_rule() {
    add_rewrite_rule('stakeholder/([^/]*)/?', 'index.php?pagename=ваша_страница&author_id=$matches[1]', 'top');
}
add_action('init', 'custom_rewrite_rule');

function custom_rewrite_tag() {
    add_rewrite_tag('%author_id%', '([^&]+)');
}
add_action('init', 'custom_rewrite_tag');

Не забудьте зайти в настройки постоянных ссылок в админке и нажать "Сохранить изменения", чтобы обновить правила перезаписи.

Шаг 3: Готовность к созданию записей от имени stakeholders

Если вы хотите позволить пользователям с ролью stakeholders создавать записи, вам необходимо использовать плагин, такой как User Role Editor, для управления правами пользователей. Проверьте, чтобы пользователи с ролью stakeholders имели право edit_posts и publish_posts.

Заключение

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

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

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