WordPress 管理画面の一覧ページ当たりに表示される件数を増やす

WordPress の管理画面の中で、記事一覧ページとメディア一覧ページで1ページ当たりの表示される件数を増やす方法についてメモ。

コード

早速ですがコードは以下。テーマの functions.php に記述するかプラグインとしてインストールするかどちらでも。

<?php

// 投稿・固定ページ・カスタム投稿の一覧ページで有効
function variable_posts_per_page ($posts_per_page) {
    return 100;
}
add_filter('edit_posts_per_page', 'variable_posts_per_page', 10, 1);

// メディア一覧ページで有効
function variable_attachment_per_page ($media_per_page) {
    return 100;
}
add_filter('upload_per_page', 'variable_attachment_per_page', 10, 1);

フィルターフックを2つほど追加することで実現できました。なお、上述の例では共に1ページ当たり100件とました。

備考

上述のフィルターフックについていくつか気付いた点を書き留めておきます。

  • 要微調整
    • スペックやによって、データの量などに応じては表示件数が50件でも一覧表示でエラーを起こすことがある
    • 300件では一括削除の際のGETリクエストのURIが長すぎて怒られることがある
  • edit_{$post_type}_per_page
    • ドキュメント(edit_{$post_type}_per_page | Hook | WordPress Developer Resources)では edit_post_per_page の仲間として edit_attachment_per_page, edit_post_per_page, edit_page_per_page が例として挙げられています
    • しかし、 edit_posts_per_page だけで投稿一覧ページだけでなく、固定ページ一覧ページやカスタム投稿一覧ページまで効力を発揮しました
    • 「固定ページだけ」のときは edit_pages_per_page 、といったように「のみ」という場合は使い分け、全体で構わない場合は edit_posts_per_page だけで良い、という感じの使い分けになりそうです
  • s
    • 上述で edit_attachment_per_page, edit_post_per_page, edit_page_per_page を挙げましたし、ドキュメントやコアファイル(WordPress/post.php at af4b043a693fc7178ef8a1fcd0402f14fba0a040 · WordPress/WordPress · GitHub)でもそう書かれています
    • しかし、実際は edit_attachments_per_page, edit_posts_per_page でした。おそらく edit_page_per_page も edit_pages_per_page ではないかと思われます( edit_pages_per_page については未検証)
  • メディア一覧ページ
    • 上述で edit_attachments_per_page があったためこれが該当するのかと思いきや、効果なし
    • メディア一覧ページのフィルターフックは upload_per_page でした

特に s は気を付けないと見逃すので注意 (いずれも WordPress 5.7.1 で検証)。

2010年の edit_posts_per_pageedit_post_per_page についての Trac がありましたが、議論されているコードは wp-admin/includes/template.php 内のもので今回の wp-admin/includes/post.php, wp_edit_posts_query とは別の場所のコードなので直接の関係はなさそうです。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。