Agregando columnas adicionales en el Admin de WordPress
Uno de los plugins que es frecuente instalar es el WP-PostViews, este te permite llevar un contador de lecturas de un post en cualquier blog de Wordpress. El detalle con este plugin, es que no hay una forma rápida para consultar las lecturas de múltiples posts a no ser que se navegue por el blog o se instale WP-Stats (otro plugin del mismo autor).
Aprovechando que WordPress tiene muchísimas funciones que uno pocas veces usa, decidí agregar una columna adicional el la sección de gestionar posts del administrativo de WordPress (/wp-admin/edit.php
). Para que esto funcione necesitaremos agregar un filtro usando manage_posts_columns
que nos permitirá agregar, modificar o eliminar columnas, y luego usaremos la acción manage_posts_custom_column
con la que agregaremos la función que se encargará de devolver los datos de la columna, esta será llamada si se encuentra una columna adicional a las que maneja WordPress.
Primero agregaremos nuestra función al filtro manage_posts_columns
, como esto solo funcionará dentro del admin y los plugins siempre son llamados no importando si la petición fue fuera del admin, el código sería así:
if ( is_admin() ) { add_filter('manage_posts_columns', 'admin_columns'); } function admin_columns($defaults) { $defaults['views'] = __('Views'); add_action('manage_posts_custom_column', 'admin_postviews_col', 10, 2); return $defaults; }
Con el llamado a is_admin()
aseguramos que la petición actual sea dentro del admin de WordPress, sino lo es no hacemos perder más tiempo al proceso. Con la función admin_columns
modificaremos las columnas que WordPress nos pasa en el parámetro $defaults
, en ese caso solo agregaremos una columna con el identificador views
y el valor asignado a dicho elemento será el texto en la cabecera de la columna.
Para que los datos de cada fila se muestren necesitamos que admin_postviews_col()
sea llamado, para ello es que la agregamos en la acción manage_posts_custom_column
. Esta función debe comprobar que la columna actual es la que deseamos, en caso de que otros plugins también agregaron las suyas, y los datos deben ser enviados directamente al navegador, no deben ser devueltos:
function admin_postviews_col($column_name, $id) { if( $column_name == 'views' ) { if (function_exists('the_views') ) the_views(); } }
the_views()
es una función del plugin WP-PostViews, y esta enviará el contador de lecturas al navegador. El parámetro $id
es el identificador del post que está siendo tratado en la fila actual, o mejor aún se pueden saber los datos del post con global $post;
. En este punto ya no necesitamos hacer nada más, veremos el contador de lecturas de cada post (fila de la tabla) como en la imagen al inicio de este post.
Eliminando una Columna
Que pasa si eres el único autor del blog y tampoco usas tags para nada, para eliminar esas dos columnas del listado es bastante sencillo, tan solo hay que eliminarlas del array $defaults cuando la acción manage_posts_columns
sea ejecutada:
if (is_admin() ) { add_filter('manage_posts_columns', 'admin_unset_columns'); } function admin_unset_columns($defaults) { unset($defaults['tags']); unset($defaults['author']); return $defaults; }
Bonus: Columnas en WordPress 2.7
En el caso de WordPress 2.7, probablemente tengas que darle un ancho a la nueva columna que agregues para que no distorsione la distribución de la tabla. Es bastante simple hacerlo, primero tienes que hacer que una función sea llamada mientras se está creando el <head>
de /wp-admin/edit.php
:
if( version_compare( $wp_version, '2.7', '>=' ) ) { add_action('admin_head-edit.php','admin_col_css'); } function admin_viewscol_css() { ?> <style type="text/css">.fixed .column-views{width:10%;}</style> <?php }
Esto es para no mandar ese estilo en todas las páginas del wp-admin, sino en solo la que nos interesa. Luego admin_viewscol_css()
se encargará de enviar el estilo apropiado, en el caso de la columna de lecturas, un 10% de la tabla parece ser adecuado.
Para las eliminar columnas por defecto de WordPress, con la versión 2.7 es mucho más sencillo, desde la misma página se pueden esconder las columnas indeseadas:
Sin escribir una sola linea de código.
Descargar Plugins
Si les interesa, cree dos plugins para que puedan ver el código completo y funcional:
- Admin PostViews: Agrega la columna de lecturas
- Elimina Columnas: Quita las columnas de autor y tags
El Admin PostViews no se muestra en la lista de plugin de wp 2.7
@Jim es extraño porque en mi instalación si funciona:
http://i36.tinypic.com/oua70p.png
El problema fue Firefox, lo guardó con caracteres HTML, últimamente está lleno de bug el navegador ese, en fin… solucionado men! Excelente hack sobre todo el código sirve para iniciarse en la creación de plugins. Un detalle: el pluging requiere tener instalado WP-PostViews y una sugerencia: súbe los archivos php comprimidos.
10x 2 u help!
PD: que plugin usas para mostrar codigos en los post?
[…] siempre son llamados no importando si la petición fue fuera del admin, el código sería así: view plaincopy to […]
¿Como quito una columna del Tema?
Es que en la pagina principal, me aparecen 2 columnas del lado derecho y solo quiero 1, pero no encuentro la forma de quitarla. Tengo muy poco usando WordPress. Je!
Saludos!