Cambiar el orden de columnas personalizadas para paneles de edición
Cuando registras una columna personalizada de esta manera:
//Registrar columna de miniatura para el tipo au-gallery
add_filter('manage_edit-au-gallery_columns', 'thumbnail_column');
function thumbnail_column($columns) {
$columns['thumbnail'] = 'Miniatura';
return $columns;
}
por defecto aparece como la última columna a la derecha. ¿Cómo puedo cambiar el orden? ¿Qué pasa si quiero mostrar la columna anterior como la primera o la segunda?
Gracias de antemano

Básicamente estás haciendo una pregunta sobre PHP, pero la responderé porque está en el contexto de WordPress. Necesitas reconstruir el array de columnas, insertando tu columna antes de la columna a la que quieres que quede a la izquierda:
add_filter('manage_posts_columns', 'thumbnail_column');
function thumbnail_column($columns) {
$new = array();
foreach($columns as $key => $title) {
if ($key=='author') // Coloca la columna de Miniaturas antes de la columna de Autor
$new['thumbnail'] = 'Miniatura';
$new[$key] = $title;
}
return $new;
}

sí, supongo que esa sería una forma más fácil :) pero entendí bien la idea en mi respuesta. buen razonamiento.

בניית אתרים - Casi había terminado de escribir mi respuesta cuando respondiste la tuya, así que nuestras respuestas se "cruzaron en el correo", por así decirlo. De todos modos, me tomó un tiempo darme cuenta de eso; ciertamente no se me ocurrió la primera vez que lo necesité.

Algo a tener en cuenta: ¿qué pasa si otro plugin eliminó la columna del autor? Tu propia columna de miniaturas también desaparecería. Podrías hacer una verificación isset($new['thumbnail'])
antes de devolver $new
. Si no está configurado, simplemente anéxalo al final, por ejemplo.

Si tienes plugins como WPML que añaden columnas automáticamente, incluso a tipos de contenido personalizados, es posible que tengas código complicado en el encabezado de tu tabla.
No querrás copiar el código a tu definición de columna. ¿Por qué alguien lo haría, en realidad?
Solo queremos extender las columnas predeterminadas ya proporcionadas, bien formateadas y ordenables.
De hecho, esto es solo siete líneas de código, y mantiene intactas todas las demás columnas.
# enlazar a manage_edit-<miposttypepersonalizado>_columns
add_filter( 'manage_edit-mycustomposttype_columns', 'mycustomposttype_columns_definition' ) ;
# definición de columnas. $columns es el array original de la interfaz de administración para este tipo de contenido.
function mycustomposttype_columns_definition( $columns ) {
# añade tu clave de columna a las columnas existentes.
$columns['mycolumn'] = __( 'Algo diferente' );
# ahora define un nuevo orden. Necesitas buscar los nombres de las columnas
# en el HTML de la interfaz de administración del encabezado de la tabla.
# "cb" es la casilla de verificación "seleccionar todo".
# "title" es la columna del título.
# "date" es la columna de fecha.
# "icl_translations" proviene de un plugin (en este caso, WPML).
# cambia el orden de los nombres para cambiar el orden de las columnas.
$customOrder = array('cb', 'title', 'icl_translations', 'mycolumn', 'date');
# devuelve un nuevo array de columnas a WordPress.
# el orden es exactamente como lo configuraste en $customOrder.
foreach ($customOrder as $colname)
$new[$colname] = $columns[$colname];
return $new;
}
espero que esto ayude..

Esta es una mejor respuesta cuando se añaden columnas personalizadas en las tablas de administración estándar. La respuesta aceptada solo funciona para reordenar las columnas personalizadas en sí mismas ($columns solo contiene columnas personalizadas). Esta respuesta permite insertar columnas personalizadas entre las columnas estándar.

Esta es una combinación de algunas respuestas de SO, ¡espero que ayude a alguien!
function array_insert( $array, $index, $insert ) {
return array_slice( $array, 0, $index, true ) + $insert +
array_slice( $array, $index, count( $array ) - $index, true);
}
add_filter( 'manage_resource_posts_columns' , function ( $columns ) {
return array_insert( $columns, 2, [
'image' => 'Imagen destacada'
] );
});
Descubrí que array_splice()
no mantendrá las claves personalizadas como necesitamos. array_insert()
sí lo hace.

la única forma que conozco es crear tu propio array de columnas
// Agregar a la función admin_init
add_filter('manage_edit-au-gallery_columns', 'add_my_gallery_columns');
function add_my_gallery_columns($gallery_columns) {
$new_columns['cb'] = '<input type="checkbox" />';
$new_columns['id'] = __('ID');
$new_columns['title'] = _x('Nombre de la Galería', 'nombre de columna');
// tu nueva columna en un lugar adecuado en el medio
$new_columns['thumbnail'] = __('Miniatura');
$new_columns['categories'] = __('Categorías');
$new_columns['tags'] = __('Etiquetas');
$new_columns['date'] = _x('Fecha', 'nombre de columna');
return $new_columns;
}
y luego renderizar estas columnas adicionales como lo harías normalmente
// Agregar a la función admin_init
add_action('manage_au-gallery_posts_custom_column', 'manage_gallery_columns', 10, 2);
function manage_gallery_columns($column_name, $id) {
global $wpdb;
switch ($column_name) {
case 'id':
echo $id;
break;
case 'Thumbnail':
$thumbnail_id = get_post_meta( $id, '_thumbnail_id', true );
// imagen de la galería
$attachments = get_children( array('post_parent' => $post_id, 'post_type' => 'attachment', 'post_mime_type' => 'image') );
if ($thumbnail_id)
$thumb = wp_get_attachment_image( $thumbnail_id, array($width, $height), true );
elseif ($attachments) {
foreach ( $attachments as $attachment_id => $attachment ) {
$thumb = wp_get_attachment_image( $attachment_id, array($width, $height), true );
}
}
if ( isset($thumb) && $thumb ) {echo $thumb; } else {echo __('Ninguna');}
break;
default:
break;
} // fin del switch
}
Espero que esto ayude
