it-swarm.com.de

Wie erstelle ich eine Taxonomie-Meta-Box mit Suchvorschlägen, aber ohne Eingabe neuer Begriffe?

Ich habe mich gefragt, wie ich eine Taxonomie-Metabox auf einer Nachbearbeitungsseite einrichten kann, die der Art "Tags" (mit Suchfeld und automatischen Vorschlägen) ähnelt, aber ohne das Recht, einen neuen Begriff hinzuzufügen.

Wenn ich beispielsweise ein Wort schreibe, erhalte ich Vorschläge zu Begriffen, die ich aus der Liste der vorhandenen Begriffe verwenden kann. Wenn ich jedoch ein Wort eingebe, das nicht vorhanden ist, werden die Begriffe nicht zur Liste hinzugefügt.

EDIT

Eigentlich suche ich genau das Verhalten der Funktion "Suchen" im Menü-Editor:

enter image description here

Gibt es eine Möglichkeit, diese Funktion auch für Nachbearbeitungsseiten zu verwenden, da dies ein zentrales WP -Verhalten ist? Ich frage mich, weil diese Blöcke genau gleich aussehen, beide die Registerkarten "Alle anzeigen" und "Neueste" haben, aber "Suchen" nur im Menü-Editor vorhanden ist.

8
mike23

Ich habe eine Lösung für Ihre erste Frage gefunden. Das heißt, die Steuermetabox, die nur Begriffe aus der Liste der vorhandenen Begriffe vorschlägt, aber das Hinzufügen neuer Begriffe nicht zulässt. Die Lösung basiert auf jQuery und ändert das Standardverhalten der Meta-Boxen für Tags (d. H. Nicht-heirarchische Taxonomien).

Einschränkung: Derzeit kann nur jeweils ein Begriff hinzugefügt werden. Das heißt, Sie können nicht mehrere vorhandene Begriffe als durch Kommas getrennte Werte hinzufügen.

Der Code ist auch als github's Gist verfügbar.

Vielleicht mache ich am nächsten Wochenende einen Menü-Editor wie Metabox für Taxonomie. ;)

die folgende Lösung kann als Plugin verwendet werden, wie es auch in Ihrer function.php-Datei verwendet werden kann.

<?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: Code aktualisiert, um die Return-Taste gemäß @ mikes Kommentar zu behandeln.

3

Diese Frage ist ein bisschen alt, aber wie ich herausgefunden habe, kommen möglicherweise andere Leute und suchen nach den gleichen Dingen. Dieses PLugin war hilfreich https://wordpress.org/plugins/admin-category-filter/#developers Und Sie können manuell Code hinzufügen, um den übergeordneten Kategoriebereich oder die Datei functions.php Ihres benutzerdefinierten Themas auszublenden Überhaupt die Schaltfläche "Neue Kategorie hinzufügen". CSS-Anzeige: Kein Attribut für die Div-ID funktioniert einwandfrei.

0
leorospo