Ограничьте термины таксономии, добавляемые к пользовательскому типу записи

Вопрос или проблема

Я создал пользовательский тип записи и пользовательскую таксономию.

В WP Admin, как я могу ограничить количество терминов таксономии, которые добавляются к пользовательскому типу записи? Я хочу добавить не более одного тега в запись. После добавления одного тега, добавление дополнительных должно быть отключено или должно появиться сообщение.

Любая помощь будет очень полезна.

Вы можете сделать это с помощью jQuery очень легко. Подсчитайте свои теги и ограничьте их!

  1. C = количество элементов
  2. L = ваше предельное количество
  3. если (C==L) добавьте класс “disable” к div
$(document).ready(function(){
    var L = 10;
    var $items = $('#post_tag .tagchecklist span');
    if($items.length == L){
        $("#post_tag").addClass("disable"); // или alert("ok")
    }
});

Чтобы ограничить количество терминов таксономии, которые могут быть добавлены к пользовательскому типу записи в WordPress, вы можете использовать комбинацию JS и WP

    function limit_taxonomy_terms($taxonomy, $post_type, $limit = 1) {
    // JavaScript для административного интерфейса
    add_action('admin_footer', function() use ($taxonomy, $post_type, $limit) {
        global $pagenow;

        // Проверьте, находимся ли мы на странице редактирования указанного типа записи
        if ($pagenow === 'post.php' && isset($_GET['post']) && get_post_type($_GET['post']) === $post_type) {
            ?>
            <script type="text/javascript">
                jQuery(document).ready(function($) {
                    // Проверяем, когда термин добавляется к таксономии
                    $(document).on('change', '#<?php echo $taxonomy; ?>', function() {
                        var termCount = $(this).find('option:selected').length;
                        // Если достигнут максимальный лимит, отключите поле ввода или отобразите сообщение
                        if (termCount >= <?php echo $limit; ?>) {
                            // Отключите поле ввода или отобразите сообщение
                            // Например:
                            // $(this).prop('disabled', true);
                            // или
                             alert('Вы можете добавить только <?php echo $limit; ?> терминов.');
                        }
                    });
                });
            </script>
            <?php
        }
    });


    // Проверка на стороне сервера для ограничения назначения терминов

    add_action('save_post', function($post_id) use ($taxonomy, $limit) {
        $terms = wp_get_post_terms($post_id, $taxonomy);
        $term_count = count($terms);
        // Если количество назначенных терминов превышает лимит, отобразите сообщение об ошибке
        if ($term_count > $limit) {
            wp_die(sprintf(__('Вы можете назначить только %d термин(ов) для этой записи.'), $limit));
        }
    }, 10, 1);
}

// Пример использования: ограничить терминов таксономии 'category' для типа записи 'post' до 2 терминов

limit_taxonomy_terms('category', 'post', 2);

.

Ответ или решение

Чтобы ограничить количество таксономических терминов, которые могут быть добавлены к пользовательскому типу записей в WordPress, можно использовать комбинацию JavaScript и PHP. В этой статье мы подробно рассмотрим, как реализовать это ограничение, чтобы пользователь мог добавлять не более одного термина к указанному кастомному типу записей.

Шаг 1: Создание функции для ограничения таксономических терминов

Первый этап заключается в написании функции, которая будет ограничивать количество добавляемых терминов. Вот пример такой функции:

function limit_taxonomy_terms($taxonomy, $post_type, $limit = 1) {
    // JavaScript для админ-панели
    add_action('admin_footer', function() use ($taxonomy, $post_type, $limit) {
        global $pagenow;

        // Проверяем, находимся ли мы на странице редактирования нужного типа записи
        if ($pagenow === 'post.php' && isset($_GET['post']) && get_post_type($_GET['post']) === $post_type) {
            ?>
            <script type="text/javascript">
                jQuery(document).ready(function($) {
                    $(document).on('change', '#<?php echo $taxonomy; ?>', function() {
                        var termCount = $(this).find('option:selected').length;
                        // Если достигаем максимального лимита, отображаем сообщение
                        if (termCount >= <?php echo $limit; ?>) {
                            alert('Вы можете добавить не более <?php echo $limit; ?> термина(ов).');
                        }
                    });
                });
            </script>
            <?php
        }
    });

    // Валидация на сервере для ограничения назначения терминов
    add_action('save_post', function($post_id) use ($taxonomy, $limit) {
        $terms = wp_get_post_terms($post_id, $taxonomy);
        $term_count = count($terms);
        // Если количество назначенных терминов превышает лимит, выводим сообщение об ошибке
        if ($term_count > $limit) {
            wp_die(sprintf(__('Вы можете назначить не более %d термина(ов) для этой записи.'), $limit));
        }
    }, 10, 1);
}

// Пример использования: Ограничиваем таксономию 'tag' для типа записи 'post' до 1 термина
limit_taxonomy_terms('post_tag', 'post', 1);

Шаг 2: Интеграция функции в ваш проект

Чтобы использовать приведённый выше код, просто добавьте его в файл вашего плагина или в файл functions.php вашей темы. Убедитесь, что вы корректно определили параметры функции, заменив значения для $taxonomy и $post_type согласно вашей структуре данных.

Шаг 3: Проверка работы ограничения

После интеграции функции, перейдите в админ-панель WordPress, создайте или отредактируйте запись, и попробуйте добавить таксономические термины. После достижения заданного лимита (в данном случае одного термина), вы должны увидеть всплывающее сообщение, которое предупреждает вас о невозможности добавить больше терминов.

Заключение

Данная реализация ограничения по количеству таксономических терминов для пользовательских типов записей в WordPress обеспечивает удобство при работе с данными, уменьшая вероятность ошибок со стороны пользователей. Используя JavaScript для управления пользовательским интерфейсом и PHP для серверной валидации, вы создаёте надежное и безопасное решение, которое поможет поддерживать порядок в вашей системе управления контентом.

Не забывайте протестировать функциональность после внедрения кода, чтобы убедиться в его корректности и работоспособности.

Оцените материал
Добавить комментарий

Капча загружается...