カスタム投稿タイプを使いこなす!初心者向けチュートリアル

Featured image of the post

カスタム投稿タイプとは

カスタム投稿タイプとは、[投稿]と同レベルの項目を自分で定義したもの。

投稿(最初からある)

Image in a image block

カスタム投稿タイプ(自分で追加した)

Image in a image block

使用場面・イメージ図

[投稿]と異なるジャンルの[投稿]をするときに使用する。

💡
[投稿]とデザインもガラッと変えたい場合に使うことが多い

以下のように投稿と別ジャンルのものを作る場合は[カスタム投稿タイプ]を使う✅

  • [投稿]は定期配信する情報を投稿する。
    • お知らせ
    • コラム
    • ニュース など
  • [カスタム投稿タイプ(製品情報)]は製品の情報を投稿する。
    • ズボン
    • カバン など

イメージ図

[投稿]= デフォルトで用意されているカスタム投稿タイプ

[投稿]
   |--[カテゴリー]
   |     |-------[お知らせ]
   |     |-------[コラム]
   |     |-------[ニュース]
   |
   |--[タグ]
         |-------[重要情報]
         |-------[おすすめ情報]

[製品情報](👈カスタム投稿タイプ)
   |--[商品](👈カスタムタクソノミー ※カテゴリーと同等)
   |     |-------[服]
   |     |-------[ズボン]
   |     |-------[カバン]
   |
   |--[商品タグ](👈カスタムタクソノミー ※タグと同等)
         |-------[カジュアル]
         |-------[フォーマル]
         |-------[メンズ]
         |-------[レディース]

上記の階層がわからない場合は以下を参照すると理解できるはず🔰

📄タクソノミーとタームとは?初心者向けに噛み砕いて解説

【補足】カテゴリーとの使い分け

[カテゴリー]や[タグ]でも投稿のジャンル分けはできるのに[カスタム投稿タイプ]って必要なの?💭

以下のように使い分ければOK✅

  • [カスタム投稿タイプ]はカテゴリーより1階層上でジャンル分けするイメージ。
  • [投稿]と見た目を変えたい場合は[カスタム投稿タイプ]を使う。

カスタム投稿タイプの作り方

【方法1】プラグインで作る(おすすめ!)

簡単に作ることができるので初心者はこちらがおすすめ🔰

プラグイン「Custom Post Type UI」を使用する。

以下で使用方法を解説している。

🚫 ただいま記事作成中です💭

【方法2】自作

WordPressに慣れてきて少しでも軽量にした場合は自作もアリ!

【手順1】カスタム投稿タイプを追加する。

functions.phpでregister_post_type()関数を使うだけでOK。

以下で詳しく解説している。

📄カスタム投稿タイプを登録!register_post_typeについて詳細に解説【具体例あり】

【手順2】カスタム投稿タイプ用のページを用意する。

テンプレートファイル「single-{slug}.php」を作成する。

※{slug}にはカスタム投稿タイプの名前が入る

ファイルの中身はsingle.phpと同じ感じでOK。必要に応じてカスタマイズする。

💡
[投稿]と同じデザインでよければsingle.phpだけでもOK

【手順3】カスタム投稿タイプの一覧ページを用意する。

前提として、カスタム投稿タイプのアーカイブページを有効化しておくこと。

(手順1でhas_archiveをtrueにしておく。)

テンプレートファイル「archive-{slug}.php」を作成する。

※{slug}にはカスタム投稿タイプの名前が入る

ファイルの中身はarchive.phpと同じ感じでOK。必要に応じてカスタマイズする。

💡
[投稿]と同じデザインでよければarchive.phpだけでもOK

【補足】カスタム投稿タイプ関連の情報を取得

get_post_type_object() で「投稿タイプオブジェクト」を取得する。

そこから情報を取り出すことができる。

※カスタム投稿タイプの「記事ページ」や「アーカイブページ」でget_post_type_object()を実行する場合は引数を省略できる。

代表的な例
ラベル

labelプロパティを参照する。

// ラベルを表示する
echo esc_html(get_post_type_object(get_post_type())->label);

// ラベルで条件分岐する
$label = esc_html(get_post_type_object(get_post_type())->label);
if($label=='製品'){
	// カスタム投稿タイプ「製品」の場合
	...
}

💡
single.phpの中で条件分岐を活用すればテンプレートファイルを増やさずにデザインを変えることも可能!

名前(スラッグ)

nameプロパティを参照する。

echo esc_html(get_post_type_object(get_post_type())->name);

// スラッグで条件分岐する
$slug = esc_html(get_post_type_object(get_post_type())->name);
if($slug=='product'){
	// カスタム投稿タイプ「製品」の場合
	...
}

💡
single.phpの中で条件分岐を活用すればテンプレートファイルを増やさずにデザインを変えることも可能!

ディスクリプション

descriptionプロパティを参照する。

echo esc_html(get_post_type_object(get_post_type())->description);

以下の記事も分かりやすい。

各ページのURL

当然[カスタム投稿タイプ]は[投稿]と異なるURLになる✅

各ページのURLは以下のとおり。

前提
  • カスタム投稿タイプの名前は「product」
  • カスタム投稿タイプの記事のスラッグは「sample01」

投稿ページ
投稿タイプURLテンプレートファイル名
投稿https://example.com/スラッグ
(https://example.com/sample01)
single-post.php
カスタム投稿タイプhttps://example.com/カスタム投稿タイプ名/スラッグ
(https://example.com/product/sample01)
single-product.php

投稿一覧ページ
投稿タイプURLテンプレートファイル名
投稿デフォルトで存在しない
カスタム投稿タイプhttps://example.com/カスタム投稿タイプ名
(https://example.com/product)
archive-product.php

パーマリンクの設定

  • [カスタム投稿タイプ]と[投稿]はパーマリンクの設定が共通。

    →[設定−パーマリンク]のこと✅

カスタム投稿タイプのパーマリンク設定

[カスタム投稿タイプ]のみパーマリンクを変更する場合はプラグイン「Custom Post Type Permalinks」を使えばOK!

注意点

もし[設定−パーマリンク]で階層を設定しているとカスタム投稿タイプも同様のパーマリンク設定になる。

Image in a image block

例:カスタム投稿タイプの名前が「product」なら
「http://localhost/wordpress_test/news/product/%postname%/」になってしまう…💭

💡
上記のURLでよければ問題はない

カスタム投稿タイプだけ階層「news」を削除したい場合は?

「http://localhost/wordpress_test/news/product/%postname%/」

プラグイン「Custom Post Type Permalinks」を使わなくても対処可能!

  • フロントでのリライトをFalseにすればOK✅
    • プラグイン「Custom Post Type UI」を使用している場合は、カスタム投稿タイプの設定からOFFにできる。

参考サイト