WordPressにカスタム投稿タイプを追加する(プラグインなし)

こんにちは。
株式会社ホームリンク代表の吉田です。

今日はちょっとマニアックというか玄人向けの投稿になるかと思います。
基本的には自分自身の備忘録として残しておきたいだけですなんですが...
興味のある方はどうぞお付き合いください。

WordPressとは

WordPressとは、コンテンツ・マネジメント・システム(Contents Management System=CMS)の一種で、主にWebサイトのコンテンツを構成する要素(例えば本文などのテキスト、写真などの画像、サイト自体のレイアウトやデザインなど)を一括して保存・管理するシステムのことです。

カスタム投稿タイプとは

カスタム投稿タイプとは、WordPressの通常の投稿タイプ(一般的にはブログを書いて投稿するのが多いと思います)や固定ページとは別に、投稿する内容を自分の自由に、好きなように設定できる(=カスタム)投稿タイプのことです。

よくある使い方としては、例えば企業のサイトでブログとは別に会社からのお知らせとか制作実績、施工事例など、日付をベースに内容をどんどん更新していくタイプのページが欲しいとした場合にカスタム投稿タイプが力を発揮します。

余談ですが、わざわざカスタム投稿タイプを使わずに、通常の投稿タイプの中でカテゴリー分けして、例えば、カテゴリー1はお知らせ、カテゴリー2は制作実績、カテゴリー3は施工事例という風にすることも可能です。
実際にこの方法を採用して、あとはサイトでの見せ方を工夫しているサイトもよく見かけますので、カスタム投稿タイプを使うのはほとんどがブログに精通していて自分なりのこだわりのあるマニアックな方々だと思います、自分も含めて。

当サイトでの使い方

では、当サイトでどのように使っているかというと、売買物件のページにカスタム投稿タイプを利用しています。
当サイトの場合、カスタム投稿を使わずに通常の投稿タイプでカテゴリー分けして更新していくとすると、売買物件が成約した場合に一覧から除外または削除する必要がありますが、これを一つの投稿タイプで管理していると通常の投稿に物件情報の投稿が埋もれてしまい、管理しづらくなるからという理由です。
また、後述しますが、カスタムフィールドを使って物件の詳細情報を入力していますので、通常の投稿タイプとは別にする必要もありました。

カスタム投稿タイプの使い方

それでは、実際にカスタム投稿タイプの使い方や設定方法を解説します。
WordPressでカスタム投稿タイプを使うには、

  1. プラグインを使う
  2. functions.phpにコードを書き込んで使う

以上の2つの方法があります。

プラグインを使えばものの数分でカスタム投稿タイプは実現可能ですが、プラグインを使うデメリットもありますので、当サイトでは後者の方法を採用しました。

プラグインを使う

今回はプラグインなしでカスタム投稿タイプを実装するのが目標でしたので、プラグインは使っていません。
なので、ここでは割愛しますが、有名どころではAdvanced Custom Fields(ACF)とかCustom Post Type UIなどがありますので、興味のある方はググってみてください。

functions.phpにコードを書き込んで使う

ここからが今日の本題です。
WordPressに何らかの機能を自分で追加(プラグインなしで追加)する場合、ほぼ100%の確率でfunctions.phpをいじる必要が出てきます。

まず注意点をお話しします。
このfunctions.phpは、テーマ特有の機能を追加するときに触るものなので、巷に出回っている有料・無料のテーマには何かしらがfunctions.phpに追加されているはずです。
そのため、そのテーマがアップデートした場合にはこのfunctions.phpも書き換えられる場合があります。
つまり、自分でカスタム投稿タイプを設定するのに既存のfunctions.phpに追記する形を取っていると、そのテーマがアップデートされた時にせっかく自分で追記したコードが上書きされて消えてしまう可能性が大なんです。

では、どうすればいいか。
それは子テーマを使うことです。

親テーマは他者が作ったテーマ本体で、子テーマは自分が作ったものなので、子テーマのfunctions.phpには自分の好きなようにコードが記述できますし、親テーマがアップデートされた場合も子テーマのfunctions.phpに記載されたコードはそのまま残ってサイトに反映できる、という何とも便利な仕組みです。
なお、子テーマの作り方はググったらたくさん出てきますので割愛します。

話が逸れました。
以下に、カスタム投稿タイプをプラグインなしで自分でfunctions.phpに書き込んで追加するときのコードの例を示します。
必ず子テーマのfunctions.phpに追記してください。

// カスタム投稿タイプ
function add_custom_post() {
register_post_type(
'buying-list',
array(
'label' => '売買物件',
'labels' => array(
'add_new' => '新規売買物件を追加',
'add_new_item' => '新規物件を追加',
'edit_item' => '売買物件の編集',
'view_item' => '売買物件を表示',
'search_items' => '売買物件を検索',
'not_found' => '売買物件は見つかりませんでした。',
'not_found_in_trash' => 'ゴミ箱に売買物件はありませんでした。',
),
'public' => true,
'has_archive' => true,
'show_in_rest' => true,
'menu_position' => 5,
'hierarchical' => false,
'supports' => array(
'title',
'editor',
'thumbnail',
'custom-fields',
)
)
);
}

add_action('init', 'add_custom_post');

私自身はPHPに精通しているわけではなく、むしろ何も分からない素人です。
なので、上のコードは色んなサイトを巡回して得たものを自分なりに繋ぎ合わせたり削除したりで完成させたものです。
専門の方が見たら何だこのコードはというご指摘もあるかと思いますが、私個人としては問題なく動けばいいやんという考えなのでご容赦ください。

少し解説しますが、上の例では、「売買物件」という名前のカスタム投稿タイプを追加するための記述となります。
6行目の「label」でそれを定義しています。
また、その下の「新規売買物件を追加」とか書いている箇所は、「売買物件」の文字部分をご自分が追加したいカスタム投稿タイプ名に差し替えればOKです。
ここでは、管理画面のあちこちで表示される文字列を自分好みに変更することができます。

それと、4行目に「buying-list」とありますが、これはスラッグと呼ばれる文字列で、カスタム投稿タイプの一覧ページを開く際のURLの一部になります。
例えば、当サイトの場合は「https://homelink-fukuoka.main.jp/buying-list/」という感じですね。
ここも適宜自分のサイトに合うように変更してください。
これでとりあえずカスタム投稿タイプは追加されたことになります。

カスタムタクソノミーを追加する

また訳のわからない言葉が出てきましたので解説します。

通常の投稿タイプでは、本文の他にカテゴリーやタグを設定することができますが、このカテゴリーやタグのことをカスタム投稿タイプのそれについてはカスタムタクソノミーとなぜか呼ぶんです。
実際には違うんですけどね、上手く説明できないのでこんな認識でいいと思いますという程度で勘弁してください。
とにかく、この辺の概念ははっきり言って私もよく分かりませんでしたので、他のサイトの見よう見まねでコードをコピペしてちゃんとに動いてるからよしとしました。

当サイトの場合、売買物件のカスタムタクソノミーは「エリア」と「物件種別」の2つを設定しました。
どんどんややこしくなってきますが、通常の投稿タイプのカテゴリーと呼ばれるものに該当するのが「エリア」であり「物件種別」であるということです。
先の例で言うと、カテゴリーにはお知らせ、制作実績、施工事例などを当てはめますが、カテゴリーがエリアの私の場合、その中身は古賀市、宗像市、福津市、直方市などの市町村名が入ります。
また、もう一つの物件種別には土地、古家付土地、中古戸建て、中古マンションをとりあえず入れてます。

コードは以下の通り。

// カスタムタクソノミー
function add_taxonomy() {
register_taxonomy(
'buying-list-area',
'buying-list',
array(
'label' => 'エリア',
'singular_label' => 'エリア',
'labels' => array(
'add_new_item' => 'エリアを追加'
),
'public' => true,
'show_ui' => true,
'show_in_nav_menus' => true,
'show_in_rest' => true,
'hierarchical' => true
)
);

register_taxonomy(
'buying-list-property-type',
'buying-list',
array(
'label' => '物件種別',
'singular_label' => '物件種別',
'labels' => array(
'add_new_item' => '物件種別を追加'
),
'public' => true,
'show_ui' => true,
'show_in_nav_menus' => true,
'show_in_rest' => true,
'hierarchical' => true
)
);
}

add_action('init', 'add_taxonomy');

ここまで完璧にできたら、管理画面のメニュー部分、「投稿」の下に「売買物件」が追加され、カスタムタクソノミーにエリアと物件種別が追加されているかと思います。

カスタムタクソノミーの管理画面は、完成するとこんな感じになります。
※画像クリック・タップで拡大します。

エリア

物件種別

これで通常の投稿タイプとは別に売買物件というカスタム投稿タイプを使って売買物件を管理・更新していくことになります。

最後に

いかがでしたでしょうか。
少し長くなりましたので、さらに便利に不動産物件情報を投稿していくのに必要なカスタムフィールドの話はまた次回にしたいと思います。
誰かのお役に立てれば幸いです。

参考にしたサイト

WordPressのカスタム投稿をfunctions.phpで設定する | テーマ・テーマ・テーマ!

独自の投稿グループを作ることができるカスタム投稿の設定方法をfunctions.phpによるカスタマイズ方法とプラグインによるカスタマイズ方法を紹介します。ブロックエディタ…

WordPressでカスタム投稿タイプの記事一覧ページを作成しよう【簡単コピペOK!】 - ぴっとログ

「WordPressのカスタム投稿で、一覧ページをつくる方法が知りたい。」「そもそもカスタム投稿タイプってなに?」本記事を読めば、こんなお悩みを解決できます!

投稿者プロフィール

吉田 亮介
吉田 亮介代表取締役
株式会社ホームリンク代表。1978年1月生まれ。31歳で不動産業界に転職後、約14年間不動産売買仲介専門エージェントとして従事。その後、2023年12月に株式会社ホームリンクを設立し、代表取締役に就任。お客様との出会いやご縁を大切にする会社を目指しています。