✅ Noticias, temas, complementos de WEB y WordPress. Aquí compartimos consejos y las mejores soluciones para sitios web.

Cómo modificar o agregar columnas personalizadas a la lista de publicaciones en el administrador de WordPress

78

WordPress le permite modificar y agregar columnas a la lista de publicaciones, páginas o cualquier tipo de publicación personalizada en el panel de administración. ¡En esta publicación veremos cómo!

Cómo modificar o agregar columnas personalizadas a la lista de publicaciones en el administrador de WordPress

Hay dos ganchos a considerar: un filtro para la posición y el encabezado de la columna, y una acción para la salida de la columna para cada publicación. El tipo de publicación es parte de los nombres de los ganchos. Veámoslos uno por uno, empezando por el filtro.

Filtro de columna

El filtro para modificar, eliminar o agregar columnas a la lista de publicaciones en el panel de administración de WordPress es manage_{$post_type}_posts_columns. Intercambiar {$post_type}con el tipo de publicación deseada. Por ejemplo; si desea editar columnas para el tipo de publicación ‘ post‘, el nombre del filtro sería manage_post_posts_columns. Y para un tipo de publicación personalizada ‘ product‘, el nombre del filtro sería manage_product_posts_columns.

PD: WordPress tiene un filtro de columna exclusivamente para el tipo de publicación ‘ page‘: manage_pages_columns, pero obtendrás el mismo resultado usando el filtro manage_page_posts_columns.

Proporcionado como argumento para el filtro, obtiene la matriz completa de todas las columnas para ese tipo de publicación. Cada columna tiene una clave única y sus valores son las etiquetas que se muestran en el encabezado de la columna. Ejemplos de claves son ‘ cb‘ para la columna de la casilla de verificación y ‘ title‘ para la columna del título de la publicación. El orden de los elementos en la matriz determina el orden de las columnas.

Lo que debe hacer para agregar una nueva columna es simplemente agregar un nuevo par clave + valor a la matriz y devolverlo. Puede manipular la matriz como desee, por ejemplo, reordenándola.

Gancho de contenido de columna

El enlace que necesita usar para controlar la salida del contenido de la columna depende de si su tipo de publicación está configurado para ser jerárquico o no. Se ha definido un tipo de puesto jerárquico como 'hierarchical' => trueen el register_post_type. Cualquier tipo de publicación no jerárquica, incluido el tipo de publicación incorporado de WordPress ‘ post‘, use el nombre de enlace manage_{$post_type}_custom_column. Cualquier tipo de publicación jerárquica, incluido el tipo de publicación incorporado de WordPress ‘ page‘, usa el nombre del gancho manage_pages_custom_column(nota: no se inserta el nombre del tipo de publicación en el nombre del gancho).

Proporcionado como argumentos para este enlace, obtiene el nombre de la columna, que es la clave mencionada en el filtro de columna anterior (por ejemplo, ‘ cb‘ para la columna de casilla de verificación) y, en segundo lugar, la ID de la publicación. Este enlace se ejecuta en cada publicación, y la premisa básica es que verifica si estamos o no en el tipo de columna correcto (por la clave), y si lo estamos, use la ID de la publicación para obtener meta de la publicación o similar y generar lo que usted quiere.

Ejemplos

Veamos algún código de ejemplos prácticos.

Agregue una columna personalizada a las publicaciones que muestre una meta de publicación personalizada

Este es el uso más simple de agregar columnas personalizadas. Digamos que queremos agregar una columna personalizada para publicar el tipo ‘publicar’. Lo queremos al final de las columnas, llamado "Verificado", y debería generar ‘Sí’ o ‘No’ según el valor meta de una publicación personalizada. Nota: Este ejemplo no incluye guardar o actualizar la meta meta de la publicación personalizada.

En nuestro functions.phpo en cualquier parte de nuestro tema o código de complemento, agregaremos la columna fusionándola en la matriz de columnas, y en el gancho para la salida de la columna, buscaremos el valor de la publicación meta y la mostraremos.

add_filter('manage_post_posts_columns', function($columns) {
    return array_merge($columns, ['verified' => __('Verified', 'textdomain')]);
});
 
add_action('manage_post_posts_custom_column', function($column_key, $post_id) {
    if ($column_key == 'verified') {
        $verified = get_post_meta($post_id, 'verified', true);
        if ($verified) {
            echo '<span style="color:green;">'; _e('Yes', 'textdomain'); echo '</span>';
        } else {
            echo '<span style="color:red;">'; _e('No', 'textdomain'); echo '</span>';
        }
    }
}, 10, 2);

La salida puede ser cualquier cosa que desee, simplemente agregué una spanalrededor de la salida con diferentes colores de texto para una fácil identificación.

Agregue una columna personalizada a un tipo de publicación personalizada jerárquica que muestre su publicación principal

Cuando un tipo de publicación es jerárquica, las publicaciones pueden tener publicaciones principales. Digamos que tenemos un tipo de publicación personalizada jerárquica ‘ subject‘ para materias escolares donde es un hábito hacer muchas publicaciones para niños, e incluso publicaciones para niños de niños. Para una mejor visión general, queremos agregar una columna que muestre el antepasado principal de la publicación ("asunto raíz"). Si la publicación es una publicación de nivel superior, se muestra un simple ‘-‘; de lo contrario, la columna muestra el título de la publicación principal del antepasado en un enlace para editar la publicación.

Debido a que nos referimos a un tipo de publicación jerárquica, necesitamos usar un enlace diferente para generar contenido de columna que el ejemplo anterior, pero el proceso es exactamente el mismo.

Este código también muestra un ejemplo de cómo inyectar una columna en el medio de la matriz de columnas. Definimos que nuestra columna debe ir antes de ‘autor’ y usamos funciones de matriz de PHP para inyectar el elemento en la posición correcta.

add_filter('manage_subject_posts_columns', function($columns) {
    $offset = array_search('author', array_keys($columns));
    return array_merge(array_slice($columns, 0, $offset), ['ancestor' => __('Ancestor', 'textdomain')], array_slice($columns, $offset, null));
});
 
add_action('manage_pages_custom_column', function($column_key, $post_id) {
    if ($column_key == 'ancestor') {
        $ancestors = get_ancestors($post_id, 'subject', 'post_type');
        $post_ancestor = end($ancestors);
        if ($post_ancestor != 0) {
            echo '<a href="'. get_edit_post_link($post_ancestor). '">'. get_the_title($post_ancestor). '</a>';
        } else {
            echo '-';
        }
    }
}, 10, 2);

Quitar una columna

Eliminar una columna de un tipo de publicación es bastante simple; todo lo que necesita es filtrar las columnas de publicaciones, eliminar el elemento de la matriz y devolverlo. No necesita engancharse en el gancho de salida de la columna. Por ejemplo; eliminando la datecolumna predeterminada » del tipo de publicación ‘ post‘:

add_filter('manage_post_posts_columns', function($columns) {
    unset($columns['date']);
    return $columns;
});

Cambiar los nombres o la posición de las columnas predeterminadas

Supongamos que tenemos un tipo de publicación personalizada ‘ book‘, y queremos reemplazar el nombre de columna predeterminado "Autor" con "Editor". Simplemente filtramos el filtro de columnas y le damos a la clave ‘ author‘ un valor diferente:

add_filter('manage_book_posts_columns', function($columns) {
    $columns['author'] = __('Publisher', 'textdomain');
    return $columns;
});

El reordenamiento de las columnas se puede hacer mediante el uso de funciones de matriz de PHP. Tenga en cuenta que la matriz resultante debe ser una matriz asociativa con "ID" de columna como claves y su etiqueta como valores. Este es un ejemplo simple de sacar la authorcolumna ‘ ‘ y ponerla al final, reordenando así las columnas:

add_filter('manage_post_posts_columns', function($columns) {
    $taken_out = $columns['author'];
    unset($columns['author']);
    $columns['author'] = $taken_out;
    return $columns;
});

Establecer una columna personalizada como ordenable

De forma predeterminada, algunas de las columnas de WordPress se pueden ordenar, por ejemplo, el título de la publicación, el recuento de comentarios y la fecha. Es posible hacer que su columna personalizada se pueda ordenar, pero requiere un poco más de código y conectarse al gancho de consulta de publicación de WordPress para decirle a WordPress cómo ordenar según su meta de publicación.

Supongamos que tenemos un tipo de publicación personalizada ‘ movie‘, y con el siguiente código agregamos una columna personalizada que muestra la meta de publicación personalizada ‘ duration‘.

add_filter('manage_movie_posts_columns', function($columns) {
    return array_merge($columns, ['duration' => __('Duration', 'textdomain')]);
});
 
add_action('manage_movie_posts_custom_column', function($column_key, $post_id) {
    if ($column_key == 'duration') {
        $duration = get_post_meta($post_id, 'duration', true);
        echo (!empty($duration))? sprintf(__('%s minutes', 'textdomain'), $duration): __('Unknown', 'textdomain');
    }
}, 10, 2);

Para decirle a WordPress que queremos que nuestra columna se pueda ordenar, debemos conectarnos al filtro manage_edit-{$post_type}_sortable_columns. Agregamos nuestra columna a la matriz de columnas filtrables y luego definimos cuál orderbydebe ser el valor ». Establecemos un valor personalizado único allí, el mismo nombre que nuestra columna, al que podemos referirnos en nuestro enlace de consulta más adelante.

add_filter('manage_edit-movie_sortable_columns', function($columns) {
    $columns['duration'] = 'duration';
    return $columns;
});

Si actualiza WordPress ahora, debería ver que se puede hacer clic en nuestra columna personalizada y ordenarla, pero no se ordena correctamente. Eso es porque WordPress no entiende ‘ duration‘ como un ‘ orderby‘ valor. Eso es lo que arreglaremos conectando ‘ pre_get_posts‘:

add_action('pre_get_posts', function($query) {
    if (!is_admin()) {
        return;
    }
    $orderby = $query->get('orderby');
    if ($orderby == 'duration') {
        $query->set('meta_key', 'duration');
        $query->set('orderby', 'meta_value_num');
    }
});

Debido a que nuestra meta de publicación personalizada ‘ duration‘ siempre será un número, podemos definir ‘ orderby‘ como ‘ meta_value_num‘ para la comparación de números. Ajuste los argumentos de la consulta para que se ajusten a los metavalores de su publicación personalizada.

Deshabilitar la clasificación de las columnas predeterminadas

Deshabilitar la clasificación de una columna predeterminada es bastante simple. Todo lo que tenemos que hacer es conectarnos al filtro manage_edit-{$post_type}_sortable_columnsy eliminar la columna que no queremos clasificar de la matriz. Por ejemplo, esto elimina la clasificación de la columna de fecha para el tipo de publicación ‘ post‘.

add_filter('manage_edit-post_sortable_columns', function($columns) {
    unset($columns['date']);
    return $columns;
});

Fuente de grabación: awhitepixel.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More