Come posso creare una meta-box di tassonomia con suggerimenti di ricerca ma senza inserire nuovi termini?


8

Mi chiedevo come avrei potuto impostare una metabox di tassonomia in una pagina di modifica post simile al tipo di "tag" (con campo di ricerca e suggerimenti automatici), ma senza il diritto di aggiungere un nuovo termine.

Quindi, per esempio, se sto scrivendo una parola, ricevo suggerimenti di termini che posso usare dall'elenco dei termini esistente, ma se scrivo una parola che non esiste, allora non aggiunge i termini all'elenco.

MODIFICARE

In realtà, quello che sto cercando è esattamente il comportamento della funzionalità "Cerca" nell'editor di menu:

inserisci qui la descrizione dell'immagine

Poiché si tratta di un comportamento WP di base, esiste un modo per utilizzarlo anche nelle pagine di post modifica? Mi chiedo perché questi blocchi sembrano esattamente uguali, entrambi hanno le schede "Visualizza tutto" e "Più recenti", ma "Cerca" è presente solo nell'Editor di menu.


Il tassonomia metabox è hardcoded con set di schede e non ha alcun filtro a cui si possa agganciare. Qualsiasi cosa del genere richiederebbe la creazione di una patch o la completa metabox personalizzata.
Azizur Rahman,

Risposte:


3

Ho trovato una soluzione per la tua prima domanda. vale a dire il metabox fiscale che suggerisce solo termini dall'elenco di termini esistenti ma non consente di aggiungere nuovi termini. La soluzione è basata su jQuery e modifica il comportamento predefinito dei meta box (ovvero tassonomie non gerarchiche).

Limitazione: attualmente consente solo di aggiungere 1 termine alla volta, ovvero non è possibile aggiungere più termini esistenti come valori separati da virgola.

Il codice è disponibile come di GitHub anche Gist .

Potrei fare un editor di menu come metabox per tassonomia il prossimo fine settimana. ;)

la soluzione seguente può essere usata come plugin come può essere usata anche nel tuo file function.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');
?>

AGGIORNAMENTO: codice aggiornato per gestire la chiave di ritorno come da commento di @mike.


1
grazie è un ottimo inizio. Impedisce l'inserimento di nuove parole chiave quando si preme il pulsante "Aggiungi", ma è comunque possibile aggiungerne di nuove premendo il Entertasto. Ho provato a tornare falsesu keyCode == 13, ma che non sembra fare il trucco, hai qualche idea?. Inoltre, sarebbe meglio se lo script è stato chiamato solo su post.phpe post-new.phppagine di amministrazione.
mike23,

Ho aggiornato il codice, controlla ora.
Hameedullah Khan,

Si sveglia benissimo, grazie mille! Ora la cosa carina sarebbe che funzionasse per più tassonomie. Accetterò la risposta, facci sapere anche se riesci a implementare l'editor di menu come metabox per le tassonomie :)
mike23,

0

Questa domanda è un po 'vecchia, ma come l'ho trovata alcune altre persone potrebbero venire e cercare le stesse cose. Questo PLugin è stato utile https://wordpress.org/plugins/admin-category-filter/#developers E puoi aggiungere manualmente il codice ad esso o alle funzioni del tuo 'tema personalizzato' per nascondere la sezione della categoria principale o il 'aggiungi nuovo categoria 'pulsante a tutti Un display CSS: nessuno attributo al div id funzionerà perfettamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.