Обязательное указание рубрики при создании поста в 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();
    }
});
});
→ Ссылка