web-dev-qa-db-ja.com

カスタム投稿タイプの並べ替え順が管理領域で機能しない

私はWordPressサイトにいくつかのカスタム投稿タイプがあります。これらのカスタム投稿タイプでは、管理領域でアルファベット順または日付順に投稿を並べ替えることができません。

私はこれを試して解決しようとオンラインで調べましたが、うまくいくものが見つからないようです。

管理領域の投稿数にアクションを適用する必要がありますか?

3
Kane Mitchell

'title'と 'date'の列はWordPressのデフォルトのテーブル(CPTの場合でも)なので、それらの列が置き換えられていない限り、それらは自動的にソート可能になるはずです。

カスタム列の場合、列を「ソート可能」として登録するためのフックがあります。 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;
}

しかし、この only はユーザーインターフェースを処理します。実際にはソートを実装していません。そのためにはpre_get_postsでクエリを傍受する必要があります。

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