バージョン2.9以降、WordPressはカスタム投稿タイプを使用する機能が導入されました。バージョン3.0では、カスタム投稿タイプのパネルを作成するオプションがさらに進んでいます。このチュートリアルでは、カスタム投稿タイプをWordPressサイトに実装する方法を説明します。
カスタム投稿タイプの作成 – プラグインの使用
バージョン3.0以降、WordPressにはカスタム投稿タイプを作成するための組み込みUI(ユーザーインターフェース)がありません。カスタム投稿タイプを作成するために使用できるオプションは2つだけです。プラグインを使用するか、テーマのfunctions.phpファイルにハードコードするかのどちらかです。まず、プラグインを使用してカスタム投稿タイプを作成する方法を見てみましょう。
カスタム投稿タイプUI

Custom Post Type UI は、WebDevStudios の Brad Williams によって開発されたプラグインで、カスタム投稿タイプとタクソノミーを簡単に作成できます。このプラグインの最もクールな機能の1つは、カスタム投稿タイプを作成するためのコードを生成することです。これにより、テーマの functions.php ファイルに貼り付けることができます。このプラグインの奇妙な点の1つは、すべての post_type 間でタクソノミーを共有できないことです。

カスタム投稿タイプUIパネルで「新規追加」をクリックします。

次に、いくつかのオプションを入力します。「投稿タイプ名」は、WordPressがそのpost_typeからすべての投稿をクエリするために使用するものです。「ラベル」は、通常の「投稿」メニューのように、ダッシュボードのサイドバーに表示されるものです。「高度なオプションを表示」を展開すると、さらにいくつかのオプションを構成できます。「公開」や「UIを表示」など、ほとんどは自明です。最初の「公開」をtrueに設定すると、カスタム投稿タイプのメニューがサイドバーに表示され、2番目の「UIを表示」をtrueに設定すると、メニューパネルが生成されます。
「Rewrite」は、カスタム投稿タイプがSEOフレンドリーなWordPress URL(パーマリンク)を使用できるようにするものです。「カスタムリライトスラグ」は好きなものに設定できます。WordPressはこのスラグを使用してパーマリンクを生成します。したがって、カスタムリライトスラグを「movies」としたexample.comがある場合、カスタム投稿タイプのパーマリンクはexample.com/moviesのようになります。
WordPressの「Query Var」関数を使用すると、カスタム投稿タイプの投稿をクエリできます。したがって、前述の例を使用して、Movies post_typeの下に書かれたMy First Movie Postというタイトルの投稿にアクセスするには、example.com/?movies=my-first-movie-postと入力できます。したがって、クエリ変数は次のようになります:?posttypename
最後に、サムネイル/アイキャッチ画像や抜粋など、カスタム投稿タイプがサポートするさまざまな機能を選択できます。

カスタム投稿タイプの作成 – Functions.phpファイルの使用

プラグインなしでカスタム投稿タイプを使用したい場合は、次のコードをテーマのfunctions.phpファイルに追加してください。
// Creates Movies post type
register_post_type('movies', array(
'label' => 'Movies',
'public' => true,
'show_ui' => true,
'capability_type' => 'post',
'hierarchical' => false,
'rewrite' => array('slug' => 'movies'),
'query_var' => true,
'supports' => array(
'title',
'editor',
'excerpt',
'trackbacks',
'custom-fields',
'comments',
'revisions',
'thumbnail',
'author',
'page-attributes',)
) );
コードを分解してみましょう。
register_post_type( $post_type, $args ): この関数は、投稿タイプの名前である$post_typeと、引数の配列である$argsの2つのパラメータを受け取ります。
label: 管理画面のサイドバーに表示される投稿タイプの複数形名。
public: true/false。この投稿タイプを持つ投稿を管理UIに表示できるようにします。
show_ui: true/false. この投稿タイプを管理するためのデフォルトのUIを表示または非表示にします。
capability_type: デフォルト: post 読み取り、編集、削除の権限を確認するために使用する投稿タイプ。
hierarchical: 投稿タイプが階層的かどうか。
rewrite: true/false。デフォルト: true slug引数が入力された場合、slug名が投稿の前に付けられます。
query_var: true/false 投稿タイプ名をクエリ変数として設定します。
supports: デフォルト: タイトルと著者 この投稿タイプが許可するさまざまなサポート機能を設定します。
register_post_type()に関する詳細については、WordPress Codexをご覧ください。
カスタム投稿タイプの投稿を表示する
カスタム投稿タイプからの投稿を表示するには、ループに次のコードを追加します。“name” を投稿タイプの名前に置き換えてください。注:カスタム投稿タイプを index.php ファイルに追加する必要はありません。 カスタムWordPressページを作成し、ループ内で次のクエリを実行できます。
$query = new WP_Query( 'post_type=name' );
複数の投稿タイプから投稿を表示するには、上記のコードを次のように変更します。movies をカスタム投稿タイプ名に変更してください。
$query = new WP_Query( array( 'post_type' => array( 'post', 'movies' ) ) );
上記のコードは、通常の投稿タイプ(post)とカスタム投稿タイプであるmoviesの両方からすべての投稿を表示します。
これで完了です。このチュートリアルがお役に立てば幸いです。ご質問はコメント欄に投稿してください。

Gaby Izarra
OK、少し問題があります。助けてくれるかもしれません…これが私のWordPressフォーラムページです。別のテーマのイベントリストを現在使用しているテーマに適合させようとしています。
http://wordpress.org/support/topic/php-query-for-custom-post-type-not-displaying-creating-theme-event-list?replies=1#post-5587886
デイブ
カスタム投稿タイプを2つ作成しましたが、最初の1つしかページに表示されません。このコードを追加しました。
$query = new WP_Query( array( ‘post_type’ => array( ‘post’, ‘featured’, ‘latest’ )
) );
ループファイル内で、何も表示されません。どうすれば解決できますか?
Jeroen
カスタム投稿タイプをブログアーカイブページやRSSフィードに追加する方法を知っていますか?
WPBeginnerサポート
はい、両方のトピックに関するガイドがあります。WordPressでカスタム投稿タイプアーカイブページを作成する方法と、カスタム投稿タイプをメインのWordPress RSSフィードに追加する方法をご覧ください。
管理者
wizdom networks
まず、素晴らしい記事です!コード経由でカスタム投稿タイプを実装しています。現在の WordPress ドキュメント(http://codex.wordpress.org/Function_Reference/query_posts)では、query_posts 関数は一般的に使用すべきではなく、pre_get_posts フックを使用してクエリを変更することが指定されていることに注意してください。
「pre_get_postsフィルターを使用し、is_main_queryをチェックしてメインクエリを変更することを強くお勧めします」
再度、素晴らしい記事です。共有していただきありがとうございます。
Cheers.
WPBeginnerサポート
Wisdomさん、ありがとうございます。記事をWP_Queryで更新しました。
管理者
トム・アボット
すごい…ウェブサイトを運営するために WP を使用している初心者にとっては、これはまったく初心者向けのコンテンツではありません!カスタムページを設定するために、WP 開発者に連絡する必要があるでしょう。
編集スタッフ
カスタム投稿タイプは、開発者がWordPressの機能を拡張するために作成されました。初心者向けではありませんでした。
管理者
マーク・シャーレー
query_posts( ‘post_type=movies’);
?>
2011年の子テーマのページテンプレートでこれを機能させることができません。映画のページを取得するにはどこに置けばよいですか。実際には、本当に必要なのは抜粋です。マークより
muntzdesigns
このプラグインを使用し、上記のコードをloop.phpに追加すると、カテゴリの制御を失います…私のカスタム投稿タイプはすべてのカテゴリに追加されます…何か助けはありますか?
wpbeginner
@muntzdesigns これが複数のループを使用する理由です…メインのブログループ、archive.php、category.phpなど…カスタムデザインのサイトでは、これが適切に機能するようにそれを利用する必要があります。
muntzdesigns
@wpbeginner@muntzdesigns では、上記のコードをすべてのファイル(loop.php、archive.php、category.php)に追加すればよいのですか?ありがとうございます。
wpbeginner
@muntzdesigns いいえ。コードはフロントページにのみ追加します。あなたが抱えていた問題は、カスタム投稿タイプがすべてのカテゴリに追加されていたことでした…上記のコードはメインループにのみ追加する必要があります。次に、カテゴリアーカイブ、タクソナミーアーカイブ、著者アーカイブなどの新しいループを作成します…
PriyaVerma
素晴らしい記事です。本当にありがとうございます
dazuaga
いいえ、間違っていました。
dazuaga
気にしないでください:%category%/%type%/%postname% でうまくいくと思います
dazuaga
CMS Pressプラグインのコンテンツタイプ識別子とは具体的に何ですか?カスタム投稿タイプにカテゴリのスラッグを先頭に追加する方法を探しています(例:example.com/category/post_type/postname)。しかし、コンテンツタイプ識別子で%category%/%identifier%/%postname%を使用すると、自動的に次のように変換されます:%categoryidentifierpostname
murphymakes
いつものように素晴らしい情報です。ありがとう
whimba
I like Custom Post Type UI. It’s light and easy to use but is limited in functionality. So I created my own – http://wordpress.org/extend/plugins/mp-former/. You can try it
simplywendz
これはWordPressでカスタム投稿を作成するための素晴らしいチュートリアルです。ステップは詳細に記載されており、簡単にフォローできます。これは非常に、非常に役立ちます!
hoss9009
私もこれを不思議に思っていました!!
カップベアラー
CMS Press の件はうまくいっていたのですが、投稿に表示させる方法がわかりませんでした。あまりにも長い間存在しているので、誰もがすでに知っているはずだと想定しているのでしょう。カスタム投稿タイプをループに表示させるための完璧な回答です。
ジェリー・クレイグ
杯を注ぐ人
Noel Boaz
カスタム投稿タイプをフロントページに表示するのに大いに役立ちました。ブックマークしました、ありがとう。
Ed
プラグインを試しましたが、非常に印象的です。しかし、テーマの「ページ」属性からページ属性を表示させようとしています。つまり、フル幅のページオプションを使用できるようにしたいのです。このプラグインは、ページタイプのレイアウトではなく、投稿タイプのレイアウトからのみ属性を取得すると仮定すべきでしょうか?私が望むのは、投稿をフル、あらかじめ定義されたテンプレートに設定するオプションを持つことだけです。
とはいえ、素晴らしい仕事です – これはたくさん使わせてもらいます。
乾杯
エド
Simon
プラグインの方法を試しましたが、投稿が表示されませんでした。ループ.phpファイルが見つからなかったからかもしれません。
とにかく、どうもありがとうございます。きっとすぐにうまくいくと思います。
WordPressでできる素晴らしいことの1つは、DrupalのViewsモジュールのように、コンテンツのカスタムビューを作成できる可能性があることだと思います。
PodsとPods CMSというプラグインがあり、それが可能になると聞いています。もし全く理解できない場合は、wpbeginnerの投稿で開発者に助けを求めることができるかもしれません。多くの人がこれを気に入ると思います。結局のところ、ビューを表示することが、CMSを真にダイナミックなCMSにするものです。
編集スタッフ
ループ.phpがテーマに存在しない可能性があります。ループはindex.php、archive.php、category.phpなどにも見られます。必要であればカスタムループを作成することもできます。
管理者
Peter
良いチュートリアルです、共有していただきありがとうございます。
これについて質問があります。
functions.php を通じてカスタム投稿タイプ(カレンダー)を作成し、管理画面にカスタムメタボックスを追加しました。このメタボックスでは、1つのフィールドで jQuery を使用しています(http://jqueryui.com/demos/datepicker/)。
この datepicker を機能させるには、必要なスクリプトを埋め込む必要があります。
add_action(‘admin_enqueue_scripts’,’enqueue_my_scripts’);
は機能しますが、私のスクリプトは管理画面全体に読み込まれてしまいます(これはデフォルトの WP 管理 jQuery と干渉します)。
そのため、カスタム投稿タイプ用のフックが必要です。
この:
add_action(‘register_post_type’,’enqueue_my_scripts’);
は register_post_type がフックではないため機能しません。
では、カスタム post_type のフックは何ですか?
Amanda
スクリプトを登録する前に、関数定義に以下を追加してみてください:
if(is_admin()) return;例えば、次のようなものです。
function some-function(){
// 管理ページでは不要なので…
if(is_admin()) return;
// カスタムスクリプトを登録
wp_enqueue_script( 'some-script' );
}
エヴァン
ループで各コンテンツタイプを表示するにはどうすればよいですか? Tumblrのようなものです。写真を投稿した場合…ループ内のコードをカスタマイズする必要があります。リンクを投稿した場合も同じです。
編集スタッフ
投稿でわかるように、カスタム投稿タイプと投稿の両方を1つのループ内に表示するオプションがあります…
管理者
マイケル
カスタムタイプの投稿をクエリするようにループを機能させることができません。あなたの例は十分に簡単そうなので、次のものを試しました $var = query_posts( ‘post_type=sponsor’);
それからループを開始しました
while ($var ->have_posts()) : $var ->the_post();
処理を実行
endwhile;
これはPHPエラーを返します:
Fatal error: Call to a member function have_posts() on a non-object in single-sponsor.php on line 22
22行目はwhileループのある行です。
アイデアは?何が間違っていますか?
ロメロ
カスタムフィールド用のタグを作成しようとしましたが、カスタムタイプのループ内でget_the_tagsを使用しても何も出力されません。
何か提案はありますか?
1月
この新機能にはとても興奮しています^-^ 素敵なビデオを作ってくれました。ただし、例では、カスタム投稿タイプを使用するのではなく、投稿に「書籍」や「映画」といったカテゴリを作成するのはなぜですか?そうすれば、カスタム投稿タイプの煩わしさをすべて回避できます。
編集スタッフ
第一に、物事を異なる方法で整理できます。第二に、異なるオプションを持つ完全に異なる書き込みパネルを持つことができます。これにより、はるかに多くのカスタマイズが可能になります…
管理者
Sandra
この記事は素晴らしいですね!私はWordPress初心者なので、この質問について助けていただけますか?
「display archives by cat」プラグイン(kwebble製)のように、サイドバーにカスタム投稿タイプのアーカイブを表示することは可能ですか?
編集スタッフ
はい、カスタム投稿タイプをアーカイブとして表示することは可能です。特定の投稿タイプからの投稿やカテゴリを表示するために、サイドバーにカスタムループを作成するだけです。
管理者
lukeMV
カスタム投稿にオプションを追加する方法について、分かりやすいガイドはありますか?例えば、映画がドラマ、コメディ、ホラーなどの場合…チェックボックスとして、カスタム投稿編集パネル内にそれらのオプションを設定するにはどうすればよいですか?そのようなガイドやプラグインが見つかりません。
ポール
こんにちは、素晴らしい記事でした。私の質問に答えていただけるかと思っておりました。
最後の数行に、次のようにあります。
これは、movies という名前のすべての投稿と post_type を返します。
「movies」という名前の post_type と「movies」カテゴリの投稿の両方を返して、このカテゴリを持たない他のすべての投稿を除外する方法を知っていますか?
編集スタッフ
query_postsにはカテゴリパラメータを使用します – http://codex.wordpress.org/Function_Reference/query_posts
管理者
ウォルター
一歩戻って聞いてもいいですか?そもそもカスタム投稿タイプが必要なのはなぜですか?ユースケースは何ですか?
編集スタッフ
カスタム投稿タイプは、ブログ以外でWordPressを使用するユーザー、例えばCMSを使用するユーザーに適しています。例えば、ポートフォリオとブログの両方を持つサイトを作成したいとします。明らかに、ブログとポートフォリオで同じような見た目にしたいわけではありません。そこでカスタム投稿タイプが役立ちます。これはWordPressを次のレベルに引き上げるための非常に汎用性の高い機能です。平均的なブログユーザーは、おそらくカスタム投稿タイプを必要としないでしょう。
管理者
Tracy B.
分類するのと何が違うのか、まだ理解しようとしています。これまで、人々が「現在のイベント」カテゴリのみをリストする別のページや、「プロジェクト」カテゴリの別のページなどを作成するサイトをたくさん作ってきました。これはどうしてより良いのですか?
編集スタッフ
これは整理の面で優れています。特定の投稿タイプに対してカスタムタクソノミー、書き込みパネルなどを設定できます。
Chris
ポストタイプの「普通」のものを見せるのではなく、古い「映画や本」の例を使うのであれば、もっと役に立っただろうと考えてしまいます。
サイドブログを投稿タイプで作成するのはどうですか、あるいはもっと実用的なものはありませんか?これは、WP Codexが最終的に持つであろうことを繰り返しているだけです。もしすでにそこになければ。
編集スタッフ
このように感じられたとのこと、残念に思います、クリス。WP Codexでは、これを行う方法を示すビデオは提供しません。カスタム投稿タイプに使用する名前は何であれ、重要なのはそれらをどのように追加するかということです。カスタム投稿タイプに関する投稿を書くだけのために、特別なサイトを作成することはありません。その知識を探しているのであれば、ご自身で行うのが最善でしょう。このブログは、初心者レベルのユーザーのニーズを満たす必要があるため、プラグインの方法を共有しました。
管理者
ケビン・エリオット
これはWordPress 2.9で機能しますか、それとも3.0専用ですか?
3.0を使ってみましたが、プラグインが有効になっていると表示されても、どのプラグインも有効化されないという奇妙な問題が発生しました。非常に奇妙でした!
-ケビン
編集スタッフ
これは3.0で動作するので、3.0でのみ使用してください。WordPress 3.0を再インストールしてみてください。私たちはいくつかのサイトをこれで運用しています。
管理者
Marc
ビデオを見ました…
全てを機能させるにはPHPファイルを編集(ハードコーディング)する必要があるというのは本当ですか?
編集スタッフ
いいえ、どちらか一方を行う必要があります。私たちのビデオでは、両方の方法を示しました。ハードコーディングの方法か、プラグインの方法か、どちらかです。
管理者
Marc
Allright, I see, thnx!
それでは、ハードコーディングの方法で始めたということでしょうか?当時はコーディング関連のものしか見当たらず、諦めてしまいました。そのため、プラグインの方法は見なかったのだと思います…
Rilwis
非常に良い記事です。カスタム投稿タイプUIプラグインには、投稿タイプを登録する生のPHPコードと非常に似たオプションがあり、開発者にとって素晴らしいです。
カスタム投稿タイプで動作する多くの便利なプラグインを紹介してくれてありがとう。
Kaye Media
素晴らしい記事です。Wp3 =)を楽しみにしています。
ブライアン
WordPressがカスタム投稿タイプをwpフレームワークに統合したことを嬉しく思います。しかし、Magic FieldsやFlutterのような既存のプラグインを使用するのと比べて、どのように優れているのか分かりません。これらのプラグインを使用すると、同じ効果が得られるだけでなく、さまざまな種類のカスタムフィールドを簡単に設定でき、データの入力と表示方法に柔軟性があります。wp 3.0は、最初からそのようなものをサポートしていますか?
編集スタッフ
カスタムフィールドやバックエンドのほぼすべてのもののUIを、カスタム投稿タイプで作成できます。これらのプラグインがユーザーにとって非常に簡単であることは正しいですが、これらのプラグインのいずれかが開発で失敗した場合、他に選択肢がなくなります。
管理者
ブライアン
なるほど。ベータ版は少し触ってみましたが、おそらくそれほど多くはありません。もしその方向にもっと進むならエキサイティングでしょう。これらのプラグインの使用に慣れてしまったので、今ではそれなしでサイトを作ることはほとんどありません。
そのため、すべてのツールが利用可能で、元のアプリケーション内で処理されると素晴らしいでしょう。これにより、バックエンド管理が改善され、特定のプラグインをサポートする少数のグループではなく、より多くの人々がそれに貢献するようになると思います。
イアン
カスタム投稿タイプの一部は意図的にコードとして残されていると思います。平均的なユーザーに対処させるためです。
アブドゥル・ワヒド
素晴らしい記事です
ravalde
twentyelevenでは、タクソノミーが一切表示されません。また、最初から最後までを網羅したチュートリアルも見つかりません。どれもtwentytenとループに焦点を当てているようです。