¿Cómo puedo crear un meta-cuadro de taxonomía con sugerencias de búsqueda pero sin ingresar nuevos términos?

8

Me preguntaba cómo podría configurar un metabox de taxonomía en una página de edición de publicaciones que sería similar al tipo de "etiquetas" (con campo de búsqueda y sugerencias automáticas), pero sin el derecho de agregar un nuevo término.

Entonces, por ejemplo, si escribo una palabra, obtengo sugerencias de términos que puedo usar de la lista de términos existentes, pero si escribo una palabra que no existe, entonces no agrega los términos a la lista.

EDITAR

En realidad, lo que estoy buscando es exactamente el comportamiento de la funcionalidad "Buscar" en el Editor de menús:

ingrese la descripción de la imagen aquí

Como este es un comportamiento básico de WP, ¿hay alguna manera de usarlo también en las páginas de edición posterior? Me pregunto porque estos bloques se ven exactamente iguales, ambos tienen las pestañas "ver todo" y "más recientes", pero "buscar" solo está presente en el Editor de menús.

mike23
fuente
El metabox de taxonomía está codificado con pestañas establecidas y no tiene ningún filtro en el que uno pueda engancharse. Cualquier cosa como esta requeriría crear un parche o metabox personalizado completo.
Azizur Rahman

Respuestas:

3

Se me ocurrió una solución para su primera pregunta. es decir, el metabox de impuestos que solo sugiere términos de la lista de términos existentes pero no le permite agregar nuevos términos. La solución se basa en jQuery y modifica el comportamiento predeterminado de las metacuadros de etiquetas (es decir, taxonomías no jerárquicas).

Limitación: actualmente solo permite agregar 1 término a la vez, es decir, no puede agregar varios términos existentes como valores separados por comas.

El código también está disponible como la esencia de github .

Podría hacer un editor de menú como metabox para taxonomía el próximo fin de semana. ;)

la solución a continuación se puede usar como complemento, como también se puede usar en su archivo 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');
?>

ACTUALIZACIÓN: código actualizado para manejar la clave de retorno según el comentario de @ mike.

Hameedullah Khan
fuente
1
gracias, ese es un gran comienzo. Bloquea la entrada de nuevas palabras clave al presionar el botón "agregar", pero aún puede agregar nuevas presionando la Entertecla. He intentado volver falsea keyCode == 13, pero eso no parece hacer el truco, ¿tiene alguna idea?. Además, sería mejor si el script se llama sólo en post.phpy post-new.phppáginas de administración.
mike23
He actualizado el código, verifique ahora.
Hameedullah Khan
Funciona genial, muchas gracias! Ahora lo mejor sería que funcione para múltiples taxonomías. Aceptaré la respuesta, háganos saber también si logra implementar un editor de menú como metabox para taxonomías :)
mike23
0

Esta pregunta es un poco vieja, pero tal como la encontré, otras personas pueden venir y buscar las mismas cosas. Este PLugin fue útil https://wordpress.org/plugins/admin-category-filter/#developers y puede agregarle código manualmente o a las 'funciones personalizadas de su tema.php para ocultar la sección de categoría principal o' agregar nuevo botón de categoría 'en absoluto A css display: ninguno de los atributos para la identificación div funcionará perfectamente.

leorospo
fuente