WordPressのカスタム投稿タイプって結局なにが便利なの?
WordPressのカスタム投稿タイプって結局なにが便利なの?
WordPress標準で使える機能だけでなんとかなるならそのほうがいいでしょ。
わざわざ難しそうな追加機能を推してくるのは何なんだと。
本サイトCHANGEUPでもカスタム投稿タイプを使用していますが、
例えば、article=お役立ちコンテンツとしたいのであれば
カテゴリーを使えば済む話です。
カテゴリーの名前を「お役立ちコンテンツ」、
スラッグを「article」とした場合にデフォルトの設定では
http://ドメイン名/category/article/
というURLになってしまいますが、
No Category Base (WPML)といったような
/category/を取り除くプラグインを使えば
http://ドメイン名/article/
といったURLが簡単に実現できます。
パーマリンク設定を
/%category%/%postname%/
とすれば
http://ドメイン名/article/pagetitle
というURLにする事も可能なので
一覧ページ
http://ドメイン名/article/
詳細ページ
http://ドメイン名/article/pagetitle
と分かりやすいURLを設定する事が可能です。
それなのにわざわざカスタム投稿タイプを使うなんて
手間しかないじゃないかと敬遠している方も多いと思いますので
私が考えるカスタム投稿タイプのメリット、デメリットと
プラグインなしでカスタム投稿タイプを設定する流れを解説していきます。
カスタム投稿タイプのメリット
カスタム投稿タイプのメリットとしてはざっと下記項目が思いつきます。
・複数カテゴリーを設定した場合のURLの変化を避ける
・URLの分類とは別にカテゴリー分けをしたい
・同一スラッグ名の共存ができる
・タイプによって一覧ページと詳細ページの内容を変える
・管理画面上で表示が分かれるのでカスタムフィールドの表示等も分けられる
・DBからの絞り込みが容易
それぞれ説明していきます。
複数カテゴリーを設定した場合のURLの変化を避ける
先程の例ではarticleというひとつのカテゴリーに属する想定でしたが、
例えばworkとか別のカテゴリーにも属するとすると、
URLは
http://ドメイン名/article/pagetitle
となるか
http://ドメイン名/work/pagetitle
となるかというと、複数回テストをしてみた結果、
カテゴリーIDが若いほうが優先されてURLが生成されるようです。
なのでもしarticleのカテゴリーIDが3で、workのカテゴリーIDが2の場合は
workカテゴリーを付与した途端に
http://ドメイン名/article/pagetitle
から
http://ドメイン名/work/pagetitle
にURLが変わってしまいます。
運営者の意図とは関係なくURLが変わってしまうのは困りますよね。
WPはカテゴリーを複数設定できるので
%category%をURLに含めるのはあまりよろしくないのかなと思います。
自身は気を付けていても別の担当者のうっかりでURLが変わってしまっては困ります。
でも投稿内容をグルーピングしてURLを設計したい!
であればカスタム投稿タイプを使いましょう。
URLの分類とは別にカテゴリー分けをしたい
グルーピングするURLの分類とは別でカテゴリー分けをしたいというのであれば
カスタムタクソノミーを使えばカテゴリー分けも可能です。
カスタムタクソノミーについては別記事で改めて解説をしたいと思います。
同一スラッグ名の共存ができる
カスタム投稿タイプで分けていれば同一スラッグ名の共存が可能です。
デフォルトの投稿のみで管理している場合は
重複したスラッグは設定ができませんので
他の投稿と重複しないスラッグを設定する必要があります。
カスタム投稿タイプであれば、その投稿タイプの中で重複しなければ
他の投稿タイプと同じスラッグを使う事が可能です。
タイプによって一覧ページと詳細ページの内容を変える
articleだけ他の投稿と一覧ページ(archive.php)と詳細ページ(single.php)の内容を変えたい場合、
カスタム投稿タイプであれば可能です。
archive-article.phpとsingle-article.phpに記述すればOKです。
これに関しては、カスタム投稿タイプを使わなくても
ひとつのファイル(archive.php もしくは single.php)の中で
is_category(“article”)やin_category(“article”)で分岐させれば実現可能ですが、
分類が増えてくるとファイルが肥大化して扱いづらいですよね。
管理画面上で表示が分かれるのでカスタムフィールドの表示等も分けられる
articleのみで使うカスタムフィールドがあれば、
カスタム投稿タイプarticleの編集画面のみに表示が可能です。
デフォルトの投稿だけしかない場合は不要なカスタムフィールドも常に表示されてしまいます。
DBからの絞り込みが容易
DBのwp_postsテーブルからSQLで直接絞り込みを行う場合に、
カテゴリーで分けている場合はどうしても副問い合わせが発生します。
カスタム投稿対応で分けていればwp_postsテーブルのpost_type = “article”で
簡単に絞り込みが可能です。
カスタム投稿タイプのデメリット
デメリットというほどでもありませんが、
カテゴリーが10以上とかに分かれる場合、
例えば、ライフハック、オシャレ、スポーツ、グルメとかカテゴリが多数存在する場合に
それもすべてカスタム投稿タイプにしなくては!という訳ではありません。
カスタム投稿タイプにする事でファイルが分かれすぎてもかえって扱いづらいので
上記のような例であればカスタム投稿タイプは使わずにカテゴリで分けるほうが良いかと思います。
カスタム投稿タイプの設定方法
register_post_type()関数を使います。
最低限の項目としては下記の内容をfunctions.phpに記述すればOKです。
1 2 3 4 5 6 7 8 9 10 11 12 |
function create_post_type() { register_post_type( ‘article’,//投稿タイプ名(最大20文字、大文字や空白は禁止) array( 'label' => 'お役立ちコンテンツ', //管理画面に表示される投稿タイプ名 'public' => true, //trueにしないと公開されない 'has_archive' => true, //この投稿タイプのアーカイブページを有効にする 'menu_position' =>5, //管理画面で表示される位置。5は投稿の下、デフォルトは25(コメントの下) 'supports' => array('title','editor','thumbnail') //投稿の編集画面に表示する項目。初期値はtitleとeditor ) ); } add_action('init','create_post_type'); |
register_post_type()を実行するcreate_post_typeという関数を作成して
initアクションにフックしてます。
create_post_typeという関数名はなんでも良いですが
もし変更する場合はinitアクションにフックする関数名も合わせて変更してください。
注意点としてfunctions.phpに上記内容を追記した後に
管理画面のパーマリンク設定から「変更を保存」する必要があります。
変更を保存する事でリライトルールが更新されます。
参考:プラグインの内部で投稿タイプを登録する場合は、有効化と無効化のフック(下記の「有効化するときリライトルールをフラッシュする」を参照)の中で flush_rewrite_rules() を呼び出すこと。もし flush_rewrite_rules() /enを使わない場合は、カスタム投稿タイプが正しいパーマリンク構造を表示するために、管理画面の 設定 > パーマリンク設定 を開いてパーマリンク構造を更新(変更を保存)する必要がある。
関数リファレンス/register post type – WordPress Codex 日本語版
上記の設定をされる場合はパーマリンク設定の更新は不要です。
supportsの項目については下記を参照してください。
supports
(配列|真偽値) (オプション) add_post_type_support()/en を直接呼び出すエイリアス。バージョン 3.5 以降では、配列の代わりに真偽値 false を指定することによりデフォルトの動作(title と editor)を止めることができる。
初期値: title と editor
・’title’ (タイトル)
・’editor’ (内容の編集)
・’author’ (作成者)
・’thumbnail’ (アイキャッチ画像。現在のテーマが post-thumbnails をサポートしていること)
・’excerpt’ (抜粋)
・’trackbacks’ (トラックバック送信)
・’custom-fields’ (カスタムフィールド)
・’comments’ (コメントの他、編集画面にコメント数のバルーンを表示する)
・’revisions’ (リビジョンを保存する)
・’page-attributes’ (メニューの順序。「親〜」オプションを表示するために hierarchical が true であること)
・’post-formats’ (投稿のフォーマットを追加。投稿フォーマットを参照)
関数リファレンス/register post type – WordPress Codex 日本語版
なおアイキャッチを使う場合には
現在のテーマのfunctions.phpの中で
アイキャッチ画像が有効になっているか確認してください。
(そもそもデフォルトの「投稿」でアイキャッチが使えるか)
有効になっていない場合は
functions.phpの中にadd_theme_support()関数で
下記のような記述を追記してください。
1 |
add_theme_support('post-thumbnails'); |
以上でございます。
functions.phpにコードを挿入とかちょっと怖いんですけど、という場合は
カスタム投稿タイプの設定ができるCustom Post Type UIというプラグインもありますので
まずはプラグインから試してみるのも良いかと思います。
WordPressは長く使っているけど
カスタム投稿タイプは試した事がないという人もいらっしゃるかと思いますが、
使ってみると大変便利なので是非活用してみてくださいね!
執筆者
30代の既婚者子持ちです。現在は非エンジニア職で経理とか色々やってますがもし生まれ変わったら次はリアルガチのプログラマーになりたいなと思っています。
何度か転職してまして2008年ぐらいからIT業界です。PHP,MySQLでの開発を多少経験していますが本職の人にはかないません。
この記事を読んだ人はこんな記事も読んでいます
CHANGEUP!では、エンジニアの転職、
フリーランスの案件紹介を行なっています。
将来の働き方で迷っている方、転職をお考えの方、あなたのエンジニアとしての力を最大限発揮できる場所を提案させていただきます。