web-dev-qa-db-fra.com

Tri des colonnes personnalisées dans la table des publications de l'administrateur WordPress

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?

1
soup-bowl

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' );
2
TheDeadMedic