如何创建包含搜索建议但不输入新术语的分类元框?

时间:2011-06-24 作者:mike23

我想知道如何在编辑后的页面上设置一个类似于“标签”类型的分类法元盒(带有搜索字段和自动建议),但没有添加新术语的权限。

例如,如果我键入一个单词,我会从现有的术语列表中获得可以使用的术语建议,但如果我键入一个不存在的单词,则不会将这些术语添加到列表中。

EDIT

实际上,我要寻找的正是菜单编辑器中“搜索”功能的行为:

enter image description here

由于这是一个核心的WP行为,有没有办法在编辑后的页面上也使用它?我很奇怪,因为这些块看起来完全一样,都有“查看全部”和“最近”选项卡,但“搜索”只出现在菜单编辑器中。

2 个回复
最合适的回答,由SO网友:Hameedullah Khan 整理而成

我为你的第一个问题想出了一个解决方案。i、 e税务元框,仅建议现有条款列表中的条款,但不允许添加新条款。该解决方案基于jQuery,并修改标记(即非继承人分类法)元框的默认行为。

Limitation: 目前,它只允许一次添加一个术语,即不能将多个现有术语添加为逗号分隔的值。

代码也可以作为github的gist.

我可能会在下周末为分类法做菜单编辑器,比如metabox

下面的解决方案可以用作插件,也可以用于您的函数。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的评论更新代码以处理返回键。

SO网友:leorospo

这个问题有点老了,但我发现有些人可能会来找同样的问题。这个插件很有用https://wordpress.org/plugins/admin-category-filter/#developers您可以手动向它或“自定义主题”的函数中添加代码。php在css显示中隐藏父类别部分或“添加新类别”按钮:div id的任何属性都不能正常工作。

结束

相关推荐

Custom metabox translation

我已经创建了一个自定义的帖子类型,并添加了一些自定义的元数据库,现在我想知道我在我的网站上使用了什么样的翻译插件?我对它们都没有经验,所以我不知道谁会支持我的自定义元数据库,谁不会。