Ошибка Invalid post type в WordPress встречается достаточно часто, особенно при работе с пользовательскими типами записей (custom post types) или при использовании различных плагинов. В этой статье разберем причины возникновения ошибки, а также покажем, как правильно регистрировать и использовать пользовательские типы записей, чтобы избежать данной проблемы.
Что означает ошибка Invalid post type и когда она возникает
Ошибка Invalid post type появляется, когда WordPress пытается получить доступ или выполнить действия с типом записи, который не зарегистрирован в системе. Например, если вы пытаетесь вывести записи типа, который не существует, или вызвать методы API с неправильным именем типа записи.
Это может случаться в следующих случаях:
- Опечатка в названии пользовательского типа записи.
- Тип записи зарегистрирован некорректно или в неправильное время (например, слишком поздно в инициализации WordPress).
- Плагин, который регистрирует тип записи, деактивирован или конфликтует с другими компонентами.
- Запросы к REST API с некорректным параметром типа записи.
Как правильно регистрировать пользовательский тип записи, чтобы избежать ошибки
Для регистрации пользовательского типа записи используется функция register_post_type(). Важно вызывать эту функцию на хук init, чтобы тип записи зарегистрировался до любой работы с ним.
Пример правильной регистрации пользовательского типа записи book:
add_action('init', 'wperror_register_post_type_book');
function wperror_register_post_type_book() {
$labels = array(
'name' => 'Книги',
'singular_name' => 'Книга',
'add_new' => 'Добавить книгу',
'add_new_item' => 'Добавить новую книгу',
'edit_item' => 'Редактировать книгу',
'new_item' => 'Новая книга',
'view_item' => 'Просмотр книги',
'search_items' => 'Поиск книг',
'not_found' => 'Книги не найдены',
'not_found_in_trash' => 'В корзине книги не найдены',
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'books'),
'supports' => array('title', 'editor', 'thumbnail'),
'show_in_rest' => true,
);
register_post_type('book', $args);
}Обратите внимание на параметр show_in_rest. Если вы планируете использовать REST API, он должен быть установлен в true, иначе тип записи не будет доступен через API, что также может приводить к ошибкам.
Проверка существования типа записи перед использованием
Если в вашем коде происходит выборка или работа с типом записи, всегда стоит проверить, зарегистрирован ли он в системе. Для этого существует функция post_type_exists().
if (post_type_exists('book')) {
// Работаем с типом записи 'book'
} else {
// Логируем ошибку или уведомляем, что тип записи не найден
}Такой подход поможет избежать фатальных ошибок и позволит корректно обрабатывать ситуации, когда тип записи отсутствует.
Исправляем ошибку Invalid post type в REST API запросах
Ошибка часто возникает при запросах к REST API с указанием некорректного параметра type или post_type. Чтобы проверить доступные типы записей через REST API, можно воспользоваться эндпоинтом:
https://ваш-сайт.ru/wp-json/wp/v2/types
Если нужный тип записи не отображается, значит он не зарегистрирован с параметром show_in_rest => true.
Пример запроса с правильным типом записи:
fetch('https://ваш-сайт.ru/wp-json/wp/v2/book')
.then(response => response.json())
.then(data => console.log(data));Плагины, которые помогают управлять пользовательскими типами записей и предотвращают ошибки
Если вы не хотите писать код вручную, можно использовать плагины для удобного создания и управления пользовательскими типами записей:
- Custom Post Type UI — удобный интерфейс для регистрации типов записей и таксономий.
- Clearfy Pro — оптимизационный плагин с возможностями управления типами записей и устранения ошибок.
Эти инструменты помогут избежать распространённых ошибок и упростят управление контентом.
Диагностика и отладка ошибки Invalid post type
Если ошибка возникает после установки плагина или темы, проверьте, не конфликтуют ли они с регистрацией типов записей. Для этого:
- Деактивируйте все плагины, кроме нужных, и проверьте исчезновение ошибки.
- Переключитесь на стандартную тему WordPress (например, Twenty Twenty-Three).
- Включите режим отладки в
wp-config.php(define('WP_DEBUG', true);) и посмотрите логи.
Если ошибка в REST API, используйте инструменты, например, Postman или браузер, чтобы проверить запросы и ответы сервера.
Пример функции для безопасного получения записей с проверкой типа записи
function wperror_get_posts_by_type($post_type, $args = array()) {
if (!post_type_exists($post_type)) {
error_log('Ошибка: тип записи ' . $post_type . ' не зарегистрирован');
return array();
}
$default_args = array(
'post_type' => $post_type,
'posts_per_page' => 10,
'post_status' => 'publish',
);
$query_args = array_merge($default_args, $args);
$query = new WP_Query($query_args);
return $query->posts;
}Используя эту функцию, вы защитите код от сбоев из-за неправильного типа записи и сможете гибко получать записи.
Выводы и рекомендации
Ошибка Invalid post type связана с неправильной регистрацией или использованием типов записей в WordPress. Чтобы её избежать:
- Всегда регистрируйте пользовательские типы на хук
init. - Проверяйте существование типа записи перед использованием.
- Убедитесь в правильных настройках параметров, особенно
show_in_rest. - Используйте проверенные плагины для создания типов записей.
- Тестируйте изменения в режиме отладки и минимальной конфигурации плагинов и тем.
Благодаря этим простым рекомендациям вы сможете избежать ошибки Invalid post type и обеспечить стабильную работу сайта на WordPress.