- Вопрос или проблема
- Сценарий
- Что я сделал
- Что можно сделать
- Вопрос
- Ответ или решение
- Как создать архив автора только для определенной роли и отображать связанные пользовательские типы записей (CPT)
- Ситуация
- Проблема
- Решение
- Шаг 1: Создание пользовательского архива для stakeholders
- Шаг 2: SEO-дружественные URL
- Шаг 3: Готовность к созданию записей от имени stakeholders
- Заключение
Вопрос или проблема
Сценарий
Я создал 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. Это создаст более удобный и интуитивно понятный интерфейс для пользователей, а также повысит видимость ваших страниц в поисковых системах.