【WordPress】管理画面の投稿表示件数の初期値をすべてのユーザー・投稿タイプで一括変更

  • URLをコピーしました!

WordPressの管理画面で投稿(ページ)の表示件数はデフォルトで20件です。
一覧の設定(表示オプション)から件数を変更することができますが、変更はユーザーごと・各投稿タイプごとに保存されるため、全ユーザー&投稿タイプ一括で変更したい場合は手間がかかります。

そこで今回はadd_filter(‘edit_[post_type]_per_page’)を使って、管理画面の投稿表示件数の初期値を変更します。

1ページに表示する件数は20件がデフォルト

結論のコードだけ見たい方はすべての投稿タイプで、ユーザーの設定値を確認して一括変更するコード

目次

add_filter(‘edit_[post_type]_per_page’)を使ういろいろな方法とその問題

ユーザーの設定値が反映されない例

add_filter(‘edit_posts_per_page’)を使うとすべての投稿タイプの一覧表示件数を変更できますが、これを使って設定変更するとユーザーの設定値が何であってもPHPで指定した値でしか表示できません。

add_filter('edit_posts_per_page', function ($posts_per_page){return 100;});

ユーザーの設定値の有無を判定する(ただし投稿タイプが限定される)

get_user_option(‘edit_[post_type]_per_page’) でユーザーの設定値があるかどうかを確認すれば、ユーザーの設定値が存在しないときだけPHPで指定した値を適用することができます。

ただし、このままでは投稿タイプごとに edit_post_per_page , edit_page_per_page, … と何度も書かなければなりません。

add_filter('edit_post_per_page',function ($posts_per_page){
        //ユーザーの設定値があるか確認
        $n = (int)get_user_option('edit_post_per_page');
        if(empty($n)||$n<1){
            //ユーザー設定値がなければ50を返す
            $posts_per_page = 50;
        }
        //ユーザーの設定値が存在するなら変更なし
        return $posts_per_page;
    });

参考:https://twitter.com/xakuro_com/status/1577599931493539840

すべての投稿タイプで、ユーザーの設定値を確認して一括変更するコード

「現在どの投稿タイプの一覧ページであるか」を確認し、edit_***_per_pageの*** に現在の投稿タイプslugが入るようにコードを変更します。

各投稿タイプの一覧ページを表示する際に以下のような処理を行います。

  1. 現在が管理画面の記事一覧ページだったら
  2. 現在の投稿タイプslugの確認
  3. 現在の投稿タイプにユーザーによる一覧表示件数設定あるかを確認
  4. ユーザーの設定値がなければ、指定した値を返す
add_action('admin_init', 'change_admin_post_per_page');
function change_admin_post_per_page(){
    global $pagenow;
    if (is_admin() && ($pagenow === 'edit.php')){
        //現在が管理画面の記事一覧ページであれば、現在の投稿タイプを取得
        $current_post_type = 'post';
        if(!empty($_GET["post_type"])){
            $current_post_type = $_GET["post_type"];
        }
        //add_filter('edit_[post_type]_per_page')を使う
        add_filter('edit_'.$current_post_type.'_per_page',function ($posts_per_page) use ($current_post_type){
            //ユーザーの設定値があるか確認
            $n = (int)get_user_option('edit_'.$current_post_type.'_per_page');
            if(empty($n)||$n<1){
                //ユーザー設定値がなければ50を返す
                $posts_per_page = 50;
            }
            //ユーザーの設定値が存在するなら変更なし
            return $posts_per_page;
        });
    }
}

タクソノミー(カテゴリー)の一覧ページの件数も変更したい場合のコード

edit_posts_per_page を利用した場合タクソノミーの一覧ページの表示件数も変更されるので、edit_***_per_pageを使った方法でもタクソノミーも対象にしたいかもしれません。
その場合は以下のようになります。

add_action('admin_init', 'change_admin_post_per_page');
function change_admin_post_per_page(){
    global $pagenow;
    if (is_admin() && ($pagenow === 'edit.php' || $pagenow === 'edit-tags.php')) {
        $current_page = 'post';
        if(!empty($_GET["post_type"])){
            $current_page = $_GET["post_type"];
        }
        if(!empty($_GET["taxonomy"])){
            $current_page = $_GET["taxonomy"];
        }
        add_filter('edit_'.$current_page.'_per_page',function ($posts_per_page) use ($current_page){
            $n = (int)get_user_option('edit_'.$current_page.'_per_page');
            if(empty($n)||$n<1){
                $posts_per_page = 50;
            }
            return $posts_per_page;
        });
    }
}

備考

  • 2023/03
    • コードを関数にしてadmin_initで実行するように変更しました。アドバイスありがとうございました!
よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

目次