Je sais que cette question a probablement été posée à maintes reprises, mais j’ai essayé de nombreuses solutions supposées à ce problème et jusqu’à présent, rien ne semble avoir fonctionné.
J'utilise le Champs personnalisés avancés plugin pour créer un champ déroulant personnalisé appelé statuses
dans une publication personnalisée de type st_kb
. Avec le champ créé, j'ai réussi à obtenir une colonne affichée dans la section Postes administratifs du tableau de bord avec le champ indiqué. Cependant, j'aimerais que cela soit triable et jusqu'à présent, je n'ai pas réussi à le faire fonctionner.
Voici mon code actuel:
function add_column($cols) {
$cols['bkb_status'] = 'Status';
return $cols;
}
function add_sort_register_sortable($cols) {
$cols['bkb_status'] = 'statuses';
return $cols;
}
function my_custom_columns($column) {
global $post;
if ($column == 'bkb_status') {
if (get_field('statuses') != false) {
echo get_field('statuses');
} else {
echo 'Not set';
}
}
}
add_action("manage_st_kb_posts_custom_column", "my_custom_columns");
add_filter("manage_st_kb_posts_columns", "add_column");
add_filter("manage_st_kb_posts_sortable_columns", "add_sort_register_sortable");
Cela montrera la colonne dans la table correcte, mais il n'y a pas de flèches de tri disponibles. S'il vous plaît, est-ce que quelqu'un peut m'aider à me signaler ce qui ne va pas avec ce code, sinon je risque d'avoir un conflit de plugins?
Le nom du filtre est légèrement différent - utilisez manage_edit-st_kb_sortable_columns
. Pour que le tri ne fonctionne pas, vous devez implémenter vous-même la logique:
function wpse_208315_sort_by_status( $query ) {
if ( $query->is_main_query() && $query->get( 'orderby' ) === 'statuses' ) {
$query->set( 'meta_key', 'status' /* Post meta field name of status */ );
$query->set( 'orderby', 'meta_value' );
}
}
add_action( 'pre_get_posts', 'wpse_208315_sort_by_status' );