Как я могу ограничить выбор категории WordPress только одной?

У меня есть настраиваемый тип сообщения и настраиваемая таксономия - довольно стандартные вещи.

Однако я хотел бы знать, как я могу запретить моему клиенту выбирать более одной категории таксономии для каждого сообщения?

Я не против того, чтобы они могли создавать и удалять типы таксономии, но я не хочу, чтобы они выбирали более одного. Поскольку это флажки, они МОГУТ. Возможно, сработают радиокнопки?

Я видел, как решения используют jQuery для изменения этих полей, но они кажутся немного взломанными. Как лучше всего это сделать?

В приложении приведен снимок экрана с моей настраиваемой таксономией.

Пользовательская таксономия


person Michael Giovanni Pumo    schedule 12.07.2012    source источник
comment
Вы когда-нибудь находили решение этой проблемы? Вот еще один способ сделать это   -  person brasofilo    schedule 14.01.2019


Ответы (2)


Я понимаю, что это не полный ответ, но что-то простое, например, перечисление категорий (или терминов таксономии) в раскрывающемся списке, поможет. Я не знаю ни одного лично, но должен быть плагин, который это делает. Без обид, но это определенно кажется мне проблемой, которая была решена раньше.

person Chief Alchemist    schedule 12.07.2012
comment
Я так и думал, но я нахожу хоккейные ответы только трехлетней давности ... и даже они не идеальны. Пытался найти идею, которая, возможно, была бы стандартной с помощью собственных опций WP. - person Michael Giovanni Pumo; 13.07.2012

Насколько я знаю, мы должны использовать jQuery. Это "хакерский", но работает легко, а чистое решение PHP / WP действительно сложно, если мне не изменяет память.
Это необходимый код:

jQuery("#categorychecklist input").each(function(){
    this.type = 'radio';
});

Мы должны запустить код на страницах /wp-admin/post.php и /wp-admin/post-new.php. Он должен запускаться при загрузке, а затем запускаться снова, если создается новая категория. Чтобы решить проблему с новой категорией, я использовал MutationObserver:

foreach( array( 'post', 'post-new' ) as $hook )
    add_action( "admin_footer-$hook.php", 'convert_cats_to_radio' );

function convert_cats_to_radio(){
    global $post;
    if( $post->post_type !== 'post') // select your desired Post Type
        return;

    ?>
    <script type="text/javascript">
    function makeRadioButtons(){
        jQuery("#categorychecklist input").each(function(){
            this.type = 'radio';
        });
    }
    function newCategoryObserver(){
        // Example from developer.mozilla.org/en-US/docs/Web/API/MutationObserver
        var targetNode = document.getElementById('categorychecklist');
        var config = { attributes: true, childList: true, subtree: true };
        var callback = function(mutationsList) {
            for(var mutation of mutationsList) {
                if (mutation.type == 'childList') {
                    makeRadioButtons();
                }
            }
        };
        var observer = new MutationObserver(callback);
        observer.observe(targetNode, config);
    }
    newCategoryObserver();
    makeRadioButtons();
    </script>
    <?php
}

Актуально: этот старый плагин по-прежнему отлично справляется с решением вопрос иерархии подкатегорий. По умолчанию в WP, когда выбрана одна подкатегория, она отображается не в родительской категории, а в верхней части списка. Это также решение jQuery, написанное ведущим разработчиком ядра WP в то время.

person brasofilo    schedule 07.09.2018