Tabla de contenidos
Hoy vamos a enseñarte cómo crear una columna personalizada en WordPress que puedes ordenar fácilmente. Esto es súper útil para los administradores, especialmente si necesitan ordenar sus entradas según un valor específico.
Antes de empezar, debemos agregar algunos códigos al archivo functions.php en la carpeta child-template. Así que asegúrate de tener acceso a esa carpeta.
En nuestro ejemplo, vamos añadir una columna que muestre el número de vistas de cada entrada en el backend de WordPress. Este enfoque es mucho mejor que instalar un plugin completo para tal detalle, ya que los plugins pueden afectar la velocidad de tu web y muchas veces incluyen características adicionales que no necesitas.
Si solo necesitas una personalización parcial o una pequeña funcionalidad adicional en tu web actual, te recomendamos escribir tu propio código en lugar de instalar un plugin.
¡Bueno, empecemos! Primero, debemos registrar una nueva columna personalizada.
Si quieres saber como se crea una columna personalizada en WordPress , te invito a que sigas leyendo👇
Registra una columna
Vamos a añadir la columna ‘post_views’ con el título ‘Views’, para ver el número de vistas de nuestras entradas del blog.
Aquí está cómo lo hacemos:
function views_columns( $columns )
{
$columns['post_views'] = __('Views');
return $columns;
}
Rellena la columna con datos
Tenemos que añadir el contenido para la columna, en nuestro caso los datos serán los meta datos del post: ‘post_views_count’:
function views_data_columns( $column, $post_id )
{
if($column === 'post_views'){
echo get_post_meta($post_id, 'post_views_count', true);
}
}
Hemos almacenado las vistas de los puestos como meta de los mismos, pero sus columnas pueden ser rellenadas con otros datos.
Hacer que una columna sea clasificable
Ahora registramos nuestra columna personalizada como «clasificable».
function set_sortable_views( $columns )
{
$columns['post_views'] = 'post_views';
return $columns;
}
Ordenar los datos
Sin embargo, para que la ordenación funcione, necesitamos crear una función que llame a la base de datos para enviar los datos en forma ordenada.
Si queremos ordenar por un valor meta, o por alguna otra forma que WordPress no entienda automáticamente hay que decirle a qué se refiere ordenando por ‘post_views_count’.
function sort_views_column_query( $query )
{
$orderby = $query->get( 'orderby' );
if ( 'post_views' == $orderby ) {
$meta_query = array(
'relation' => 'OR',
array(
'key' => 'post_views_count',
'compare' => 'NOT EXISTS',
),
array(
'key' => 'post_views_count',
),
);
$query->set( 'meta_query', $meta_query );
$query->set( 'orderby', 'meta_value_num' );
}
}
El filtro pasa un array con los nombres de las columnas ordenables como claves, y lo que hay que ordenar como valor. Más concretamente, los valores dictan cómo se establece el parámetro orderby en la consulta que rellena la tabla. Le dice a WordPress que ordene numéricamente por el valor del meta post_views_count. Si quieres ordenar el valor alfabéticamente, utiliza meta_value en lugar de meta_value_num.
Filtros y acciones de llamada
Y, por último, añadir las llamadas a esos métodos.
Para decirle a WordPress qué columnas quiere registrar como ordenables con su función, necesitas usar este filtro:
manage_{$screen->id}_sortable_column
Para las entradas y las páginas, $screen->id es ‘post‘ y‘page‘ respectivamente. En general, para un tipo de puesto con nombre ‘mi-tipo-de-puesto‘, es ‘mi-tipo-de-puesto‘.
// Add new column
add_filter( 'manage_post_posts_columns', 'views_columns' );
// Make column sortable
add_filter( 'manage_edit-post_sortable_columns', 'set_sortable_views' );
// Populate column cells
add_action( 'manage_post_posts_custom_column', 'views_data_columns', 10, 2 );
// Set query to sort
add_action( 'pre_get_posts', 'sort_views_column_query' );
Puedes utilizar estas funciones y filtros para añadir una nueva columna al backend de WordPress para cualquier post_type, nuevo o existente.
Número de visitas del artículo del blog de WordPress
Si también quieres mostrar el número de vistas de las entradas en el backend, como en el ejemplo, todavía tendrás que añadir nuevos metadatos.
Te mostraremos rápidamente cómo hacerlo, es sólo una función:
Crear nuevos meta_datos
function setPostViews($postID) {
$count_key = 'post_views_count';
$count = get_post_meta($postID, $count_key, true);
if($count==''){
$count = 0;
delete_post_meta($postID, $count_key);
add_post_meta($postID, $count_key, '0');
}else{
$count++;
update_post_meta($postID, $count_key, $count);
}
}
Y entonces tendrás que llamar a esta función en cada artículo, por lo que necesitas para editar single.php archivo. Si no lo tienes en la carpeta del tema hijo, cópialo de la carpeta del tema padre y edítalo en la carpeta del tema hijo.
Así que añade esta parte de código a tu archivo single.php, puedes ponerlo en las primeras líneas, justo después de <?php
if( !current_user_can('editor') || !current_user_can('administrator') ) {
setPostViews(get_the_ID());
}
Como puedes ver he utilizado un código y registro de la vista del post sólo si el usuario que está viendo el artículo no es Administrador de la web o Editor de la web, con este enfoque puedes eliminar las vistas de los miembros de tu equipo, y obtener números más precisos.
Por supuesto, de esta forma obtenemos cifras muy aproximadas, que no se ajustan a los bots, se podría conseguir una mejora aplicando otra condición, es decir, registrando las visualizaciones sólo de los usuarios que pasaron más de 10 segundos en la página, por ejemplo.
Conclusión
¡Increíble! Ahora que has aprendido a crear una columna personalizada en WordPress, puedes mejorar la funcionalidad de tu web y hacer que la experiencia de usuario sea aún mejor. La capacidad de ordenar entradas según un valor específico y ver datos importantes directamente en el backend puede marcar la diferencia en el rendimiento de tu web.
Recuerda que, en lugar de instalar un plugin completo, siempre es mejor escribir tu propio código para una personalización parcial o una funcionalidad adicional. ¡Así que a ponerse manos a la obra y potencia tu web con una columna personalizada en WordPress!
¿Necesitas a los mejores expertos en desarrollo web? Contacta con nosotros.