it-swarm.com.de

Sortieren nach benutzerdefinierten Spalten in der WordPress-Admin-Post-Tabelle

Ich weiß, dass diese Frage wahrscheinlich schon oft gestellt wurde, aber ich habe so viele vermeintliche Lösungen für dieses Problem ausprobiert und bisher hat anscheinend nichts funktioniert.

Ich verwende das Advanced Custom Fields Plugin, um ein benutzerdefiniertes Dropdown-Feld mit dem Namen statuses für einen benutzerdefinierten Beitragstyp st_kb zu erstellen. Mit dem erstellten Feld ist es mir gelungen, eine Spalte mit dem darin angezeigten Feld im Abschnitt "Admin-Post" des Dashboards anzuzeigen. Ich möchte jedoch, dass dies sortierbar ist, und bisher konnte ich es nicht zum Laufen bringen.

Hier ist mein aktueller Code:

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");

Dadurch wird die Spalte in der richtigen Tabelle angezeigt, es sind jedoch keine Sortierpfeile verfügbar. Kann mir jemand weiterhelfen, um mich darauf hinzuweisen, was mit diesem Code nicht stimmt, oder habe ich möglicherweise einen Plugin-Konflikt?

1
soup-bowl

Der Filtername ist leicht falsch - verwenden Sie manage_edit-st_kb_sortable_columns. Da die eigentliche Sortierung nicht funktioniert, müssen Sie die Logik selbst implementieren:

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