Вопрос или проблема
Я хотел бы предотвратить публикацию постов в категории по умолчанию с названием “affitti”. Я попробовал это, но без эффекта.
function prevent_default_category_publish($data, $postarr) {
if (in_category('affitti', $postarr['ID'])) {
wp_die('Ошибка: Посты не могут быть опубликованы с категорией по умолчанию.');
}
return $data;
}
add_filter('wp_insert_post_data', 'prevent_default_category_publish', 10, 2);
.
Ответ или решение
Чтобы предотвратить публикацию постов, отнесённых к категории по умолчанию "affitti", необходимо убедиться, что ваш код правильно обрабатывает условие и вызовы WordPress. В приведённом вами примере есть несколько аспектов, которые требуют доработки. Ниже приводится исправленный и подробный вариант, который поможет вам достичь необходимого результата.
Шаги для предотвращения публикации постов в категории "affitti"
-
Использование хука
wp_insert_post_data
: Этот хук позволяет изменить данные о посте перед вставкой в базу данных. Это именно то, что вам нужно для проверки категории. -
Проверка наrechte в условиях: Для корректной работы необходимо убедиться, что мы получаем правильный идентификатор поста и проверяем его категории.
-
С помощью функции
wp_die
: В случае, если пост принадлежит нежелательной категории, пользователю будет отображено сообщение об ошибке.
Исправленный код
function prevent_default_category_publish($data, $postarr) {
// Проверка, если это пост (не страница и не бесполезный тип поста)
if ($data['post_type'] === 'post') {
// Получаем ID поста
$post_id = $postarr['ID'];
// Проверяем, принадлежит ли пост к категории 'affitti'
if (has_category('affitti', $post_id)) {
// Отменяем публикацию и выводим сообщение об ошибке
wp_die('Ошибка: Публикация постов в категории "affitti" запрещена.');
}
}
return $data;
}
add_filter('wp_insert_post_data', 'prevent_default_category_publish', 10, 2);
Пояснения к коду
-
Проверка типа поста: Сначала мы проверяем, является ли пост стандартным (тип "post"). Это нужно, чтобы избежать ненужных проверок для других типов постов, таких как страницы.
-
Получение идентификатора поста: Мы получаем идентификатор поста через массив
$postarr
, что позволяет нам использовать его для проверки категорий. -
Функция
has_category
: Она проверяет принадлежность поста к указанной категории. Если пост принадлежит к категории "affitti", выводится сообщение, и пост не публикуется.
Оптимизация
-
SEO: Этот код не только защищает ваш сайт от нежелательных публикаций, но и улучшает пользовательский опыт. Пользователи сразу получают информацию о запрете, что уменьшает вероятность недовольства и негативных отзывов.
-
Безопасность: Убедитесь, что у вас установлены последние обновления WordPress, чтобы избежать уязвимостей и поддерживать безопасность вашего сайта.
Заключение
Этот подход обеспечит защиту от публикации постов в нежелательной категории. Регулярно проверяйте правильность работы кода после обновлений WordPress, так как изменения в ядре или взаимодействие с другими плагинами могут влиять на функционирование вашего решения.