Adăugarea coloanei 'ordine meniu' în ecranul de administrare pentru tipuri de postări personalizate
Vreau să folosesc atributul menu order
pentru a controla ordinea unui tip de postare personalizat care va fi folosit într-un scop specific.
Este destul de simplu să adaugi acest lucru la CPT prin supports => array('page-attributes')
dar cum pot expune valoarea ordinii meniului în ecranul listei de administrare pentru acest CPT?

OK - până la urmă s-a dovedit a fi destul de simplu - aveam un fel de blocaj mental - menu_order
este o variabilă în obiectul $post
(mulțumesc lui @brady pentru că mi-a reamintit asta).
Postarea lui @scribu despre crearea valorilor de coloană sortabile oferă restul informațiilor.
Deci, presupunând că tipul personalizat de postare se numește header_text
, acestea sunt funcțiile și hook-urile necesare:
Adăugarea unei coloane noi pentru ordonare
/**
* adaugă coloana de ordonare în ecranul de listare admin pentru textul antet
*/
function add_new_header_text_column($header_text_columns) {
$header_text_columns['menu_order'] = "Ordine";
return $header_text_columns;
}
add_action('manage_header_text_posts_columns', 'add_new_header_text_column');
Afisarea valorilor coloanei
/**
* afișează valorile coloanei personalizate de ordonare
*/
function show_order_column($name){
global $post;
switch ($name) {
case 'menu_order':
$order = $post->menu_order;
echo $order;
break;
default:
break;
}
}
add_action('manage_header_text_posts_custom_column','show_order_column');
Setarea coloanei ca fiind sortabilă
/**
* face coloana sortabilă
*/
function order_column_register_sortable($columns){
$columns['menu_order'] = 'menu_order';
return $columns;
}
add_filter('manage_edit-header_text_sortable_columns','order_column_register_sortable');

În WP 3.1, manage_edit-${post_type}columns a fost înlocuit de manage${post_type}_posts_columns: codex

Chiar nu există nicio modalitate de a face această sortare implicită? Ca la Pagini?

A trecut mult timp, dar doar pentru a fi amintit, poți afișa opțiunea 'ordine meniu' în panoul de administrare, pur și simplu prin includerea 'page-attributes' în array-ul de opțiuni 'supports'. De exemplu:
register_post_type( 'columna',
array(
'labels' => array(
'name' => __( 'Coloane' ), // Traducere: Numele plural al tipului de postare
'singular_name' => __( 'Coloană' ), // Traducere: Numele singular al tipului de postare
),
'supports' => array( 'title', 'thumbnail', 'excerpt', 'page-attributes' ), // Suport pentru titlu, imagine evidențiată, fragment și atribute de pagină
'public' => true, // Tip de postare public
'has_archive' => false, // Fără arhivă
'menu_position'=>5 // Poziția în meniul admin
)
);

Persoana care postează întrebarea este deja conștientă de 'page-attributes'. Nu ar trebui să afișeze valoarea ordinii paginii în modul necesar.

Am 'page-attributes' în suporturile pentru tipul de postare personalizat, ceea ce adaugă ordinea din meniu în bara laterală atunci când editez una dintre aceste tipuri de postări personalizate, dar atunci când vizualizez lista tuturor elementelor din tipul de postare personalizat în wp admin, nu afișează coloana pentru ordinea din meniu. Este nevoie de altceva pentru a o afișa? Sub opțiunile de ecran pentru coloane, data este singura opțiune și este bifată.

@anu m-a îndreptat în direcția corectă, însă acel cod nu este modern
Soluție modernă && funcționează pe WordPress 5.4
- adaugă suport
- înregistrează coloana
- afișează valoarea coloanei
- fă coloana înregistrată sortabilă / specifică după ce ar trebui să sorteze
...
$MY_POST_TYPE = "flowers"; // doar pentru exemplificare
// suportul de bază (menu_order este inclus în page-attributes)
add_post_type_support($MY_POST_TYPE, 'page-attributes');
// adaugă o coloană în administrarea tipului de postare
// practic înregistrează coloana și setează titlul acesteia
add_filter('manage_' . $MY_POST_TYPE . '_posts_columns', function ($columns) {
$columns['menu_order'] = "Ordine"; //cheia coloanei => titlu
return $columns;
});
// afișează valoarea coloanei
add_action( 'manage_' . $MY_POST_TYPE . '_posts_custom_column', function ($column_name, $post_id){
if ($column_name == 'menu_order') {
echo get_post($post_id)->menu_order;
}
}, 10, 2); // prioritate, număr de argumente - OBLIGATORIU AICI!
// fă-o sortabilă
$menu_order_sortable_on_screen = 'edit-' . $MY_POST_TYPE; // numele ecranului paginii de LISTARE a postărilor
add_filter('manage_' . $menu_order_sortable_on_screen . '_sortable_columns', function ($columns){
// cheia coloanei => Variabilă Query
// menu_order este implicit în Query, așa că putem să-l setăm direct
$columns['menu_order'] = 'menu_order';
return $columns;
});
Dacă ești interesat cum ai putea face o coloană sortabilă care nu se bazează pe o variabilă Query de bază, ai putea experimenta cu filtrul request
așa cum este descris în documentația de aici: https://make.wordpress.org/docs/plugin-developer-handbook/10-plugin-components/custom-list-table-columns/#sortable-columns

Nu te permite doar să specifici un părinte pentru element în ecranul de editare - am încercat și nu face nicio diferență în ecranul de listare

scuze, nu am realizat că vrei să adaugi coloane personalizate la listă... poate acest link îți oferă un punct de plecare: http://shibashake.com/wordpress-theme/add-custom-post-type-columns
