Vous voulez ajouter une nouvelle colonne dans la liste de votre custom post type. Vous souhaitez aussi pouvoir ordonner la liste en fonction de cette colonne.
Rien de plus simple. Pour ce faire, il suffit d’ajouter ce code dans functions.php
(Evidemment, prenez soin de remplacer toutes les occurences de CPT, ACF_FIELD et ACF_FIELD_LABEL par les votres)
// ajout de la colonne
function add_acf_column($columns) {
if(!is_admin())
return;
$finalColumns = array();
foreach ($columns as $k=>$v) {
$finalColumns[$k] = $v;
if($k=='title')
$finalColumns['ACF_FIELD'] = 'ACF FIELD LABEL';
}
return $finalColumns;
}
add_filter('manage_CPT_posts_columns', 'add_acf_column');
// ajout du contenu du champ pour chaque post
function add_acf_column_value($column, $post_id) {
if(!is_admin())
return;
switch ($column) {
case 'ACF_FIELD':
echo get_the_title(get_post_meta($post_id, 'ACF_FIELD', true));
break;
}
}
add_action('manage_CPT_posts_custom_column', 'add_acf_column_value', 10, 2);
// ajout du tri
function add_acf_column_sortable( $columns ) {
if(!is_admin())
return;
$columns['ACF_FIELD'] = 'ACF_FIELD_LABEL';
return $columns;
}
add_filter('manage_edit-CPT_sortable_columns', 'add_acf_column_sortable');
// modification de l'order by
function add_acf_column_orderby($query) {
if(!is_admin())
return;
$orderby = $query->get( 'orderby');
if('ACF_FIELD' == $orderby) {
$query->set('meta_key','ACF_FIELD');
$query->set('orderby','meta_value_num');
}
}
add_action('pre_get_posts', 'add_acf_column_orderby');