カスタム投稿タイプとは
カスタム投稿タイプとは、[投稿]と同レベルの項目を自分で定義したもの。
投稿(最初からある)
カスタム投稿タイプ(自分で追加した)
使用場面・イメージ図
[投稿]と異なるジャンルの[投稿]をするときに使用する。
例
以下のように投稿と別ジャンルのものを作る場合は[カスタム投稿タイプ]を使う✅
-
[投稿]は定期配信する情報を投稿する。
- お知らせ
- コラム
- ニュース など
-
[カスタム投稿タイプ(製品情報)]は製品の情報を投稿する。
- 服
- ズボン
- カバン など
イメージ図
[投稿]= デフォルトで用意されているカスタム投稿タイプ
[投稿]
|--[カテゴリー]
| |-------[お知らせ]
| |-------[コラム]
| |-------[ニュース]
|
|--[タグ]
|-------[重要情報]
|-------[おすすめ情報]
[製品情報](👈カスタム投稿タイプ)
|--[商品](👈カスタムタクソノミー ※カテゴリーと同等)
| |-------[服]
| |-------[ズボン]
| |-------[カバン]
|
|--[商品タグ](👈カスタムタクソノミー ※タグと同等)
|-------[カジュアル]
|-------[フォーマル]
|-------[メンズ]
|-------[レディース]
上記の階層がわからない場合は以下を参照すると理解できるはず🔰
【補足】カテゴリーとの使い分け
[カテゴリー]や[タグ]でも投稿のジャンル分けはできるのに[カスタム投稿タイプ]って必要なの?💭
以下のように使い分ければOK✅
- [カスタム投稿タイプ]はカテゴリーより1階層上でジャンル分けするイメージ。
- [投稿]と見た目を変えたい場合は[カスタム投稿タイプ]を使う。
カスタム投稿タイプの作り方
【方法1】プラグインで作る(おすすめ!)
【方法2】自作
WordPressに慣れてきて少しでも軽量にした場合は自作もアリ!
【手順1】カスタム投稿タイプを追加する。
functions.phpでregister_post_type()
関数を使うだけでOK。
以下で詳しく解説している。
📄 カスタム投稿タイプを登録!register_post_typeについて詳細に解説【具体例あり】
【手順2】カスタム投稿タイプ用のページを用意する。
テンプレートファイル「single-{slug}.php」を作成する。
※{slug}にはカスタム投稿タイプの名前が入る
ファイルの中身はsingle.phpと同じ感じでOK。必要に応じてカスタマイズする。
【手順3】カスタム投稿タイプの一覧ページを用意する。
前提として、カスタム投稿タイプのアーカイブページを有効化しておくこと。
(手順1でhas_archiveをtrueにしておく。)
テンプレートファイル「archive-{slug}.php」を作成する。
※{slug}にはカスタム投稿タイプの名前が入る
ファイルの中身は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=='製品'){
// カスタム投稿タイプ「製品」の場合
...
}
名前(スラッグ)
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'){
// カスタム投稿タイプ「製品」の場合
...
}
ディスクリプション
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!
注意点
もし[設定−パーマリンク]で階層を設定しているとカスタム投稿タイプも同様のパーマリンク設定になる。
例:カスタム投稿タイプの名前が「product」なら
「http://localhost/wordpress_test/news/product/%postname%/」になってしまう…💭
カスタム投稿タイプだけ階層「news」を削除したい場合は?
「http://localhost/wordpress_test/news/product/%postname%/」
プラグイン「Custom Post Type Permalinks」を使わなくても対処可能!
-
フロントでのリライトをFalseにすればOK✅
- プラグイン「Custom Post Type UI」を使用している場合は、カスタム投稿タイプの設定からOFFにできる。
参考サイト