web-dev-qa-db-ja.com

ユーザー管理画面のカスタム列を並べ替え可能にする方法

各ユーザーの会社を表示するために、ユーザー管理画面に列を追加しています。この列を表に表示することに成功しましたが、アルファベット順にソートできるようにするのには本当に苦労しています。

列ヘッダーはソート可能としてアクティブ化されているようですが、リストの順序を再編成するためにクリックすると、会社とは対照的に、実際にはユーザー名に基づいてテーブルがアルファベット順に並べ替えられます。

私は他の解決策を探して適応させるためにウェブ上で多くの時間を費やしましたが、それでもまだ運が悪いです。カスタム列を投稿タイプの管理画面に並べ替えることができるようにしたが、ユーザー管理画面にはできない例はたくさんあります。

以下は私がユーザーの管理画面に "Company"列を生成するために現在使用しているコードで、作者のメタデータ "company"を取得しています。

//MAKE THE COLUMN SORTABLE

function user_sortable_columns( $columns ) {
    $columns['company'] = 'Company';
    return $columns;
}

add_filter( 'manage_users_sortable_columns', 'user_sortable_columns' );

add_action( "pre_get_users", function ( $WP_User_Query ) {

if ( isset( $WP_User_Query->query_vars["orderby"] )
    && ( "company" === $WP_User_Query->query_vars["orderby"] )
) {
    $WP_User_Query->query_vars["meta_key"] = "company_name";
    $WP_User_Query->query_vars["orderby"] = "meta_value";
}

}, 10, 1 );
5
Jordan Rogers

これは私のコードで、ユーザーテーブルにソート可能なカスタム列( Vendor ID と呼ばれる)を追加します。

function fc_new_modify_user_table( $column ) {
    $column['vendor_id'] = 'Vendor ID';
    return $column;
}
add_filter( 'manage_users_columns', 'fc_new_modify_user_table' );

function fc_new_modify_user_table_row( $val, $column_name, $user_id ) {
    switch ($column_name) {
        case 'vendor_id' :
            return get_the_author_meta( 'vendor_id', $user_id );
        default:
    }
    return $val;
}
add_filter( 'manage_users_custom_column', 'fc_new_modify_user_table_row', 10, 3 );

function fc_my_sortable_cake_column( $columns ) {
    $columns['vendor_id'] = 'Vendor ID';

    //To make a column 'un-sortable' remove it from the array unset($columns['date']);

    return $columns;
}
add_filter( 'manage_users_sortable_columns', 'fc_my_sortable_cake_column' );

シンプルで私にとってはうまくいきます。

2

アクションrequestはpostと連動します。ユーザーの場合はpre_get_usersです。

add_action("pre_get_users", function ($WP_User_Query) {

    if (    isset($WP_User_Query->query_vars["orderby"])
        &&  ("company" === $WP_User_Query->query_vars["orderby"])
    ) {
        $WP_User_Query->query_vars["meta_key"] = "company_name";
        $WP_User_Query->query_vars["orderby"] = "meta_value";
    }

}, 10, 1);
1
mmm