Как я могу создать мета-код таксономии с поисковыми предложениями, но не вводить новые термины?

Мне было интересно, как я смогу настроить таксономический обмен на странице редактирования после публикации, которая будет похожа на «теги» (с полем поиска и автоматическими предложениями), но без права добавления нового термина.

Так, например, если я пишу слово, я получаю предложения терминов, которые я могу использовать из списка существующих терминов, но если я нахожу слово, которое не существует, то оно не добавляет термины к список.

ИЗМЕНИТЬ

На самом деле то, что я ищу, - это в точности поведение функции «Поиск» в редакторе меню:

введите описание изображения здесь

Поскольку это ключевое поведение WP, есть ли способ использовать его на страницах после редактирования? Мне интересно, потому что эти блоки выглядят одинаково, оба имеют вкладку «просмотреть все» и «последние», но «поиск» присутствует только в редакторе меню.

7 голосов | спросил mike23 24 J0000006Europe/Moscow 2011, 12:47:50

2 ответа


3

Я придумал решение для вашего первого вопроса. т. е. налоговый обмен, который предлагает только термины из списка существующих терминов, но не позволяет добавлять новые термины. Решение основано на jQuery и изменяет поведение метаданных тегов (т. Е. Неэрихархических таксономий) по умолчанию.

Ограничение: В настоящее время он позволяет добавлять только 1 член за раз, то есть вы не можете добавить несколько существующих терминов в качестве значений, разделенных запятой.

Код также доступен в виде github .

В следующий уик-энд я мог бы сделать редактор меню, например, метаболизм для таксономии. ;)

приведенное ниже решение может использоваться как плагин, который также может использоваться в вашем файле functions.php.

<?php
/*
Plugin Name: No new terms taxonomy meta box
Plugin URI: https://gist.github.com/1074801
Description: Modifies the behavior of the taxonomy box, forbids user from selecting terms that don't belong to taxonomy.
Author: Hameedullah Khan
Author URI: http://hameedullah.com
Version: 0.1
License: Do what ever you like, but don't publish it under your name without improving it.
 */

/*
 * For more information: http://wordpress.stackexchange.com/questions/20921/
 */

// currently works only with single taxonomy which should be defined here
// default is the built-in post_tag
define('CTM_TAXONOMY_NAME', 'post_tag');

function ctm_custom_tax_js() {

    // taxonomy name not defined or set to empty value
    if ( !defined('CTM_TAXONOMY_NAME') || !CTM_TAXONOMY_NAME ) {
        return;
    }
?>
<script type="text/javascript">


    function ctm_custom_termadd_handler(event){
            var tax = '<?php echo CTM_TAXONOMY_NAME; ?>';
            var input = jQuery('#tagsdiv-<?php echo CTM_TAXONOMY_NAME; ?> input.newtag');

            var q = input.val().split(',');

            // if there are more then two values, just add the first one
            // NOTE: because this solution does not support inserting multiple terms
            if (q.length > 1) {
                q = jQuery.trim(q[0]);

                // as we don't support multiple terms
                // set the value of input box to the first term
                input.val(q);
            }

            jQuery.get( ajaxurl + '?action=ajax-tag-search&tax=' + tax + '&q=' + q, function(results) {
                var tokens = results.split('\n');
                for (var i=0; i < tokens.length; i++) {
                    token = jQuery.trim(tokens[i]);
                    if ( token && token == q ) {
                        (function($){
                            tagBox.flushTags( $('#tagsdiv-<?php echo CTM_TAXONOMY_NAME; ?>') );
                        })(jQuery);

                        return true;
                    }
                }

            } );
            event.stopImmediatePropagation();
            return false;
    }

    function ctm_custom_key_handler(event) {
        if (13 == event.which) {
            ctm_custom_termadd_handler(event);
            return false;
        }
        return true;
    }

    jQuery(document).ready(function() {
        // unbiind the click event from the taxonomy box
        jQuery('#tagsdiv-<?php echo CTM_TAXONOMY_NAME; ?> input.tagadd').unbind('click');
        jQuery('#tagsdiv-<?php echo CTM_TAXONOMY_NAME; ?> input.newtag').unbind('keyup');

        // hide the howto text for inserting multiple terms
        // NOTE: because this solution does not support inserting multiple terms
        jQuery('#tagsdiv-<?php echo CTM_TAXONOMY_NAME; ?> p.howto').hide();

        // bind our custom handler
        jQuery('#tagsdiv-<?php echo CTM_TAXONOMY_NAME; ?> input.tagadd').click(ctm_custom_termadd_handler);
        jQuery('#tagsdiv-<?php echo CTM_TAXONOMY_NAME; ?> input.newtag').keyup(ctm_custom_key_handler);
    });

</script>

<?php
}
add_action('admin_footer-post-new.php', 'ctm_custom_tax_js');
add_action('admin_footer-post.php', 'ctm_custom_tax_js');
?>

UPDATE: обновлен код для обработки ключа возврата в соответствии с комментарием @ mike.

ответил Hameedullah Khan 10 J000000Sunday11 2011, 22:35:59
0

Этот вопрос немного стар, но, как я нашел, некоторые другие люди могут прийти и искать то же самое. Этот PLugin был полезен https://wordpress.org/plugins/admin-category-filter/#developers И вы можете вручную добавить код к нему или к своей функции custumized theme.php, чтобы скрыть раздел родительской категории или кнопку «добавить новую категорию» вообще  Дисплей css: атрибут none не будет работать отлично.

ответил leorospo 25 +03002017-10-25T19:15:24+03:00312017bEurope/MoscowWed, 25 Oct 2017 19:15:24 +0300 2017, 19:15:24

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132