カスタマイズ 2024.06.27

WordPressの投稿一覧ページをカスタマイズしてみる【前編 〜edit.php解説〜】

この記事を書いた人

株式会社e2e wp.geek編集部

WordPressサイト制作サービス「wp.make」やWordPress保守・運用サービス「wp.support」などを展開する株式会社e2eの情報発信チームです。お客様の課題解決に役立つ、WordPressの最新情報をお届けいたします。

はじめに

WordPressの管理画面の投稿一覧で絞り込みできる項目を増やしたり、検索機能でタイトル以外でも検索できるようにしたりといった、一覧ページに便利な機能を追加したいと思ったことはありませんか?

今回は、管理画面の一覧ページをカスタマイズするための前提として、投稿一覧ページを表示しているedit.phpの中身を紹介し、どのようにページが表示されているのか説明したいと思います。

edit.php とは

edit.phpは、WordPress管理画面内の「投稿一覧」、「固定ページ一覧」といった一覧ページを表示する php ファイルです。

「投稿一覧」では「https://〇〇〇.com/wp-admin/edit.php」、
「固定ページ一覧」では「https://〇〇〇.com/wp-admin/edit.php?post_type=page」
というリンクで表示されています。

また、カスタム投稿タイプを作成した場合、「https://〇〇〇.com/wp-admin/edit.php?post_type=xxx(カスタム投稿タイプ名)」
といったように呼び出されます。

例として、functions.phpにregister_post_typeを記述して、カスタム投稿タイプを作成してみます。[^1]

すると、メニューバーに「カスタム投稿」というメニューが表示されました。クリックして移動してみましょう。
カスタム投稿一覧ページのURLを見ると、「/wp-admin/edit.php?post_type=custom」となっています。

register_post_typeの第 1 引数( = カスタム投稿タイプ名)をパラメータとして edit.php が呼び出されていることがわかります。

edit.php がどのページを表示するファイルかわかりました。

次にedit.phpのコードを確認していきます。
重要な部分である「どの投稿タイプを表示するか」「どのように一覧を表示しているか」を決定している場所を見ていきましょう。

どの投稿タイプを表示するか

ページを表示するかの判定はグローバル変数『$typenow』と『$post_type』、『$post_type_object』を使用して判定しています。
それぞれ説明します。

$typenow を使用した文 [^edit.php line15-29]

$typenowは現在のページの投稿タイプを示すグローバル変数です。

投稿であれば『post』、固定ページであれば『page』というように、投稿タイプの名前が入っています。

そして、$typenow が空文字だったとき、『wp_die』関数を実行するようになっています。
『wp_die』は、WordPress の実行を終了し、エラーメッセージが入った html ページを表示する関数です。
引数として入れた文字列がエラーメッセージとして表示されます。

試しに、先ほどの『custom』のカスタム投稿タイプの一覧ページを表示した状態で、functions.phpに記述した『register_post_type』 のスラッグ名を書き換えてみます。

これで、『custom』という名前のカスタム投稿タイプは無くなりました。
『custom』のカスタム投稿タイプの一覧ページをリロードすると、このようなページが表示されます。

『custom』という名前のカスタム投稿タイプを表示するページなのに、『custom』という名前の投稿タイプが存在しなくなったため、エラーページが表示されました。

21 行目の if 文も同様に、カスタム投稿タイプのステータス『show_ui』が『true/false』を判定し、『false』であればエラーページを表示するというものとなります。

『show_ui』は管理画面のメニューバーに投稿タイプを表示するかを決定する値です。
『false』だと、メニューバーに投稿タイプのメニューが表示されません。

25 行目の if 文は、投稿タイプが『attachment』であれば、upload.php にリダイレクトするというようになっています。

upload.php は、メディアのライブラリページのファイルです。

残りも見ていきましょう。

$post_type、$post_type_object を使用した文 [^edit.php line35-50]

『$post_type』に『$typenow』、つまり投稿タイプの名前を代入し、『get_post_type_object』関数の返り値を『$post_type_object』に代入しています。

『get_post_type_object』は、指定した投稿タイプのオブジェクトを取得する関数です。
オブジェクトには、『register_post_type』の引数にもあった『labels』、『show_ui』、『show_in_menu』といった値が入っています。

最初の if 文は、この関数で何もオブジェクトを取得出来なかったとき、エラーページを表示するようになっています。
2つめの if 文は、『current_user_can』関数で、ユーザーがこのページの投稿タイプの編集権限を持っているかどうかを取得し、持っていなければエラーページを返すようになっています。

一覧の表示

次に、一覧ページがどのように作られているか見ていきます。 具体的には、下の図の部分です。

一覧を表示する際には、『$wp_list_table』という変数が使われています。『$wp_list_table』について見ていきましょう。

$wp_list_table

52 行目

ここで『$wp_list_table』を宣言しています。

『_get_list_table』は『WP_List_Table 』[^関数リファレンス/WP List Table]クラスのインスタンスをフェッチする関数です。

この場合は、引数に入れた『WP_Posts_List_Table』クラスのインスタンスがフェッチされます。

235 行目

『prepare_items』メソッドは、表示するデータを準備する関数で、描画の前にはこのメソッドを使用する必要があります。

HTML 部分 [^2]

HTML 部分はとてもシンプルなコードですが、『$wp_list_table』が使われている場所が 3 箇所あります。この 3 か所は以下の図の場所を描画しています。

『『views()』、『『search_box()』、『『display()』についてそれぞれ見ていきましょう。

views() [^3]

『views()』は、使用可能なビューのリストを描画するメソッドです。

簡単に説明すると、「すべて」、「ゴミ箱」といったリストのリンクなどを含んだ HTML 要素が入った配列を返す『get_views』メソッドを呼び出し、取得した配列を『foreach』で回してリストを作成しています。

search_box() [^4]

search_box()は、検索ボックスを描画するメソッドです。

引数を 2 つ持ち、第 1 引数はボタンの文字、第 2 引数は検索する『input』タグの id になります。

display() [^5]

『display()』は、テーブルを描画するメソッドです。

display()メソッドの中で複数のメソッドが呼び出されています。その中で、実際に表示されている部分を描画しているメソッドを説明します。

display_tablenav() [^6]

『>display_tablenav()』は、プルダウンリストを描画するメソッドです。

このメソッドの中の、『bulk_actions()』メソッドでプルダウンリストを作成しています。 『extra_tablenav()』は、複数のプルダウンリストを作成するときに使用します。詳細は次回説明します。

bulk_actions() [^7]

『get_bulk_actions()』メソッドは『[“edit” => “編集”, “trash” => “ゴミ箱へ移動”]』のような連想配列を返します。 この連想配列を『_actions』プロパティに入れ、それを『foreach』で回すことによってプルダウンリストを生成しています。

print_column_headers() [^8]

『print_column_headers()』メソッドは、『<th>』部分を描画します。

簡単に説明すると、『get_column_info』メソッドで『$_column_headers』というプロパティをセットします。

『$_column_headers』は『$columns』、『$hidden』、『$sortable』、『$primary』という 4 つの値が入っています。

『$columns』はカラム全体の配列、『$hidden』は hidden フィールドの値からなる配列、『$sortable』はソート可能なカラムの配列、『$primary』はカラムのスラッグとタイトルです。

そして『$colums』を『foreach』で回して『<th>』要素を生成しています。

display_rows_or_placeholder() [^9]

『display_rows_or_placeholder()』メソッドは、投稿のテーブルを描画します。

ここでの重要な部分は『single_row_columns()』メソッドです。

ここで『get_column_headers()』メソッドのときと同様に『get_column_info()』メソッドでカラムの情報を取得して、『columns』を『foreach』で回して生成しています。

そして、『column_$column_name()』というメソッドがあれば、そのメソッドを使用して中身を描画します。無ければ、『column_default()』メソッドで中身を描画します。

『WP_List_Table』クラスでは、左のチェックボックス部分の作成に、『column_cb()』メソッドが使われています。
また、投稿一覧では、『column_title()』や『column_comments()』なども使われています。

詳しくは次回説明しますが、自分で『column_$column_name()』を定義すれば、特定のカラムの表示内容をカスタマイズすることもできます。

まとめと次回予告

edit.php の中身についてまとめると、

  • どの投稿タイプのページなのかはグローバル変数$typenowの値を取得して判定している。取得できなければエラーページを表示する。
  • 一覧ページの表示にはWP_List_Tableクラスを使用している。 views()メソッドで使用可能なビューのリスト、search_box()メソッドで検索ボックス、displayメソッドでプルダウンリストを含めたテーブル全体を描画している。この 3 つのメソッドの中でも他のメソッドが複数呼ばれている。

edit.php がどのようにページを表示しているかはわかったので、次回は一覧ページをカスタマイズしていきます。

参考記事

  1. 関数リファレンス/register post type(※参考にしたWordPress日本語版Codexサイトが消えたためリンク解除)
  2. 投稿一覧ページ(※参考にしたWordPress日本語版Codexサイトが消えたためリンク解除)
  3. WP_List_Table::views()
  4. WP_List_Table::search_box()
  5. WP_List_Table::display()
  6. WP_List_Table::display_tablenav()
  7. WP_List_Table::bulk_actions()
  8. WP_List_Table::print_column_headers()
  9. WP_List_Table::display_or_placeholder()

WordPressサイト制作・カスタマイズなら「wp.make」にお任せ!

WordPressでのサイト制作やリニューアルを検討する時、以下のようなお悩みはありませんか?

  • WordPressに詳しい制作会社に依頼したいが、どこがいいかわからない…
  • セキュリティ対策をしっかりしたいが、社内にノウハウがないのでプロに任せたい…
  • WordPressに最適なサーバーの選定や構築から依頼したい…
  • SEO対策や高速化も考慮したサイト構築を行なってほしい…
  • 制作後の保守・運用についてもサポートしてほしい…
  • 今のサイトを簡単に運用できるようにしてほしい…

「wp.make」は、WordPressのプロフェッショナル集団によるWordPressサイト制作・カスタマイズサービスです。
サイトの制作だけでなく、WordPressに最適なサーバーの選定や構築といったインフラ面の支援から、SEO対策や表示スピードの高速化、高度なセキュリティ対策や制作後の保守・運用サポートまで、WordPressに関わることならあらゆるお悩みを解消いたします。

既存のお客さまからも
「コミュニケーションが取りやすく、クオリティが高い」
「WordPressのプロとして信頼感がある」
と大変ご好評をいただいています。

WordPressサイトの制作・カスタマイズをご検討されているなら、ぜひ以下からお気軽にご相談ください。

>> wp.makeに無料相談する

WordPress開発・カスタマイズなら 『wp.make』

wp.make資料

全案件WordPressのみ!
株式会社e2eの『wp.make』はWordPress専門のWeb制作サービスです。

WordPress案件だけを扱っているから、技術・ノウハウ・対応力が圧倒的!

【WordPressサイト制作でよくあるお悩み】
・運用シーンが想定されておらず、更新しづらかった…
・打ち合わせで専門用語が多くてわかりづらい…
・制作後の保守には対応してくれなかった…


こんな事態になる前に、ぜひ一度、ご相談ください!
WordPressサイトを作るなら、一番WordPressに詳しいところへ!