Вопрос или проблема
Пользовательский тип записи: Отключить одиночную страницу, но оставить архив
Я ищу лучший способ создавать пользовательские типы записей, которые используются только как архив для своих записей. Например, я хочу архив, показывающий всех сотрудников компании, но не хочу, чтобы у сотрудников была отдельная страница. Это случай, с которым я сталкивался несколько раз, но никогда не находил идеальное решение.
Основные требования:
- отключить одиночный просмотр записей;
- иметь возможность использовать archive.php темы в качестве архивной страницы;
- убрать ссылки на одиночный просмотр из WordPress.
Все методы, которые я нашел, не соответствуют всем вышеуказанным требованиям.
Установив фильтр с template_redirect
для одиночной страницы, ссылки на одиночные страницы все равно отображаются в WordPress (и, вероятно, в картах сайта и т.д.), что сбивает с толку конечного пользователя.
Установив publicly_queryable
в false
, ссылки в бэкэнде удаляются, но также исчезает и archive
страница, хотя has_archive
установлен в true
. Это можно решить, создав страницу с шаблоном, которая загружает записи из пользовательского типа записей. Но это тоже не идеально.
Я ‘поправил’ свою проблему с помощью кода ниже. Это функция, которая проверяет настройки типа записи. Если query_var
установлен в false
, кнопка просмотра удаляется из архива типа записи в бэкэнде.
Для моего случая это решает проблему. Больше нет ссылок на записи.
Причина, по которой используются как post_row_actions
, так и page_row_actions
, заключается в том, что пользовательские типы записей с hierarchical
, установленным в false
, обрабатываются первым, иначе — вторым.
function modify_list_row_actions( $actions, $post ) {
// Получаем объект типа записи
$post_type_object = get_post_type_object(get_post_type($post));
// проверяем, установлен ли query_var в 'false'
if ($post_type_object->query_var == false) {
// если да, удаляем ссылку 'просмотр'
unset($actions['view']);
}
return $actions;
}
add_filter( 'post_row_actions', 'modify_list_row_actions', 10, 2);
add_filter( 'page_row_actions', 'modify_list_row_actions', 10, 2);
Ответ или решение
Чтобы создать пользовательский тип записи в WordPress, который будет использоваться только для архива постов, но не будет иметь отдельные страницы, нужно следовать нескольким шагам. Это решение позволит вам полностью отключить визуализацию одиночных записей, сохранить доступ к архиву, а также удалить ссылки на одиночные страницы из админ-панели.
Шаг 1: Регистрация пользовательского типа записи
При регистрации пользовательского типа записи, вы должны настроить параметры, чтобы отключить отображение одиночных записей. Обратите внимание на параметры public
, publicly_queryable
и has_archive
.
function create_employee_post_type() {
register_post_type('employee',
array(
'labels' => array(
'name' => __('Employees'),
'singular_name' => __('Employee'),
),
'public' => true,
'publicly_queryable' => false, // Отключение одиночного отображения
'has_archive' => true, // Включение архива
'rewrite' => array('slug' => 'employees'),
'supports' => array('title', 'editor'), // Укажите поддерживаемые параметры
)
);
}
add_action('init', 'create_employee_post_type');
Шаг 2: Удаление ссылок на одиночные записи
Чтобы удалить ссылки на одиночные записи из админ-панели, вы можете использовать фильтр post_row_actions
. Вот функция, которая удаляет ссылку «Просмотр», если query_var
установлен в false
.
function modify_list_row_actions( $actions, $post ) {
// Получаем объект типа записи
$post_type_object = get_post_type_object(get_post_type($post));
// Проверяем, установлен ли query_var в false
if (isset($post_type_object->query_var) && $post_type_object->query_var === false) {
// Удаляем ссылку «Просмотр»
unset($actions['view']);
}
return $actions;
}
add_filter('post_row_actions', 'modify_list_row_actions', 10, 2);
add_filter('page_row_actions', 'modify_list_row_actions', 10, 2);
Шаг 3: Настройка карты сайта
Чтобы ссылки на одиночные записи не отображались в картах сайта, убедитесь, что плагин для SEO, который вы используете (например, Yoast SEO или All in One SEO Pack), не генерирует ссылки на одиночные записи данного типа. Обычно такие плагины имеют настройки для исключения пользовательских типов записей.
Шаг 4: Тестирование
Обязательно протестируйте созданный вами тип записи:
- Проверьте, что одиночные страницы не отображаются при попытке к ним перейти.
- Убедитесь, что архивная страница работает корректно и доступна по соответствующему URL (например,
/employees
). - Проверьте, что ссылки «Просмотр» не показываются в админ-панели.
Заключение
Следуя этим шагам, вы сможете создать пользовательский тип записи в WordPress, который будет служить только для архивирования, не имея при этом одиночных страниц, и не оставит путаницы для пользователей. Если возникнут дополнительные вопросы или проблемы, не стесняйтесь задавать их сообществу или в документации WordPress.