Comment puis-je créer une méta-boîte de taxonomie avec des suggestions de recherche mais pas de saisie de nouveaux termes?

8

Je me demandais comment je pouvais configurer une métabox de taxonomie sur une page d'édition de publication qui serait similaire au type "tags" (avec champ de recherche et suggestions automatiques), mais sans le droit d'ajouter un nouveau terme.

Par exemple, si je tape un mot, je reçois des suggestions de termes que je peux utiliser dans la liste des termes existants, mais si je tape un mot qui n'existe pas, il n'ajoute pas les termes à la liste.

ÉDITER

En fait, ce que je recherche, c'est exactement le comportement de la fonctionnalité "Rechercher" dans l'éditeur de menu:

entrez la description de l'image ici

Comme il s'agit d'un comportement de base de WP, existe-t-il un moyen de l'utiliser également sur les pages de post-édition? Je me demande parce que ces blocs ont exactement la même apparence, les deux ont les onglets "tout afficher" et "les plus récents", mais "recherche" n'est présent que dans l'éditeur de menu.

mike23
la source
La métabox de taxonomie est codée en dur avec des onglets définis et n'a pas de filtre auquel on peut se connecter. Tout ce genre de choses nécessiterait la création d'un patch ou d'une métabox personnalisée complète.
Azizur Rahman

Réponses:

3

J'ai trouvé une solution à votre première question. c'est-à-dire la métabox fiscale qui ne suggère que des termes de la liste des termes existants mais ne vous permet pas d'ajouter de nouveaux termes. La solution est basée sur jQuery et modifie le comportement par défaut de la méta-boîte de balises (c'est-à-dire les taxonomies non héritières).

Limitation: Actuellement, il ne permet d'ajouter qu'un seul terme à la fois, c'est-à-dire que vous ne pouvez pas ajouter plusieurs termes existants en tant que valeurs séparées par des virgules.

Le code est également disponible de github l'essentiel .

Je pourrais faire un éditeur de menu comme metabox pour la taxonomie le week-end prochain. ;)

la solution ci-dessous peut être utilisée en tant que plugin comme peut l'être également dans votre fichier 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');
?>

UPDATE: code mis à jour pour gérer la touche retour selon le commentaire de @ mike.

Hameedullah Khan
la source
1
merci c'est un bon début. Cela empêche la saisie de nouveaux mots clés en appuyant sur le bouton "Ajouter", mais vous pouvez toujours en ajouter de nouveaux en appuyant sur la Entertouche. J'ai essayé de revenir falsesur keyCode == 13, mais cela ne semble pas faire l'affaire, faire une idée de vous?. En outre, il serait préférable que le script soit appelé uniquement sur les pages d'administration post.phpet post-new.php.
mike23
J'ai mis à jour le code, vérifiez maintenant.
Hameedullah Khan
C'est super, merci beaucoup! Maintenant, la chose intéressante serait de le faire fonctionner pour plusieurs taxonomies. J'accepterai la réponse, faites-nous savoir également si vous parvenez à implémenter un éditeur de menu comme metabox pour les taxonomies :)
mike23
0

Cette question est un peu ancienne, mais comme je l'ai trouvée, d'autres personnes peuvent venir chercher les mêmes choses. Ce PLugin était utile https://wordpress.org/plugins/admin-category-filter/#developers Et vous pouvez manuellement ajouter du code à celui-ci ou à votre `` fonctions personnalisées du thème.php pour masquer la section de la catégorie parent ou le 'ajouter un nouveau bouton catégorie 'du tout Un affichage css: aucun attribut au div id ne fonctionnera parfaitement.

leorospo
la source