Suggerimento rapido rendere ordinabile la colonna personalizzata

In un recente articolo di Claudio Simeone, ha dimostrato come aggiungere colonne extra al tuo post, o tipo di post personalizzato, schermate di amministrazione (o rimuovere quelle esistenti). In questo rapido suggerimento, mi baso su ciò mostrandoti come rendere ordinabili le tue colonne appena create.


Per dire a WordPress quali colonne vuoi registrare come ordinabili hai bisogno di questo filtro:

 gestire _ $ schermo-> id _sortable_column

Per post e pagine, $ Schermo-> id è 'modifica post' e 'modifica Pagina'rispettivamente. In generale, per un tipo di post con nome 'my-post-tipo', è 'edit-my-post-tipo'.

Il filtro passa una matrice con i nomi delle colonne ordinabili come chiavi e cosa ordinare in base a un valore. Più precisamente, i valori dettano ciò che l 'ordinato da'il parametro è impostato come nella query che popola la tabella. Allo stesso modo in cui puoi rimuovere le colonne, puoi anche rendere le colonne 'unsortable' rimuovendole da questa matrice. Vediamo un esempio:


Registra una colonna

Seguendo l'articolo di Claudio, supponiamo di aver aggiunto la colonna "slice" al nostro tipo di "torta", che possiamo fare come segue:

 add_filter ('manage_edit-cake_columns', 'my_extra_cake_columns'); function my_extra_cake_columns ($ columns) $ columns ['slices'] = __ ('Slices', 'myplugindomain'); restituire $ colonne; 

E abbiamo aggiunto il contenuto per la colonna come segue:

 add_action ('manage_cake_posts_custom_column', 'my_cake_column_content', 10, 2); function my_cake_column_content ($ column_name, $ post_id) if ('slices'! = $ column_name) return; // Ottieni il numero di fette dal post meta $ slices = get_post_meta ($ post_id, 'slices', true); echo intval ($ slices); 

Ho memorizzato le porzioni come post meta, ma le tue colonne possono essere popolate da altri dati.


Rendi ordinabile una colonna

Ora registriamo la nostra colonna personalizzata come 'ordinabile'. Come accennato in precedenza usiamo il gestire _ $ schermo-> id _sortable_column filtro. Il $ Schermo-> id in questo caso è 'Edit-cake'.

 add_filter ('manage_edit-cake_sortable_columns', 'my_sortable_cake_column'); function my_sortable_cake_column ($ columns) $ columns ['slices'] = 'slice'; // Per rendere una colonna 'non ordinabile' rimuoverla dall'array // unset ($ columns ['date']); restituire $ colonne; 

La chiave del $ colonne array indica una colonna ordinabile e il suo valore indica a WordPress cosa impostare 'ordinato da'alla domanda. Se quel valore fosse uno deiordinato daè nativamente inteso da WordPress (questi includono 'titolo','Data','modificato','COMMENT_COUNT', o in effetti uno degli altri elencati in WP_Query nel codice WordPress, potremmo fermarci qui. L'eccezione a questa regola, come in questo esempio, è l 'meta_value' e 'meta_value_num'parametri, che ci impongono di impostare anche una meta chiave.

Se vogliamo ordinare per meta valore, o in qualche altro modo WordPress non capisce automaticamente che devi dire cosa intendi ordinando per 'fetta'. Se ordinate per posta meta, il modo più semplice per farlo è quello di agganciare il pre_get_posts azione. Questo passa un oggetto query che possiamo modificare. Si noti che questa azione viene attivata per tutte le query predefinite (fronte e retro). Anche se è improbabile che causi problemi, a meno che tu non voglia che WordPress interpreti ordinato da impostato su 'slice' sul front-end, è una buona idea effettuare solo le query sul lato admin.

 add_action ('pre_get_posts', 'my_slice_orderby'); function my_slice_orderby ($ query) if (! is_admin ()) return; $ orderby = $ query-> get ('orderby'); if ('slice' == $ orderby) $ query-> set ('meta_key', 'slices'); $ Query-> set ( 'orderby', 'meta_value_num'); 

Questo controlla se la nostra query è ordinata da 'slice' e se lo è, dice a WordPress di ordinare numericamente il valore della meta 'post' delle fette. Se si desidera ordinare il valore in ordine alfabetico, utilizzare 'meta_value' piuttosto che 'meta_value_num'.

$ query è un WP_Query oggetto, quindi qualsiasi cosa tu possa ordinare usando quell'oggetto, puoi ordinare le colonne per. Per qualsiasi altra cosa più complicata, dovrai agganciarti al posts_orderby (o post_clauses) gancio, ma questo è fuori dallo scopo di questo suggerimento rapido.

Nota: Se un post non ha un valore memorizzato per quella meta-chiave, allora non apparirà quando si ordina per quel meta-chiave. Questo è diverso da un post che ha 0 memorizzato come meta-valore.