¿WordPress ofrece el formulario de edición rápida para administrar la información de términos de taxonomía? lo que es genial, pero ¿qué sucede si desea editar algo más que el nombre de su término y su slug? Este tutorial explicará cómo extender esta maravillosa característica de WordPress para actualizar más que lo básico.
La función de edición rápida en WordPress es una herramienta simple que se utiliza para permitir a los usuarios editar partes de datos asociados con publicaciones, páginas y términos sin la molestia de navegar a una página separada antes de editar los datos. El uso de Edición rápida es omnipresente en WordPress y este tutorial enseñará a los lectores cómo aprovechar el poder de esta característica para usar con términos de taxonomía. Después de realizar los siguientes cinco pasos, podrá agregar con éxito los metadatos de términos de taxonomía a través del panel Edición rápida en WordPress.
Para demostrar cómo agregar metadatos de términos de taxonomía con Edición rápida, trabajaré con un ejemplo de adjuntar metadatos a términos de una taxonomía de "presidente" en el contexto de un complemento. Para este ejemplo, el objetivo principal será adjuntar dos piezas de metadatos a cada término de taxonomía del presidente: fecha de inicio y fecha de finalización. La taxonomía de un presidente puede ser útil para un blogger político que desee categorizar los mensajes de los presidentes discutidos.
Para este ejemplo, crearé un complemento que use el siguiente directorio y estructura de archivos:
La carpeta principal de "edición rápida" se debe colocar en la carpeta de complementos para utilizarla como complemento. Cree esta estructura de archivos para preparar el resto del tutorial. Si se hace correctamente, la estructura del archivo debe verse como la siguiente imagen.
Para asegurarse de que WordPress reconoce el complemento como un complemento, se debe agregar la información del encabezado del complemento estándar. Agregar el siguiente comentario en la parte superior de "quick-edit.php" permitirá que WordPress reconozca el complemento..
Después de agregar la información del encabezado, active el complemento a través de la página de complementos de WordPress. El complemento de ejemplo está todo configurado y listo para el resto del tutorial.
Antes de pasar a agregar al formulario de edición rápida, la taxonomía del presidente debe registrarse y WordPress debe estar preparado para manejar los metadatos del término. El registro de taxonomías personalizadas no se tratará en profundidad en este tutorial, ya que se ha abordado en detalle en otros lugares. Para el ejemplo actual, una taxonomía de "presidente" necesita ser registrada. Esta operación se completará con la función "register_taxonomy".
function my_taxonomies () // Agregar una nueva taxonomía, hacerla jerárquica (como categorías) $ labels = array ('name' => _x ('Presidents', 'Taxonomy general name', 'my_plugin'), 'singular_name' => _x ('President', 'taxonomy singular name', 'my_plugin'), 'search_items' => __ ('Search Presidents', 'my_plugin'), 'all_items' => __ ('All Presidents', 'my_plugin') , 'parent_item' => __ ('Parent President', 'my_plugin'), 'parent_item_colon' => __ ('Parent President:', 'my_plugin'), 'edit_item' => __ ('Edit President', 'my_plugin '),' update_item '=> __ (' Update President ',' my_plugin '),' add_new_item '=> __ (' Add New President ',' my_plugin '),' new_item_name '=> __ (' New President Name ' , 'my_plugin'), 'menu_name' => __ ('Presidents', 'my_plugin'),); register_taxonomy ('president', array ('post'), array ('hierarchical' => true, 'labels' => $ labels, 'show_ui' => true, 'query_var' => true, 'rewrite' => array ('slug' => 'president'))); add_action ('init', 'my_taxonomies', 10, 1);
Este fragmento de código crea una nueva taxonomía personalizada de tipo "presidente". La taxonomía se especifica para trabajar con el tipo de publicación "post" y es una taxonomía jerárquica similar a la taxonomía incorporada en "categoría". Para empezar, puebla la taxonomía de los presidentes con los últimos tres presidentes de los Estados Unidos:
Si todo ha ido bien en este momento, debería tener un enlace para "Presidentes" en el menú "Publicaciones" y debería tener una tabla de lista de términos que se parece a la siguiente imagen.
Si bien este trabajo no ha contribuido en nada a la tarea de habilitar la edición rápida para metadatos de términos, ha configurado una taxonomía para trabajar en este ejemplo.
La siguiente tarea es preparar WordPress para manejar metadatos de término. En WordPress 2.9, un conjunto de funciones útiles se agregaron al núcleo de WordPress que sentó las bases para la gestión de metadatos a largo plazo. Las funciones "add_metadata", "update_metadata" y "get_metadata" habilitaron un método simple para administrar el término meta; Sin embargo, estas funciones solo proporcionan parte de la solución. Para agregar el término meta, primero se debe agregar una tabla a la base de datos de WordPress para que estas funciones administren los datos..
Afortunadamente, Jacob Goldman ha escrito un complemento maravilloso, Simple Term Meta, que maneja esta tarea, además de proporcionar a los desarrolladores funciones útiles (por ejemplo, "add_term_meta", "update_term_meta", "get_term_meta") para manejar la gestión de metadatos a largo plazo. En esencia, este complemento agrega un término de taxonomía API de metadatos al sistema WordPress. Como dice el Sr. Goldman:
"WordPress ofrece soporte de metadatos para publicaciones, usuarios y comentarios fuera de la caja. Pero falta soporte de metadatos para términos de taxonomía (una etiqueta, categoría o términos de taxonomía personalizados). Este complemento agrega soporte completo y eficiente para metadatos de término basado en el marco de metadatos posterior incorporado en WordPress. Agrega una tabla 'postmeta' y publica funciones meta que deberían ser familiares para cualquiera que haya trabajado con WordPress post meta ".
Para el ejemplo actual, este complemento debe estar instalado para poder trabajar con el término meta. Antes de continuar, asegúrese de descargar e instalar Simple Term Meta. Con este complemento instalado, es hora de comenzar a codificar el formulario de edición rápida.
"Para una discusión más extensa sobre la administración del término meta usando Simple Term Meta y la creación de una interfaz de usuario para agregar y editar metadatos de término de taxonomía, consulte mi artículo 'Agregar metadatos a los términos de taxonomía'".
En la imagen anterior de la página de taxonomía de los presidentes, observe que hay cuatro columnas en la tabla de lista de términos: Nombre, Descripción, Slug y Mensajes. En última instancia, nuestro complemento adjuntará una Fecha de inicio y una Fecha de finalización a cada presidente. Al igual que con los otros datos de términos, la Fecha de inicio y la Fecha de finalización se deben mostrar en esta tabla. Este objetivo se puede lograr fácilmente con unos pocos filtros de WordPress.
En primer lugar, se añadirán los encabezados.
function my_column_header ($ columnas) $ columnas ['fecha de inicio'] = __ ('Fecha de inicio', 'my_plugin'); $ columnas ['fecha final'] = __ ('Fecha final', 'my_plugin'); devuelve $ columnas; add_filter ('manage_edit-president_columns', 'my_column_header', 10, 1);
Utilizando la administrar _ $ pantalla-> id _columns
filtro, dos columnas adicionales se agregan a la tabla de lista de términos. los administrar _ $ pantalla-> id _columns
filtro envía un argumento a la función de devolución de llamada mi_column_header
. Este argumento $ columnas
Es una matriz de columnas para la pantalla actual..
Simplemente agregando elementos a la matriz y devolviendo esa matriz, se agregarán nuevas columnas a la tabla de lista de términos. El filtro administrar _ $ pantalla-> id _columns
es un filtro variable en el que el nombre real del filtro cambia según la pantalla actual que se esté viendo. En el caso de ver una página de administración de taxonomía, la parte variable del filtro comenzará con "editar-" y terminará con el nombre de la taxonomía actual. Ya que estamos agregando a la taxonomía del presidente, este valor es "presidente", que se especificó cuando la taxonomía se definió inicialmente. Use los siguientes filtros para las taxonomías estándar de WordPress:
Ahora que se agregaron las columnas, las columnas deben prepararse para mostrar el término meta para los términos individuales, lo que se logra con el siguiente fragmento de código.
function my_column_value ($ empty = ", $ custom_column, $ term_id) return esc_html (get_term_meta ($ term_id, $ custom_column, true)); add_filter ('manage_president_custom_column', 'my_column_value', 10, 3);
Los valores meta del término son agregados por el administrar _ $ pantalla-> taxonomía _custom_column
filtrar. La parte variable de este filtro se refiere a la taxonomía actual, que, en este caso, es "presidente". los administrar _ $ pantalla-> taxonomía _custom_column
filtro acepta tres argumentos:
$ vacío
: un argumento en desuso que debe dejarse vacío$ custom_column
: el nombre de la columna actual (por ejemplo, 'fecha de inicio', 'fecha de finalización')$ term_id
: el id del término taxonómico actualLos dos últimos argumentos se utilizan para encontrar el valor del término meta valor de interés. Más adelante en el tutorial, la "fecha de inicio" y la "fecha de finalización" se agregarán a la base de datos usando la add_term_meta
función del término meta API proporcionado por el plugin Simple Term Meta. Los valores se almacenarán con las teclas "fecha de inicio" y "fecha de finalización". los get_term_meta
La función toma la clave y el ID de término como argumentos para ubicar el valor meta apropiado.
Obviamente, el $ term_id enviado a la mi_column_value
función es el término id necesario y, por lo tanto, se utiliza para el argumento $ term_id en el get_term_meta
función. Afortunadamente, en este caso, la $ column_name
La variable es idéntica a la clave para el término meta. Como tal, se utiliza como el segundo argumento en el get_term_meta
función.
Finalmente, la llamada a la get_term_meta
la función está envuelta en el esc_html
función, que es una función básica de formato de WordPress que escapa a HTML en la pantalla.
En este punto del tutorial, este código devolverá una cadena vacía porque aún no se ha establecido un término meta. Una vez que se agreguen estas fechas, aparecerán en la fila y columna correctas en la tabla de lista de términos. Con los dos fragmentos de código anteriores agregados, la tabla de términos de la lista comienza a tomar forma.
Ahora que las columnas están configuradas, es hora de agregarlas al formulario de edición rápida en preparación para agregar meta a los términos.
Agregar contenido al formulario de edición rápida es la parte más fácil de este tutorial; Sin embargo, hay algunos escollos potenciales si no tienes cuidado. los quick_edit_custom_box
La acción permite un acceso fácil para agregar campos adicionales al formulario de edición rápida. La siguiente función agrega los campos personalizados al formulario de edición rápida
function my_quick_edit_custom_box ($ column_name, $ screen, $ name) if ($ name! = 'president' && ($ column_name! = 'start-date' || $ column_name! = 'end-date')) return false; ?>
Antes de saltar a la explicación de esta función, haga clic en uno de los enlaces "Edición rápida" en la página de taxonomía de los presidentes. Deberías ver algo similar a la siguiente imagen..
El concepto básico con esta función y acción es bastante simple. Para cada columna que se agrega a través de la administrar _ $ pantalla-> id _columns
filtro, el quick_edit_custom_box
se llama. Esto permite agregar campos de formulario personalizados (o cualquier contenido para esa materia) para cada columna que se define.
Es importante tener en cuenta en este punto que si no ha agregado ninguna columna a la tabla de términos de la lista, no podrá agregar ningún contenido a través de quick_edit_custom_box
acción.
los quick_edit_custom_box
acepta tres argumentos:
$ column_name
: la clave para los valores agregados en el mi_column_header
función$ pantalla
: la pantalla actual$ nombre
: nombre de la taxonomía actualEn el my_quick_edit_custom_box
, Solo el $ column_name
y $ nombre
se utilizan argumentos Primero, se realiza una comprobación para garantizar que los campos se imprimen solo en el contexto correcto. Si la taxonomía actual no es "presidente", los campos no deberían mostrarse.
A continuación, los campos solo deberían mostrarse cuando el quick_edit_custom_box
la acción se ejecuta para la columna "fecha de inicio" o "fecha de finalización". Como tal, la declaración condicional comprueba que la columna es uno de esos dos valores. Este paso es importante para garantizar que los campos no se generen para columnas inesperadas. Por ejemplo, la taxonomía "link_category" incorporada tiene una columna adicional llamada "links". Cuando utilice este filtro en esa taxonomía y no compruebe las columnas específicas que se agregaron a la lista de columnas, se imprimirá un campo adicional. Tenga en cuenta que los campos estándar de "nombre", "descripción" y "slug" no llaman al quick_edit_custom_box
.
Ahora que se verifica el contexto apropiado, se imprime el campo del formulario. El valor de la $ column_name
variable nos permite determinar el contexto de uso actual de la quick_edit_custom_box
acción.
Como tal, se puede utilizar para establecer la etiqueta y el campo de nombre. Dado que nuestras claves de columna, "fecha de inicio" y "fecha de finalización" serán las mismas que las claves utilizadas para el término meta, la $ column_name
La variable se usa para el atributo de nombre en el campo de entrada de texto. Tenga en cuenta que esta función se ejecuta una vez para cada columna que se define. La primera vez que se llama, el campo "Fecha de inicio" se generará con la etiqueta correspondiente. En la segunda ejecución, el campo "Fecha de finalización" se generará con la etiqueta correspondiente.
Para mantener el marcado consistente con el formulario existente, simplemente copié el HTML utilizado para los campos estándar de WordPress y lo pegué en el my_quick_edit_custom_box
función. Esto le dará a la forma resultante una apariencia consistente. El valor para el campo no se establece en este punto..
Este formulario se genera como un formulario "ficticio" que se clonará y colocará cada vez que se haga clic en el enlace "Edición rápida". Cuando se hace clic en el enlace "Edición rápida", una función de javascript completará el campo con el valor actual, si se establece uno. Si ve el código fuente de la página de taxonomía Presidentes, el formulario de edición rápida se encuentra cerca del cierre Con los campos listos, el siguiente paso es guardar los valores en la base de datos. Guardar la fecha de inicio y la fecha de finalización de los términos del presidente requerirá utilizar una función proporcionada por Simple Term Meta, La siguiente función guardará la fecha de inicio y la fecha de finalización cuando se actualice el término. Algunas cosas deben tenerse en cuenta con esta función. En primer lugar, antes de enviar los datos, la función comprueba que la los Solo estoy haciendo una limpieza de datos muy básica para recordar a los lectores que la limpieza y la validación de los datos es muy importante; sin embargo, no abordo más este problema aquí para permanecer en la tarea y no confundir el problema con rutinas de validación complejas. Como tal, recomiendo leer algunos artículos sobre el tema si no está familiarizado con la validación y el saneamiento de los datos.. Simplemente agregando esta función al archivo no se completará la tarea de guardar estos datos; la función debe ejecutarse utilizando un gancho de WordPress. Dado que la idea es ejecutar esta función cuando se actualiza un término, el Con el Antes de tomar la vuelta de la victoria para esta tarea, es importante notar que la solución, tal como está, carece de una característica de utilidad crítica. Más específicamente, para un término que tiene la fecha de inicio y la fecha de finalización agregadas, los valores no se completan en el campo de formulario cuando se invoca la Edición rápida. Lo mencioné anteriormente en el Paso 3 cuando dije que los valores para el campo de formulario no se agregan cuando se crea el formulario; más bien, se rellenan utilizando Javascript cuando se invoca la Edición rápida. El llenado previo de estos campos de formulario es una adición importante para los usuarios, ya que hace que la actualización de los datos sea muy simple, especialmente cuando se hacen errores tipográficos.. Para rellenar previamente los campos, jQuery se utilizará para determinar qué valores van en qué campos. Para tener una idea de cómo WordPress maneja las columnas estándar, recomiendo echar un vistazo al método de "edición" en el archivo "inline-edit-tax-dev.js" ubicado en el directorio "wp-admin / js /" de Núcleo de WordPress. Al usar este código como guía, desarrollé la siguiente función para insertar los valores existentes en los campos del formulario cuando se invoca la Edición rápida. Agregue esta función al archivo "js / quick-edit.js" que creó en el primer paso del tutorial. Veamos este código para comprender lo que está sucediendo. Dentro de la llamada a la jQuery. Al mirar hacia atrás en la tercera línea de la función jQuery, se puede ver que cuando se hace clic en la instancia actual del enlace Edición rápida, que tiene la clase "editinline", la función intenta encontrar la fila de la tabla principal ( El texto de ese elemento coincidente se devuelve y se asigna a la Si vuelve a mirar el HTML escrito para el formulario de edición rápida que se agregó usando el Ahora que esta función se ha escrito y agregado al archivo "quick-edit.js", se debe poner en cola usando Esta función primero verifica el contexto actual para determinar si se necesita el Javascript. Si la página es "edit-tags.php", la taxonomía actual es "president", y el parámetro "acción" no está establecido (es decir, la página no es la página del término de edición), el archivo Javascript se agrega a los scripts cola. Una de las mayores necesidades de mascotas en la comunidad de desarrollo de WordPress es no tener en cuenta dónde se están agregando los archivos de Javascript y CSS. Dado que este script solo es necesario cuando el usuario está en la página de taxonomía de presidentes, solo se agrega en ese momento. El resto de la función registra el script y lo agrega usando El presente tutorial le enseñó cómo hacer uso de la función Edición rápida en la tabla de la lista de términos para agregar contenido y editar los metadatos del término. Con esta estrategia, puede agregar sus propios elementos al área de edición rápida en su próximo complemento o tema. Debe tener en cuenta que si está utilizando la Edición rápida, también debería tener una forma de agregar y editar campos normalmente a través de las páginas de términos de taxonomía de agregar y editar. Puede encontrar algunos excelentes tutoriales sobre este tema y combinar los conocimientos adquiridos en este tutorial para crear una forma excelente y útil para que los usuarios administren los metadatos de términos de taxonomía. Finalmente, quiero agradecer especialmente a Rarst por echar un vistazo a mi código para este tutorial antes de publicarlo.!
Paso 4 Guardar datos de formulario
update_term_meta
. Esta función funciona de manera similar a la función utilizada para guardar el meta de publicación, update_post_meta
. La principal diferencia, por supuesto, es que la update_term_meta
La función guarda datos para términos, a diferencia de publicaciones. Esta función toma cuatro argumentos, tres de los cuales se utilizarán en la implementación actual de la función:
$ term_id
: id del término con el que están asociados los metadatos$ meta_key
: nombre del valor de metadatos$ meta_value
: valor para los metadatos$ prev_value
: valor previo de los metadatos; ayuda a diferenciar entre dos piezas de metadatos con term_id y meta_key idénticos function my_save_term_meta ($ term_id) $ allowed_html = array ('b' => array (), 'em' => array (), 'i' => array (), 'strike' => array (), 'strong '=> array (),); if (isset ($ _ POST ['start-date'])) update_term_meta ($ term_id, 'start-date', wp_kses ($ _ POST ['start-date'], $ allowed_html)); if (isset ($ _ POST ['end-date'])) update_term_meta ($ term_id, 'end-date', wp_kses ($ _ POST ['end-date'], $ allowed_html));
$ _POST
array contiene el valor esperado. Si existe, el término metadatos se actualiza. Si actualmente no existe ningún metadatos de término para el término con la clave especificada, se creará un nuevo valor. los update_term_meta
se encargará de determinar si es necesario agregar o actualizar una entrada en la tabla. $ term_id
El valor que se pasa a la función es el ID del término actual y, por lo tanto, se envía a la función. update_term_meta
funciona junto con la tecla de metadatos ("fecha de inicio") y el valor meta ('$ _POST ['fecha de inicio']
'). Además, sería un pecado mortal no validar estos datos antes de enviarlos a la base de datos. En este ejemplo, yo uso wp_kses
con las etiquetas HTML más básicas permitidas para sanear las etiquetas HTML al guardar en la base de datos. taxonomía editado_ $
El gancho es el gancho apropiado para el trabajo. los $ taxonomía
parte del gancho es una variable que toma el nombre de la taxonomía que se está editando. Para este ejemplo, este gancho se utilizará utilizando edited_president
. El siguiente fragmento llamará al mi_save_term_meta
en el momento oportuno. add_action ('edited_president', 'my_save_term_meta', 10, 1);
mi_save_term_meta
escrito y ejecutado en el edited_president
Enganche, los datos deben guardarse en la base de datos y aparecer en las columnas correctas. Si todo funciona como debería, los resultados deberían ser similares a los de la siguiente imagen. Paso 5 rellenando previamente los campos de formulario
jQuery (document) .ready (function () jQuery ('. editinline'). live ('click', function () var tag_id = jQuery (this) .parents ('tr'). attr ('id') ; var start_date = jQuery ('. start-date', '#' + tag_id) .text (); var end_date = jQuery ('. end-date', '#' + tag_id) .text (); jQuery (' : input [name = "start-date"] ',' .inline-edit-row '). val (start_date); jQuery (': input [name = "end-date"] ',' .inline-edit- row '). val (end_date); devolver false;););
Listo
función, la segunda línea asigna un evento de "clic" a cada enlace de edición rápida. La tercera línea intenta encontrar el id de la fila de la tabla actual en la tabla de lista de términos. Este valor de id es necesario para contextualizar los selectores jQuery más adelante en la función. Extraer el HTML de la tabla de lista de términos es similar a lo siguiente (Nota: se han eliminado numerosas líneas para facilitar la lectura e ilustrar el concepto):
? ? ? 20 de enero de 1993 20 de enero de 2001 padres ('tr')
) y, una vez que se encuentra, obtener su id. En este caso, la tag_id
La variable será "tag-33". Con ese valor de id en la mano, la cuarta línea de la función jQuery busca la clase "fecha de inicio" en el contexto de la fila de la tabla que tiene una id que es equivalente a la tag_id
variable. fecha de inicio
variable. En este caso, el texto en la celda de la tabla con la clase "fecha de inicio" que está dentro de la fila de la tabla con el identificador "etiqueta-33" es "20 de enero de 1993", la fecha de inicio que estamos tratando de encontrar. La siguiente línea de código refleja este proceso para el valor de la fecha final. Dado que estos valores se han localizado, el siguiente paso es usarlos para rellenar los campos apropiados. La sexta línea de la función jQuery hace precisamente eso. Intenta ubicar una entrada con el atributo de nombre "fecha de inicio" que forma parte del elemento que tiene la clase "inline-edit-row" (jQuery (': input [name = "start-date"]', '.inline-edit-row')
). quick_edit_custom_box
Enganche, verá que se creó una entrada con el nombre "fecha de inicio" que estaba dentro de un div
con la clase "inline-edit-row". Esta línea de jQuery coincidirá con esta entrada y establecerá el valor del atributo "valor" en la cadena de texto contenida en el fecha de inicio
variable. En este caso, la entrada con el nombre igual a "fecha de inicio" tendrá su atributo "valor" establecido en "20 de enero de 1993". Luego se llevan a cabo los mismos pasos para la "fecha de finalización" y ese campo de entrada se rellenará de manera similar.wp_enqueue_script
. La siguiente función y acción agrega el script a la cabeza
sección del HTML cuando se carga la página de taxonomía de los presidentes. function my_add_admin_scripts () global $ pagenow; if ($ pagenow == 'edit-tags.php' && (isset ($ _ GET ['taxonomy']) && $ _GET ['taxonomy'] == 'president') &&! isset ($ _ GET ['action'] )) wp_register_script ('quick-edit-js', plugins_url ('/ js / quick-edit.js', __FILE__), array ('jquery')); wp_enqueue_script ('quick-edit-js'); add_action ('admin_enqueue_scripts', 'my_add_admin_scripts', 10, 1);
wp_enqueue_script
. Finalmente, esta función se ejecuta en la acción "admin_init", que se ejecuta al principio del proceso de carga de páginas dentro del panel de administración de WordPress. Si todo se ejecuta correctamente, los campos del formulario deben rellenarse cuando se hace clic en los enlaces "Edición rápida".
Conclusión