【WordPress】プラグインを使わずカスタム投稿・分類の追加を超簡単に行う!
2015/11/17
WordPressには「投稿」や「固定ページ」の他にも投稿する方法があるのをご存知でしょうか?WordPressではカスタム投稿という機能で用途に合わせた投稿方法を追加し、独自のCMSにカスタマイズすることが可能です。
例えば、標準で用意されている投稿方法は以下のような意味合いを持ちます(個人的な解釈です)。
- 「投稿」・・・ブログの記事
- 「固定ページ」・・・汎用的なWEBページ
サイトの規模が大きくなるとこの2種類では何かと不便です。ここでカスタム投稿が役立ちます。カスタム投稿を使えば以下のような投稿方法が追加できます。
- 「ニュースリリース」
- 「製品情報」
カテゴリやタグを使って項目分けすることもできますが、利用者目線で考えると投稿方法の時点で項目が分かれていたほうが親切です。
また、標準で「カテゴリ」、「タグ」が用意されていますがカスタム投稿同様、追加することが可能です。カスタム分類(タクソノミー)といいます。
この記事の目次
カスタム投稿・分類はプラグインを使えば簡単に追加できるけど…
カスタム投稿・分類の追加はプラグインを利用することで簡単に実現できます。「Custom Post Type UI」というプラグインが有名ですね。私も以前は使っていました。プラグインはとても便利です。簡単だし細かく設定できます。しかしひとつ問題が。。。
テストサーバーと本番サーバーでそれぞれプラグインを個別に設定しないといけないんです。投稿やカテゴリなどはエクスポートできるのですが、プラグインの設定はエクスポートできないのです。FTPのファイルを直接移行しようとしても無駄です。データベースに設定が記憶されている為です。
カスタム投稿・分類の種類が少なければ個別に設定していっても問題はないかと思いますが、そうでない場合は大きなリスクが付きまといます。
functions.phpにカスタム投稿・分類の設定を書こう、しかし…
カスタム投稿・分類を追加するもう一つ方法に「function.php」に設定を記述するというものがあります。
この方法はphpファイルに直接設定を記述するため、テストサーバーのfunction.phpを本番サーバーにアップロードすれば設定が引き継げます。
functions.phpの場所は以下になります。
/wordpress/wp-content/themes/○○○○/functions.php
しかしこの方法には大きな欠点があります。
パラメーターが多くて設定が面倒だということです。非プログラマーの人を遠ざける原因になっているかと思います。参考までにカスタム投稿を追加する関数「register_post_type」のリファレンスご覧ください。見るだけで疲れますよね。
ラッパー関数を利用して超シンプルに!
前置きが長くなりましたが上記の「register_post_type」関数をシンプルに扱えるライブラリ(といえるレベルでもないですが)を作成しましたので下記からダウンロードしてお使いいただければと思います(ご自由に改変してください)。
ダウンロード: custom_post_tax.zip
使い方は簡単。解凍して出てきた「custom_post_tax.inc」を「functions.php」と同じディレクトリにコピーします。そして以下のソースコードをfunctions.phpに追記するだけです!
カスタム投稿を超簡単に追加するサンプル
//custom_post_tax.incを読み込みます include "custom_post_tax.inc"; //カスタム投稿タイプ追加 set_post_type_list(array( array("newsrelease","ニュースリリース"), ));
上記の例では「ニュースリリース」というカスタム投稿タイプを追加しています。
「newsrelease」の部分が投稿タイプ名、「ニュースリリース」の部分がラベルです。
投稿タイプ名とはIDのようなもので、get_posts関数などで記事を読み込む際に利用します。ラベルは管理画面のナビゲーションやタイトルに表示される文字列です。
複数カスタム投稿を追加する場合は下記のように記述します。
set_post_type_list(array( array("newsrelease","ニュースリリース"), array("products","製品情報")), //新しく追加 ));
一行追加しただけです。これで「製品情報」というカスタム投稿タイプが追加されました。
また、中級者向けの設定として下記のように各パラメータの追加も可能です(分からない人は読み飛ばしてください)。
//labelsと一部を除いたパラメータが指定できます set_post_type_list(array( array("products","製品情報",array('supports'=>array('title'))), ));
カスタム分類の追加も超簡単!
さらにカスタム分類(タクソノミー)も追加してみましょう。先述のset_post_type_list()の下あたりに追記してください。
set_custom_category_list(array( array("newscategory","ニュースカテゴリ","newsrelease"), array("productscategory","製品情報カテゴリ","products"), ));
カスタム投稿と基本同じですがパラメータの説明をすると左から分類(タクソノミー)名、ラベル、投稿タイプ名となります。
分類(タクソノミー)名、ラベルはカスタム投稿と同じなので割愛します。投稿タイプ名はカスタム分類を追加したい投稿タイプ名を追加します。この例では投稿タイプ「ニュースリリース」に分類「ニュースカテゴリ」が追加されたことになります。
また上記の例ではカテゴリタイプのカスタム分類を追加しましたが、タグタイプの追加も可能です。下記のように記述します。
set_custom_tag_list(array( array("feature","製品の特徴","products"), ));
これで投稿タイプ「製品情報」に分類「製品の特徴」が追加されました。関数名が変わっただけなので説明は割愛!
これらを適用すると以下のようになります。
最終的なソースコードは以下のようになります。
include "custom_post_tax.inc"; set_post_type_list(array( array("newsrelease","ニュースリリース"), array("products","製品情報"), )); set_custom_category_list(array( array("newscategory","ニュースカテゴリ","newsrelease"), array("productscategory","製品情報カテゴリ","products"), )); set_custom_tag_list(array( array("feature","製品の特徴","products"), ));
管理画面のカスタマイズはこれで完了です。
カスタム投稿タイプの記事一覧を取得する方法
カスタム投稿タイプは標準の投稿タイプとは異なり、記事を取得するのにひと手間必要です。カスタム投稿一覧を取得するサンプルソースコードを紹介します。TOPページテンプレート等に記述してください。
$posts = get_posts(array( 'post_type'=>'products', 'tax_query'=> array( array( 'field' => 'slug', 'taxonomy' => 'productscategory', 'terms' => 'car' ) ) )); foreach($posts as $post){ setup_postdata($post); //setup_postdata()を使うとthe_content()等が使用可能になる echo the_content(); }
この例では、投稿タイプが「products(製品情報)」であり、その中でも分類「productscategory(製品情報カテゴリ)」が「car」であるものを取得します(下記参照)。
いかがでしたでしょうか?
役に立ったという方はシェアしていただけると嬉しいです!