Tablas de la lista de administradores de WordPress: agregar filtros personalizados

Publicado: 2021-02-26

La mayor parte de la información en sus páginas y publicaciones en el administrador de WordPress está organizada en tablas. Cualquiera que use WordPress estará familiarizado con estos. Funcionan bien y le permiten realizar 'Ediciones rápidas' de cierta página o información de la publicación, mostrarle la fecha en que se publicó la publicación o la página y mucho más, además. Además, es posible que haya notado que puede filtrar estas tablas con una selección de menús desplegables que aparecen en la parte superior de cada tabla.

Sin embargo, solo hay un puñado de filtros. Entonces, ¿qué hace si desea filtrar un valor que no tiene un cuadro de filtro en el Administrador? Afortunadamente, WordPress nos permite agregar nuestros propios filtros. vamos a ver como.

¿Por qué utilizar filtros personalizados ?

Entonces, ¿por qué exactamente necesitaría filtros personalizados para organizar las tablas de administración en WordPress? Imaginemos que tenemos un sitio que tiene una gran cantidad de autores de publicaciones y muchas publicaciones.

Aloje su sitio web con Pressidium

GARANTÍA DE DEVOLUCIÓN DE DINERO DE 60 DÍAS

VER NUESTROS PLANES

Puede ver el autor de las publicaciones desde la tabla de administración sin ninguna modificación. Lo que no puedes hacer actualmente es ordenar las publicaciones por autor. Claramente, esta es una limitación significativa si desea poder ver fácilmente todas las publicaciones escritas por un autor en particular. Lo que ayudaría es si pudiera ver un menú desplegable de todos los autores de Publicaciones y luego seleccionar uno de la lista. Eso realmente podría acelerar las cosas.

Echemos un vistazo a cómo podríamos construir esto.

Creando nuestro filtro personalizado

Para ayudarlo a crear sus propios filtros, WordPress proporciona los ganchos restrict_manage_posts y pre_get_posts .

El restrict_manage_posts se introduce en el archivo wp-admin/includes/class-wp-posts-list-table.php alrededor de la línea 557 y se activa antes de que se cree el botón Filtro sobre la lista de la tabla de administración.

Usaremos una función personalizada y la vincularemos con el gancho restrict_manage_posts como de costumbre (eche un vistazo aquí para obtener más información al respecto). Vaya a la carpeta principal de su tema activo y abra el archivo functions.php con su editor favorito. Al final del contenido del archivo, inserte el siguiente código:

 function my_author_filter(){ $screen = get_current_screen(); global $post_type; if( $screen->id == 'edit-post' ){ $my_args = array( 'show_option_all' => 'All Authors', 'orderby' => 'display_name', 'order' => 'ASC', 'name' => 'authors_admin_filter', 'who' => 'authors', 'include_selected' => true ); if(isset($_GET['authors_admin_filter'])){ $my_args['selected'] = (int)sanitize_text_field($_GET['authors_admin_filter']); } wp_dropdown_users($my_args); } } add_action('restrict_manage_posts','my_author_filter');

La condición principal que usamos es if( $screen->id == 'edit-post') . Aquí usamos la función de WordPress get_current_screen() que devuelve la identificación de la pantalla en la que estamos.

En este caso, la identificación de la pantalla de administración es 'editar publicación'. En otras palabras, nos aseguramos de estar en la pantalla de administración de publicaciones. Si, por ejemplo, quisiéramos aplicar esto a la pantalla de administración de páginas, deberíamos usar if( $screen->id == 'edit-page' o si estuviéramos trabajando para un tipo de publicación personalizada, edit-{post_type} sería la declaración if correcta.

Nota: Para ver qué ID corresponde a cada pantalla de administración, puede consultar la documentación oficial sobre la referencia de la pantalla de administración.

En el siguiente código, verificamos si un autor ya está seleccionado y, de ser así, aplicamos el valor seleccionado:

 if(isset($_GET['authors_admin_filter'])){ $my_args['selected'] = (int)sanitize_text_field($_GET['authors_admin_filter']); }

Finalmente, haciendo uso de la función de WordPress wp_dropdown_users generaremos la lista desplegable de los autores según los argumentos que definimos anteriormente.

A continuación, elegimos el texto que mostrará la opción 'mostrar todo' en el argumento show_option_all . Elegimos la cadena "Todos los autores". En el argumento 'nombre' completamos el nombre deseado para la lista desplegable. Usaremos este valor más adelante para filtrar los resultados de la lista de publicaciones.

En el argumento 'quién' definimos qué tipo de usuarios consultar, en nuestro caso 'autores'. Con el argumento 'include_selected' elegimos si queremos incluir el ID de usuario seleccionado en la lista desplegable.

En este punto, si actualiza la pantalla de publicaciones del administrador, debería ver el menú desplegable del autor junto a los otros menús de filtro integrados.

Si selecciona un valor y presiona "Filtro", el valor permanecerá seleccionado al volver a cargar la página, pero los resultados permanecerán sin cambios. En nuestro próximo paso, haremos los cambios necesarios para filtrar la lista de publicaciones para mostrar solo las publicaciones vinculadas al autor que seleccionamos.

Filtrar los resultados

Una vez más, el filtro pre_get_posts hará el trabajo. Hemos examinado este gancho en nuestro artículo Búsqueda de administración de WordPress: Ampliación de los resultados. Usaremos esto nuevamente para modificar el objeto de la variable de consulta que se crea en la pantalla de administración posterior, antes de que se ejecute la consulta real. En su functions.php inserte las siguientes líneas:

 function my_author_filter_results($query){ $screen = get_current_screen(); global $post_type; if ( $screen->id == 'edit-post' ) { if(isset($_GET['authors_admin_filter'])){ $author_id = sanitize_text_field($_GET['authors_admin_filter']); if($author_id != 0){ $query->query_vars['author'] = $author_id; } } } } add_action('pre_get_posts','my_author_filter_results');

La condición principal, como anteriormente, también es necesaria aquí para asegurarnos de que estamos en la pantalla de publicaciones del administrador.

$author_id = sanitize_text_field($_GET['authors_admin_filter']); mantiene la identificación del autor seleccionado en la variable $author_id . Después de esto, y si el id del autor no es 0 (se seleccionan Todos los autores), pasamos el valor de $author_id en el parámetro de autor de la consulta.

Y eso es. Ahora las publicaciones que se mostrarán serán solo las que pertenezcan al id de autor/usuario seleccionado.

Conclusión

El filtrado personalizado en las pantallas de administración puede hacer que los usuarios administradores puedan buscar fácilmente su contenido, algo que puede ser invaluable cuando tiene muchas publicaciones o páginas. Y, por supuesto, esta es solo una forma posible de usar un filtro en las tablas de administración. Hay un montón de formas alternativas en las que puede encontrarlo útil y, con suerte, las técnicas que hemos descrito aquí lo ayudarán a crear sus propios filtros.

Por ejemplo, es posible que desee crear un menú de filtro desplegable con las opciones para mostrar las publicaciones creadas durante los últimos 30 días o quizás un filtro que clasifique las publicaciones por cualquier taxonomía. La lista query_vars puede ayudarlo a pensar en posibles opciones.

¡Diviértete jugando con esta gran característica!

Ver también

Tablas de la lista de administradores de WordPress: agregar filtros personalizados
Primeros pasos con los campos personalizados de WordPress