Wie kann ich ein Taxonomie-Meta-Feld mit Suchvorschlägen, aber ohne Eingabe neuer Begriffe erstellen?

8

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

Wenn ich beispielsweise ein Wort typisiere, erhalte ich Vorschläge für Begriffe, 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.

BEARBEITEN

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

Geben Sie hier die Bildbeschreibung ein

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

mike23
quelle
Die Taxonomie-Metabox ist mit festgelegten Registerkarten fest codiert und verfügt über keinen Filter, in den man sich einbinden kann. Für all dies müsste ein Patch oder eine vollständige benutzerdefinierte Metabox erstellt werden.
Azizur Rahman

Antworten:

3

Ich habe eine Lösung für Ihre erste Frage gefunden. dh die Steuer-Metabox, in der nur Begriffe aus der Liste der vorhandenen Begriffe vorgeschlagen werden, Sie jedoch keine neuen Begriffe hinzufügen können. Die Lösung basiert auf jQuery und ändert das Standardverhalten der Meta-Box Tags (dh nicht heirarchische Taxonomien).

Einschränkung: Derzeit können jeweils nur 1 Begriff hinzugefügt werden. Sie können also nicht mehrere vorhandene Begriffe als durch Kommas getrennte Werte hinzufügen.

Der Code ist auch als Github- Kern verfügbar .

Ich könnte am nächsten Wochenende einen Menüeditor wie Metabox für Taxonomie machen. ;)

Die folgende Lösung kann als Plugin verwendet werden, ebenso wie in Ihrer function.php-Datei.

<?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: Der Code wurde aktualisiert, um den Return-Schlüssel gemäß dem Kommentar von @ mike zu verarbeiten.

Hameedullah Khan
quelle
1
Danke, das ist ein großartiger Start. Es verhindert die Eingabe neuer Schlüsselwörter, wenn Sie auf die Schaltfläche "Hinzufügen" klicken. Sie können jedoch weiterhin neue hinzufügen, indem Sie die EnterTaste drücken. Ich versuchte Rückkehr falseauf keyCode == 13, aber das scheint nicht den Trick zu tun, haben Sie eine Idee?. Es wäre auch besser, wenn das Skript nur auf post.phpund post-new.phpAdmin-Seiten aufgerufen würde .
Mike23
Ich habe den Code aktualisiert, überprüfen Sie jetzt.
Hameedullah Khan
Es woks super, vielen Dank! Jetzt wäre es schön, wenn es für mehrere Taxonomien funktioniert. Ich werde die Antwort akzeptieren, lassen Sie uns auch wissen, wenn Sie es schaffen, Menü-Editor wie Metabox für Taxonomien zu implementieren :)
Mike23
0

Diese Frage ist ein wenig alt, aber als ich sie fand, könnten einige andere Leute kommen und nach den gleichen Dingen suchen. Dieses Plugin hilfreich https://wordpress.org/plugins/admin-category-filter/#developers Und u kann manuell Code , um es oder zu Ihrer ‚Custumized Thema der functions.php den übergeordneten Kategorie Abschnitt oder zu verbergen‘ hinzufügen add new Kategorie 'Schaltfläche überhaupt Eine CSS-Anzeige: Kein Attribut für die Div-ID funktioniert einwandfrei.

leorospo
quelle