let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

【WordPress】カスタム投稿&カスタムカテゴリ追加・管理画面で一覧にカテゴリやカスタムフィールド表示方法まとめ(プラグイン無)

更新: 2024/03/01 3252文字

今回はWordPressで、『カスタム投稿&カスタムカテゴリ追加、さらに管理画面で一覧にそのカテゴリやカスタムフィールドを表示する』という題材です。管理人は最近取引先からの依頼で『事業部ごとにカスタム投稿を設定する』みたいな案件にあたったのですが、設定方法を良く忘れてしまうため、メモ的にコラムにしました。さっそく内容を確認していきましょう。

今回のスクリプト(カスタム投稿&カスタムカテゴリ追加、管理画面にカテゴリやカスタムフィールドのカラム追加)

まとめたらこんな感じになりました。テーマfunctions.phpに書くやつです。管理人がこのサイトでやってみた環境は『WordPressバージョン:6.4.3.PHPバージョン:8.2.16』でした(廃止ファンクションとかは使ってないですが、一応)。これを実行すると・・・

こんな感じで、カスタム投稿&カスタムカテゴリ、さらにカテゴリやカスタムフィールドのカラム追加まで行われます。なお、このカスタム投稿で抜粋欄が表示されている理由ですが、上記のスクリプトに由来するものではなく・・

管理人がmanage_posts_custom_columnsフックを使って、全部のpostにカラムを追加しているからなので、ご了承ください。

各種ファンクションの内容を確認

というわけで、上記のコードにあった4つのファンクションについて確認をしていきます。なお、今回のカスタム投稿については、以下のような形で設定しています。

カスタム投稿・表示名 そのほか
カスタム投稿名
(スラッグ)
others
カスタムカテゴリ・表示名 『そのほか』分類
カスタムカテゴリ名
(taxonomy)
others-cat
追加カスタムフィールド名 test-field

まずはカスタム投稿を追加(register_post_type & initフック)

色がついててわかりやすいのでVisual Studio Codeスクショで。まずはカスタム投稿を追加します。パラメータはいろいろあるんですけど、『show_ui、show_in_menuはデフォルト値がtrueっぽい(指定しなくても管理画面表示される)』ので書いてません。『has_archive(アーカイブ持たせる)』も、あとでテーマで一覧作れるので未設定で。

『exclude_from_search』は、一般の投稿と混ざって表示されないよう、trueにしてフロント検索で出ないようにしました。また、『show_in_rest』については、rest-apiやブロックエディタで使う場合はtrueにします。

あと使うパラメータはsupportsでしょうか。title(タイトル),editor(本文エディタ),excerpt(抜粋),thumbnail(サムネ)あたりを設定すると、普通の投稿タイプのように使えます。カスタムフィールド指定は、プラグインのほか、ここでもできます。

ただし、supportsで指定したカスタムフィールドは、WPデフォルトの形になります。ACFやSCFなどのカスタムフィールドプラグインで指定する場合は、そっちの方が使いやすいかもしれません。

作ったカスタム投稿にカテゴリを設定(register_taxonomy,initフック)

一般的には『カスタムタクソノミー』という名前でも呼ばれます。カスタム投稿にカテゴリを追加するには『register_taxonomy』を使用。ややこしいんですけど『others-cat』というのがカテゴリ自体の名称で、『others』が、カテゴリをつける、先ほど指定したカスタム投稿名です。 ここのパラメータで使い勝手のポイントになりそうなのが『hierarchical(階層構造)』ですかね。

hierarchicalをfalseにした場合、タグみたいな感じの操作感になります。

hierarchicalをtrueの場合は、通常のカテゴリみたいな感じに。

また、『階層構造』とのことなので、親カテゴリーを指定できるようになります。管理人はhierarchicalがtrueのほうが使いやすかったんですけど、ここはお好みで選択します。

管理画面に、カテゴリやカスタムフィールド表示のカラム追加(manage_〇〇_posts_columnsフック)

カテゴリは作ったけど、今の状態だと管理画面一覧に出てこないので、まずは表示用のカラムを追加します。manage_〇〇_posts_columnsフックを使いますが、〇〇のところはカスタム投稿名を入れます。manage_posts_columnsでもできるんですけど、この場合は全部の投稿タイプにカラムが追加されてしまいます。

あとは、カテゴリのほかカスタムフィールドも取れるように、2つ追加します。
一つ目『カラム名:others_cat_column,表示名:カテゴリ
二つ目『カラム名:others_custom_column,表示名:custom
というように指定しました。このカラム名はあとで使います。

ここまでやると、管理画面の一覧にカラムが追加されるようになります。あとは該当する値をとって表示させればokです。

追加したカラムで、値を取得して表示(manage_〇〇_posts_custom_columnフック)

次はカラムに値を取得して表示させていきます。さっきのカラム名を分岐に使って、『others_cat_columnのときはget_the_terms(タクソノミ取得)』『others_custom_columnのときはget_post_meta(カスタムフィールド取得)』という流れです。

ここで、『$catname = $termarr[0]->name;』となっているのは、get_the_termsするとarray(object(WP_Term))が返ってきて、その要素にアクセスするためです(単純に文字列は出ません)。

また、アクションフックadd_actionの書式が『フックかける関数,呼び出したい関数,優先度,パラメータ数』となっていて、呼び出したい関数(いま定義してるやつ)のパラメータが『$column_name, $post_id』の2個なので、最後に2と書いています。これを1とかに減らすとエラーになりますが、3だとスルーして動くようです(笑)

ここまでやると、カスタム投稿カテゴリ&指定したカスタムフィールドが、管理画面の一覧でも確認できるようになります。

あとがき・まとめ

  • register_post_typeとregister_taxonomyでカスタム投稿とそのカテゴリを設定できる
  • register_taxonomyのとき、hierarchicalをtrueで、通常のWPカテゴリみたいに使える
  • カラム追加時、カスタム投稿を入れた名称でフックすると、その投稿タイプだけに適応される
  • 設定したカラム名は、値を取るときに使う

まとめるとこんな形でしょうか。他にもこのページで取り上げていないパラメータやソート・他の項目を表示させたい(サムネイルなど)などもありますので、いろいろ調査してみてください。


【カテゴリ】- WordPress管理画面カスタマイズ
【タグ】- , ,

関連記事