it-swarm.com.de

Benutzerdefinierte Post-Sortierreihenfolge funktioniert im Administrationsbereich nicht

Ich besitze eine WordPress-Site mit einigen benutzerdefinierten Beitragstypen. Mit keinem dieser benutzerdefinierten Beitragstypen kann ich die Beiträge im Administratorbereich alphabetisch oder nach Datum sortieren.

Ich habe mich online umgesehen, um das herauszufinden, aber ich kann anscheinend nichts finden, was funktioniert.

Muss ich beim Laden von Posts im Admin-Bereich eine Aktion ausführen?

3
Kane Mitchell

Die Spalten 'title' und 'date' sind WordPress-Standardtabellen (auch für CPTs), daher sollten sie automatisch sortierbar sein, sofern diese Spalten nicht ersetzt wurden.

Für benutzerdefinierte Spalten gibt es einen Haken zum Registrieren einer Spalte als "sortierbar": https://developer.wordpress.org/reference/hooks/manage_this-screen-id_sortable_columns/

//Filter is 'manage_edit-{custom post type}_sortable_columns
//or more generally 'manage_{screen id}_sortable_columns
add_filter( 'manage_edit-cpt_sortable_columns', 'wpse221267_cpt_sortable_columns' );
function wpse221267_cpt_sortable_columns( $columns ) {
    //$columns is an array indexed by column identifier
    //and the value is a sort identifier. This sets the orderby parameter (see below)
    //Each element in $columns corresponds to a sortable column
    $columns['column_id'] = 'sort_identifier';
    return $columns;
}

Dieses only behandelt jedoch die Benutzeroberfläche: Es implementiert die Sortierung nicht wirklich. Dazu müssten Sie die Abfrage unter pre_get_posts abfangen:

add_action( 'pre_get_posts', 'wpse221267_column_orderby' );  
function wpse221267_column_orderby( $query ) {  

    //Some sanity checking, you may want to check for screen ID too.        
    if( ! is_admin() ) {
        return;  
    }

    //This value will be determined by the column clicked
    //and its associated sort identifier (see above!)
    $orderby = $query->get( 'orderby');  
    $order   = $query->get( 'order' );

    if( 'sort_identifier' == $orderby ) {  
        //Modify $query to sort by $orderby and $order.
    }  
}  
2
Stephen Harris