サポート » 使い方全般 » 管理画面のユーザー一覧を登録順に並べたい

  • 解決済 ayu06

    (@ayu06)


    はじめまして。
    Wordpressの管理画面内で表示されるユーザー一覧で、プラグインを使用せずに登録日時順に並べたいのです。一番最新の登録が最上段に来るようにです。

    ネット検索で調べたところ、functions.phpに下記コードを加えることで、登録日時を表示させることは出来ました。
    add_filter( ‘manage_users_columns’, ‘my_manage_users_columns’ );
    function my_manage_users_columns( $columns ) {
    $columns[‘registered’] = ‘登録日時’;
    return $columns;
    }
    add_filter( ‘manage_users_custom_column’, ‘my_manage_users_custom_column’, 10, 3 );
    function my_manage_users_custom_column( $dummy, $column, $user_id ) {
    if ( ‘registered’ == $column ) {
    return esc_html( get_userdata( $user_id )->user_registered );
    }
    }

    これで登録日時は表示されたのですが、項目名の所「ユーザー名」や「メールアドレス」の項目箇所のようにクリック出来る仕様になっていないので、並び変えることが出来ません。(T_T)

    クリックできなくてもいいのでデフォルト?標準?の状態で登録日時順に並べるようにするにはどうすればよいのでしょうか。プラグインを使いたくない理由は、以前にあれこれプラグインを入れていて、バージョンアップをした瞬間画面が真っ白になっちゃってどうにもならなくなったのです。色々調べるとなるべくならプラグインを使用しないことが望ましいとのことでしたので、プログラミング知識はないですが色々調べながらfunctions.phpで済むものはこちらに書くようにしています。

    どなたかお力をお貸し願えないでしょうか。
    よろしくお願いいたします。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • こんにちは

    users_list_table_query_argsというフィルタで、管理画面の一覧表示時の検索パラメータを変更することができます。

    以下のような感じでしょうか。

    function my_users_list_table_query_args($args){
    	$args['orderby'] = 'user_registered';
    	$args['order'] = 'ASC';
    	return $args;
    }
    add_filter('users_list_table_query_args', 'my_users_list_table_query_args', 10, 1);

    munyagu様

    ご回答ありがとうございます。
    ご提示いただいたコードをfunctions.phpに追記したのですが、
    ここからどうすればよいのでしょうか。
    私の方で先に書いたものはそのままで、その直後から記述しています。
    全然理解していなく、どう使えばいいのか分からず申し訳ありません。

    ただ、お教えいただいたコードを記述すると、
    標準で登録日時が古いものから並ぶようになりましたし、
    項目名の「ユーザー名」をクリックしてもabc順に並ぶこともありません。
    純粋に日時の古い順からの固定表示になっているのでしょうか。
    もしそうならば、日時の新しいもの順に並ぶようにするにはどうすればいいのでしょうか。

    引き続き、どうぞよろしくお願いいたします。

    munyagu様

    $args[‘order’] = ‘ASC’;

    $args[‘order’] = ‘desc’;
    に変更すると、登録日時の昇順、降順で並び方が変わります!
    これは「ユーザー名」をクリックした時に、ユーザー名で並び変えるようには出来ないものでしょうか。
    日時順で完全固定になってしまうのでしょうか。
    アドバイスいただけると幸いです。

    どうぞよろしくお願いいたします。

    こんにちは

    下記のコードで、ソート可能な項目に変更できると思います。

    function my_manage_users_sortable_columns( $columns ) {
    	$columns['registered'] = 'registered';
    	return $columns;
    }
    add_filter( 'manage_users_sortable_columns', 'my_manage_users_sortable_columns' );

    カラムの差し替え実装できそうでしたら、ページ割り当ては必要なさそうですね。

    • この返信は2 ヶ月、 1 週前に  msio さんが編集しました。理由: 必要なさそうなアドバイスをおくっておりました…。

    ishitaka様

    ご回答ありがとうございます。
    出来ました!

    これですが、通常状態で「登録日時の新しい順」にしておく方法はあるのでしょうか。
    ユーザー名、メール、登録日時、それぞれで昇順・降順に出来るのでこれだけでも凄いのですが、
    左メニューの「ユーザー一覧」をクリックした時に遷移する最初のページで、
    登録日時の新しい順に表示出来たら、と思うのですが。
    贅沢ですみません。

    msio様

    ご回答ありがとうございます。
    内容読ませていただきました。

    へぇ~~~、っという内容で勉強になりました。
    深く理解は出来てないですが、仕組みの説明にうなずきました。
    わざわざ編集までして要点を示して下さりありがとうございます。
    絡むの差し替えとかはよく分からないので、すみません。。

    下記のコードで、登録日時の新しい順(登録日時で降順)で表示されると思います。

    function my_pre_user_query_orderby_registered( $query ) {
    	global $pagenow;
    	if ( is_admin() && $pagenow === 'users.php' && ! isset( $_GET['orderby'] ) ) {
    		$query->query_orderby = 'ORDER BY user_registered DESC';
    	}
    
    }
    add_action( 'pre_user_query', 'my_pre_user_query_orderby_registered' );

    贅沢ですみません。

    いえいえ、当然出てくる要望ではないでしょうか。
    トピックタイトルから逸脱した内容の新たな質問でしたら新規にトピックを立てることをお勧めするところですが、トピックタイトルの通りなのでいいかなと思います。

    ishitaka様

    ご連絡ありがとうございます!
    出来ましたよ!!

    元々書いていたコードの後に、ishitaka様が↑で書いていただいたコードを追加記述すると、登録日時の新しいもの順で並びつつ、ユーザー名やメールアドレスの昇順・降順でも並び替えられるようになりました。
    こんなコードが書けるなんて羨ましいです。凄いです。

    他にもご協力いただいた皆さんに対して、この場を借りる形で申し訳ないのですが、
    お礼を申し上げたいと思います。ありがとうございました。m(__)m

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • このトピックに返信するにはログインが必要です。