Обязательное указание рубрики при создании поста в wordpress
В WordPress, при создании пользовательских таксономий, в админке при создании нового поста нет условия, чтобы обязательно выбралась рубрика и пост создается без рубрики.
Как сделать, чтобы была обязательная проверка на выбор рубрики при создании поста?
Ответы (1 шт):
Автор решения: GorodBox
→ Ссылка
в Function.php
function add_afisha_taxonomy_check_script() {
// Подключаем jQuery и наш скрипт
wp_enqueue_script('afisha-taxonomy-check', get_template_directory_uri() .
'/afisha-taxonomy-check.js', array('jquery'), null, true);
// Передаем URL для AJAX и тип записи
wp_localize_script('afisha-taxonomy-check', 'ajax_object', array(
'ajax_url' => admin_url('admin-ajax.php'),
'post_type' => 'afisha' // Передаем тип записи
));
}
add_action('admin_enqueue_scripts', 'add_afisha_taxonomy_check_script');
function check_type_afisha_taxonomy_ajax() {
// Проверяем, что у нас есть POST запрос с параметрами
if (isset($_POST['post_id']) && isset($_POST['taxonomy'])) {
$post_id = intval($_POST['post_id']);
$taxonomy = sanitize_text_field($_POST['taxonomy']);
// Получаем термины для таксономии
$terms = wp_get_post_terms($post_id, $taxonomy);
// Если таксономия пуста
if (empty($terms) || is_wp_error($terms)) {
wp_send_json_error('Вы должны указать хотя бы один термин в таксономии
"' . $taxonomy . '" для типа записи "afisha".');
} else {
wp_send_json_success();
}
}
// Если что-то пошло не так
wp_send_json_error('Ошибка в обработке запроса.');
}
add_action('wp_ajax_check_type_afisha_taxonomy',
'check_type_afisha_taxonomy_ajax');
в скрипт
jQuery(document).ready(function($) {
$('#publish').click(function(e) {
e.preventDefault(); // Останавливаем стандартное сохранение
var post_id = $('#post_ID').val(); // Получаем ID поста
var taxonomy = 'type_afisha'; // Название вашей таксономии
var post_type = ajax_object.post_type; // Получаем тип записи
// Проверяем, что тип записи именно "afisha"
if (post_type === 'afisha') {
// Отправляем AJAX запрос для проверки таксономии
$.ajax({
url: ajax_object.ajax_url,
type: 'POST',
data: {
action: 'check_type_afisha_taxonomy',
post_id: post_id,
taxonomy: taxonomy
},
success: function(response) {
if (response.success) {
// Если проверка прошла успешно, продолжаем сохранение
$('#publish').unbind('click').click();
} else {
// Если проверка не удалась, выводим ошибку
$('.custom-error').remove(); // Удаляем предыдущие ошибки
$('#post').before('<div class="error custom-error"><p>' + response.data + '</p></div>');
$('html, body').animate({ scrollTop: 0 }, 'slow'); // Прокручиваем страницу вверх
}
}
});
} else {
// Если это не тип записи "afisha", продолжаем сохранение
$('#publish').unbind('click').click();
}
});
});