Modificarea ordinii coloanelor personalizate pentru panourile de editare
Când înregistrezi o coloană personalizată astfel:
//Înregistrează coloana thumbnail pentru tipul au-gallery
add_filter('manage_edit-au-gallery_columns', 'thumbnail_column');
function thumbnail_column($columns) {
$columns['thumbnail'] = 'Miniatură';
return $columns;
}
în mod implicit aceasta apare ca ultima coloană în dreapta. Cum pot schimba ordinea? Ce trebuie să fac dacă vreau să afișez coloana de mai sus ca prima sau a doua coloană?
Mulțumesc anticipat

Practic, pui o întrebare legată de PHP, dar voi răspunde pentru că este în contextul WordPress. Trebuie să reconstruiești array-ul de coloane, inserând coloana ta înaintea coloanei în fața căreia vrei să apară:
add_filter('manage_posts_columns', 'thumbnail_column');
function thumbnail_column($columns) {
$new = array();
foreach($columns as $key => $title) {
if ($key=='author') // Adaugă coloana Thumbnail înaintea coloanei Author
$new['thumbnail'] = 'Thumbnail';
$new[$key] = $title;
}
return $new;
}

da, cred că asta ar fi o cale mai ușoară :) dar am înțeles corect ideea în răspunsul meu. gândire bună.

creare site-uri - eram aproape terminat de scris răspunsul meu când ai răspuns tu, deci răspunsurile noastre "s-au încrucișat pe drum", ca să zic așa. Oricum, mi-a luat ceva timp să-mi dau seama de asta; cu siguranță nu mi-a trecut prin cap prima dată când am avut nevoie.

Un lucru la care trebuie să fii atent: ce se întâmplă dacă un alt plugin a eliminat coloana autorului? Coloana ta cu thumbnail ar dispărea și ea. Ai putea face o verificare isset($new['thumbnail'])
înainte de a returna $new
. Dacă nu este setată, poți să o adaugi la final, de exemplu.

Dacă aveți pluginuri precum WPML care adaugă automat coloane, chiar și la post types personalizate, este posibil să aveți cod complicat în antetul tabelului.
Nu doriți să copiați codul în definiția coloanei. De ce ar face cineva asta, de altfel.
Vrem doar să extindem coloanele implicite, deja furnizate, frumos formatate și sortabile.
De fapt, acesta este doar un cod de șapte linii, care păstrează intacte toate celelalte coloane.
# conectați-vă la manage_edit-<mycustomposttype>_columns
add_filter( 'manage_edit-mycustomposttype_columns', 'mycustomposttype_columns_definition' ) ;
# definiția coloanei. $columns este array-ul original din interfața de administrare pentru acest posttype.
function mycustomposttype_columns_definition( $columns ) {
# adăugați cheia coloanei dvs. la coloanele existente.
$columns['mycolumn'] = __( 'Ceva diferit' );
# acum definiți o nouă ordine. trebuie să căutați numele coloanelor
# în HTML-ul interfeței de administrare din antetul tabelului.
# "cb" este caseta de selectare "selectează tot".
# "title" este coloana titlu.
# "date" este coloana dată.
# "icl_translations" provine de la un plugin (în acest caz, WPML).
# schimbați ordinea numelor pentru a schimba ordinea coloanelor.
$customOrder = array('cb', 'title', 'icl_translations', 'mycolumn', 'date');
# returnați un nou array de coloane către WordPress.
# ordinea este exact așa cum ați setat în $customOrder.
foreach ($customOrder as $colname)
$new[$colname] = $columns[$colname];
return $new;
}
Sper că acest lucru vă ajută..

Acesta este un răspuns mai bun atunci când adăugați coloane personalizate în tabelele standard din administrare. Răspunsul acceptat funcționează doar pentru reordonarea coloanelor personalizate în sine ($columns conține doar coloane personalizate). Acest răspuns permite inserarea coloanelor personalizate între coloanele standard.

Aceasta este o combinație a câtorva răspunsuri de pe Stack Overflow, sper că va ajuta pe cineva!
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' => 'Imagine reprezentativă'
] );
});
Am descoperit că array_splice()
nu păstrează cheile personalizate așa cum avem nevoie. Funcția array_insert()
face acest lucru.

singura metodă pe care o știu este să creezi propriul array de coloane
// Adaugă în funcția 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('Numele Galeriei', 'nume coloană');
// noua ta coloană undeva bine la mijloc
$new_columns['thumbnail'] = __('Miniatură');
$new_columns['categories'] = __('Categorii');
$new_columns['tags'] = __('Etichete');
$new_columns['date'] = _x('Data', 'nume coloană');
return $new_columns;
}
și apoi afișează aceste coloane adiționale așa cum ai face în mod normal
// Adaugă în funcția 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 );
// imagine din galerie
$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 __('Niciuna');}
break;
default:
break;
} // end switch
}
Sper că te ajută
