Supponiamo che il custom post type in questione si chiama “EVENTO”, e vogliamo mostrare data di inizio e data di fine nelle liste dei post nel backend.
Per prima cosa useremo due filtri per fare questo.
Il primo sarà “manage_edit-{SLUG-POST-TYPE}_columns” nel nostro caso “manage_edit-evento_columns”. Questo filtro ci permetterà di creare le colonne dove poi mostreremo le date.
Il secondo sarà “manage_{SLUG-POST-TYPE}_posts_custom_column” nel nostro caso “manage_evento_posts_custom_column“. Questo filtro ci permettrà di popolare le righe delle nostre colonne con le date di inizio e fine evento.
Scriviamo la funzione per il primo filtro.
/**
* add extra columns to post type evento
*
* @author Toni Guga <toni@schiavoneguga.com>
* @param [type] $columns
* @return void
*/
function evento_extra_columns($columns)
{
$columns['evento_data_inizio'] = __('Data di Inizio', 'your-translate-text-domain');
$columns['evento_data_fine'] = __('Data di Fine', 'your-translate-text-domain');
return $columns;
}
add_filter('manage_edit-evento_columns', 'evento_extra_columns', 10);
Scriviamo la funzione per il secondo filtro.
/**
* populate evento extra columns with data
*
* @author Toni Guga <toni@schiavoneguga.com>
* @param [type] $column
* @return void
*/
function evento_extra_columns_content($column)
{
global $post;
//esempio con campi ACF
if ('evento_data_inizio' === $column) {
echo get_field('data_di_fine', $post->ID);
} elseif ('data_di_inizio' === $column) {
echo get_field('data_di_fine', $post->ID);
}
// esempio con un custom field
// echo get_post_meta($post->ID, 'data_di_fine', true);
}
add_action('manage_evento_posts_custom_column', 'evento_extra_columns_content');
Se si usano solo queste due funzioni otteniamo due colonne con i dati che però non possono essere ordinabili.
Per rendere ordinabli queste colonne abbiamo bisogno ancora di due piccole funzioni, che verranno richiamate in altretanti filtri.
Primo filtro “manage_edit-{SLUG-POST-TYPE}_sortable_columns” nel nostro caso “manage_edit-evento_sortable_columns”.
Secondo filtro “pre_get_posts” che serve per passare i paramentri giusti per ordinare i dati nelle colonne.
Scriviamo la funzione per il primo filtro.
/**
* make this extra columns sortable
*
* @author Toni Guga <toni@schiavoneguga.com>
* @param [type] $columns
* @return void
*/
function evento_extra_columns_content_sortable($columns)
{
$columns['evento_data_inizio'] = 'evento_data_inizio';
$columns['evento_data_fine'] = 'evento_data_fine';
//To make a column 'un-sortable' remove it from the array
//unset($columns['date']);
return $columns;
}
add_filter('manage_edit-evento_sortable_columns', 'evento_extra_columns_content_sortable');
Scriviamo la funzione per il secondo filtro.
/**
* adjust orderby query
*
* @author Toni Guga <toni@schiavoneguga.com>
* @param [type] $query
* @return void
*/
function mbc_admin_columns_orderby($query)
{
// limitia utilizzo solo per il beckend
if (!is_admin()) {
return;
}
$post_type = $query->get('post_type');
$order_by = $query->get('orderby');
if ('evento_data_inizio' == $orderby) {
$query->set('meta_key', 'data_di_fine');
$query->set('orderby', 'meta_value');
// usa meta_value_num in caso di numeri
} elseif ('evento_data_fine' == $orderby) {
$query->set('meta_key', 'data_di_fine');
$query->set('orderby', 'meta_value');
// usa meta_value_num in caso di numeri
}
}
add_action('pre_get_posts', 'mbc_admin_columns_orderby');
Bene salvo refusi questo codice dovrebbe funzionare, e si può adattare a qualsiasi post type custom o standard ed anche a tipi di dati differenti da mostrare.
Mi piace:
Mi piace Caricamento...