WordPressにカスタム投稿タイプをプラグインなしで設定する方法
カスタム投稿タイプは、「投稿記事ページ」と「固定ページ」にプラスして第3の投稿ページが作成できる機能です。
通常のWordPressサイトは、以下のように「投稿記事ページ」と「固定ページ」が作成できます。
これらにプラスして、カスタム投稿タイプがあれば、多様なサイトが制作できます。
カスタム投稿タイプは、1つでも複数でも作成可能です。
WordPressサイトは記事の分類をカテゴリー毎に分けることができますが、様々な種類の記事を取り扱っているとカテゴリー分けが複雑になってきます。
根本的に記事を分けて独立したいのであれば、カスタム投稿タイプは便利です。
WordPressをインストールしたままの状態では、カスタム投稿タイプは使用できません。自分でカスタマイズする必要があります。
主に2種類の方法で実現できます。
- functions.phpに設定を記述する方法
- プラグインを使用する方法
カスタム投稿タイプが構築できるWordPressプラグインは、「Custom Post Type UI」と「Types」が有名です。しかし、プラグインに頼るのはメンテナンスやカスタマイズ、細かい設定などが不利になることがあります。
カスタム投稿タイプはサイトの土台ですので、しっかりと自分で制作する方が大切だと思います。
以前、プラグインを使用していた経験がありますが、エラーが起きたり細かいカスタマイズに柔軟性がなかったため、functions.phpで自分で設定をすることが大切だと実感しました。
カスタム投稿タイプを自分で設定するには、ある程度知識は必要ですが、一つ一つ内容を理解して進めていけば実装できます。一度覚えれば後は簡単ですので、是非勉強してください。
この記事では、カスタム投稿タイプをプラグインなしで作成する方法を詳しく解説します。
カスタム投稿タイプの設定方法
カスタム投稿タイプを設定するには、functions.phpにコードを記述する必要があります。
この記事に記載されているサンプルコードを使用すれば簡単ですので参考にしてください。
カスタム投稿タイプを作成するには、「register_post_type」の関数を使用します。各種パラメータも詳しく解説します。
まずは、以下のコードをfunctions.phpに記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
//カスタム投稿タイプ function custom_post_type() { register_post_type('item', array( 'label' => '商品', 'labels' => array( 'singular_name' => '商品', 'add_new_item' => '新規商品を追加', 'add_new' => '新規追加', 'new_item' => '新規商品', 'view_item' => '商品を表示', 'not_found' => '商品は見つかりませんでした', 'not_found_in_trash' => 'ゴミ箱に商品はありません。', 'search_items' => '商品を検索', ), 'public' => true, 'menu_position' => 5, 'hierarchical' => false, 'has_arctive' => ture, 'supports' => array('title','editor','author','thumbnail', 'excerpt','comments','custom-fields') )); flush_rewrite_rules(); } add_action('init', 'custom_post_type'); |
function
function部分の「custom_post_type」は独自関数の名前です。
サンプルコードでは、「custom_post_type」にしました。
register_post_type
register_post_typeの部分にある「item」は、カスタム投稿タイプ名です。
作成したいカスタム投稿タイプ名を英単語で記述します。
上記のコードでは、商品に関するカスタム投稿タイプですので、「item」にしました。
それぞれの好みに合わせて、変えてください。
label
管理画面の左メニューに表示される名前です。
labels
管理画面に表示される名前ラベルを変更できます。
要素名 | 設定内容 |
---|---|
name | カスタム投稿タイプ名の複数形 |
singular_name | カスタム投稿タイプ名の単数形 |
add_new | メニューの「新規 」の位置に表示するラベル |
add_new_item | カスタム投稿の新規作成ページの左上に表示される部分のラベル |
new_item | カスタム投稿一覧ページの右上の方にある新規作成部分のラベル |
search_item | カスタム投稿一覧ページの検索ボタンのラベル |
edit_item | カスタム投稿編集ページの左上の方にある編集部分のラベル |
view_item | カスタム投稿編集ページの「〇〇を表示」部分のラベル |
not_found | カスタム投稿を追加していない状態で、カスタム投稿一覧ページを開いたときに表示するメッセージ |
not_found_in_trash | カスタム投稿をゴミ箱に入れていない状態で、カスタム投稿のゴミ箱ページを開いたときに表示するメッセージ |
descsiption
カスタム投稿タイプの概要を記述します。特に設定しなくても構いません。
public
サイト運営者が管理画面で記事を書いて公開するようなカスタム投稿タイプを作成するのであれば「ture」にします。
WordPressサイトのプログラム内部で使用するようなカスタム投稿タイプを作成するのであれば、「false」に設定します。
show_ul
管理画面の左メニューにカスタム投稿タイプの新規作成や一覧ページの表示をする場合は、「ture」にします。
「false」に設定すると管理画面から表示されなくなり、操作はできなくなります。
設定を省略した場合は、publicに設定した値と同じになります。
menu_position
管理画面の左メニューでの表示位置を設定します。
「5」であれば、「投稿」下にカスタム投稿タイプが表示されます。
「10」であれば、「メディア」下にカスタム投稿タイプが表示されます。
menu_icon
管理画面の左メニューに表示されるカスタム投稿タイプのアイコンのURLを指定します。
指定しない場合は、通常の「ピン」柄のアイコンが表示されます。
hierarchical
固定ページタイプの親子関係があるカスタム投稿が良いなら「ture」にします。
投稿記事ページタイプの親子関係がないカスタム投稿が良いなら「false」にします。
has_arctive
アーカイブページのような時系列に沿って記事一覧を表示するなら「ture」にします。
例えば、投稿記事ページであれば、トップページで時系列で記事一覧が表示されます。これと同様のシステムにカスタム投稿タイプもなります。
サンプルコードであれば、「http://WordPressサイトのURL/カスタム投稿タイプ名/」でアーカイブページが表示されます。
「has_arctive」を指定しない場合は、「false」になります。
rewrite
カスタム投稿タイプのパーマリンクの指定をします。
通常は何も指定しなければ「ture」ですので、特に記述する必要はありません。
「ture」であれば、カスタム投稿タイプのパーマリンクは、「http://WordPressサイトのURL/カスタム投稿タイプ名/スラッグ」になります。
なお、WordPressのパーマリンク設定はデフォルト以外しないと正しく設定できません。
サンプルコードを例に挙げれば、カスタム投稿タイプ名は「item」
ですので、次のようなURLになります。
「http://WordPressサイトのURL/item/スラッグ」
更に、「rewrite => array(‘slug’ => ‘〇〇’)」と指定すれば、「http://WordPressサイトのURL/○○/スラッグ」にできます。つまり、カスタム投稿タイプ名の部分をオリジナルに変更できます。
supposts
記事の編集や新規作成画面に設置するシステムを設定します。
要素名 | 設定内容 |
---|---|
title | タイトル |
editor | 本文 |
author | 作成者 |
thumbnail | アイキャッチ画像 |
excerpt | 抜粋 |
comments | コメント一覧 |
trackbacks | トラックバック送信 |
custom-fields | カスタムフィールド |
revisions | リビジョン |
page_attributes | 属性(hierarchicalをtureに設定している場合のみ指定) |
flush_rewrite_rules
「flush_rewrite_rules()」はパーマリンクの再設定を正しく処理する関数です。設定しないとカスタム投稿タイプのページに正しくアクセスできなくなります。必ず記述します。
add_action
intで「custom_post_type」が実行されるようにアクションフックを設定しています。
カスタム投稿タイプを複数設置する場合
カスタム投稿タイプを複数設置する場合は、以下のようなコードの書き方になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
//カスタム投稿タイプ function custom_post_type() { register_post_type('item', array( 'label' => '商品', 'labels' => array( 'singular_name' => '商品', 'add_new_item' => '新規商品を追加', 'add_new' => '新規追加', 'new_item' => '新規商品', 'view_item' => '商品を表示', 'not_found' => '商品は見つかりませんでした', 'not_found_in_trash' => 'ゴミ箱に商品はありません。', 'search_items' => '商品を検索', ), 'public' => true, 'menu_position' => 5, 'hierarchical' => false, 'has_arctive' => ture, 'supports' => array('title','editor','author','thumbnail', 'excerpt','comments','custom-fields') )); register_post_type('info', array( 'label' => 'お知らせ', 'labels' => array( 'singular_name' => 'お知らせ', 'add_new_item' => '新規お知らせを追加', 'add_new' => '新規追加', 'new_item' => '新規お知らせ', 'view_item' => 'お知らせを表示', 'not_found' => 'お知らせは見つかりませんでした', 'not_found_in_trash' => 'ゴミ箱にお知らせはありません。', 'search_items' => 'お知らせを検索', ), 'public' => true, 'menu_position' => 5, 'hierarchical' => false, 'has_arctive' => ture, 'supports' => array('title','editor','author','thumbnail', 'excerpt','comments','custom-fields') )); flush_rewrite_rules(); } add_action('init', 'custom_post_type'); |
カスタム投稿タイプのテンプレート
カスタム投稿タイプを表示するにはテンプレートが必要です。
以下の優先順位でテンプレートが選択されます。
- single-カスタム投稿タイプ名.php
- single.php
- index.php
例えば、「item」のカスタム投稿タイプがあるのなら、以下のような優先順位になります。
- single-item.php
- single.php
- index.php
カスタム投稿タイプのテンプレートを作成する際は、テーマで使用している投稿記事ページや固定ページのテンプレートと同じ内容でカスタム投稿タイプページが表示できます。
アーカイブページのテンプレート
has_archiveを「ture」にした場合は、カスタム投稿タイプの記事一覧ページが表示できます。
この際のテンプレートは、以下のような優先順位になります。
- archive-カスタム投稿タイプ名.php
- archive.php
- index.php
例えば、「item」のカスタム投稿タイプがあるのなら、以下のような優先順位になります。
- archive-item.php
- archive.php
- index.php
カスタム分類について
カスタム投稿タイプの記事専用のカテゴリーやタグをカスタム分類といいます。
カスタム投稿タイプだけ設定しても、カテゴリーやタグ分けはできません。カスタム分類を設定すれば、可能になります。
カスタム投稿タイプとカスタム分類はセットで使います。
カスタム分類の機能もプラグインを使えば簡単に設置できますが、カスタマイズやメンテナンス、細かい設定を考えると自分でできる方が良いと思います。
関連記事では、カスタム分類を自分で設定する方法を詳しく解説しています。参考にしてください。
また、カスタム投稿とカスタム分類を一つにまとめて記述する方法も解説しています。
まとめ
カスタム投稿タイプをプラグインなしで設定する方法を紹介しました。
プラグインがあれば簡単に設置できますが、自分で設置できるに越したことはありません。一度覚えれば簡単ですので、サイト制作の幅が広がると思います。
WordPressサイトを運営するなら、通常のカテゴリーで記事を分類する方がサイト構造もシンプルで良いと思います。
しかし、ビジネスサイトなどで、記事の分類も多く、明確に分ける必要があるなら、カスタム投稿タイプを設置すると便利です。
カスタム投稿タイプはURLの階層が深くなりますが、検索順位に不利にはなりません。
通常のURLなら階層を浅くすれば「http://WordPressサイトのURL/スラッグ」になります。
カスタム投稿タイプなら、「http://WordPressサイトのURL/カスタム投稿タイプ名/スラッグ」になります。
URLの階層が一段階深くなるため、SEOに不利になると心配する人もいます。以前の検索エンジンであれば、不利になることもありました。
現在は、コンテンツが重要視されて、URLは意味がなくなりました。
クライアントのサイトを運営していても、投稿記事ページとカスタム投稿タイプページのアクセス数や検索順位に変わりはありません。
なお、カスタム投稿タイプのサンプルコードはWEB制作会社で長年使用していたものであり、完璧なコードだと思います。安心して使用してください。
次の、カスタム分類の記事ではカスタム投稿タイプとカスタム分類をセットで設定する方法を解説いたします。