当サイト、Codex 日本語版は今後積極的な更新は行わない予定です。後継となる新ユーザーマニュアルは、https://ja.wordpress.org/support/ にあります。
万が一、当サイトで重大な問題を発見した際などは、フォーラムWordSlack #docs チャンネルでお知らせください。</p>

「投稿タイプ」の版間の差分

提供: WordPress Codex 日本語版
移動先: 案内検索
({{原文|Custom Post Types|93324}} <!-- 12:41, 29 September 2010 MichaelH 版 --> に更新)
(because the URL structure is not stored persistently in each post record in the database in the same way custom post type names are stored. --Mizuno 2010年10月13日 (水) 05:17 (UTC) not がどこまでかかるか?DBを見て要チェッ)
60行目: 60行目:
 
  }
 
  }
  
This creates a post type named "Product". It has two major arguments with it. The first one is the "labels", which define the name of the type in both plural and singular forms. The second one is "public", which is a predefined flag to show the post type in the admin section and to make it show up on the main site itself, if it's queried for.
+
"Product" というカスタム投稿タイプを作成します。主な引数が2つあります。一つ目は "labels" で、タイプ名(単数形と複数形)を定義します。二つ目は "public" で、管理画面でこの投稿タイプを表示し、要求があったときにメインサイトでも表示するかどうかを事前定義するフラッグです。
  
There are many more parameters you can add to the [[関数リファレンス/register_post_type|register_post_type]] function, to do things like set up hierarchy, show the new post type in searches, change the URLs of the new posts, and to hide or show meta boxes in the post editing screen. These parameters are optional, and you can use them to configure your post type on a detailed level.
+
[[関数リファレンス/register_post_type|register_post_type]] 関数には、さまざまなパラメータを追加することができます。階層を設定する、検索で新しいカスタム投稿タイプを表示する、新規投稿の URL を変更する、投稿編集画面でメタボックスを表示する/隠す、といったことが可能です。これらのパラメータはオプションで、投稿タイプを詳細にカスタマイズするときに使用できます。
  
=== Naming Best Practices ===
+
<div id="Naming_Best_Practices">
While it's convenient to name your custom post type a simple name like "product" which is consistent with the core post types "post", "page", "revision", "attachment" and "nav_menu_item", it is better if you prefix your name with a short "''namespace''" that identifies your plugin, theme or website that implements the custom post type.
+
=== 良い名前の付け方 ===
 +
</div>
 +
"product" のような単純な名前をつけると、コアの投稿タイプ "post", "page", "revision", "attachment" "nav_menu_item" と一貫性があるので便利です。よりよい名前を付けるには、短い "''名前空間''" を接頭辞に付け、カスタム投稿タイプを実装するプラグイン/テーマ/ウェブサイト等を特定するとよいでしょう。
  
For example:
+
:
  
* "acme_product" or "aw_product" - Products post type used by hypothetical ACMEWidgets.com.
+
* "acme_product" または "aw_product" - 仮想の ACMEWidgets.com で使用する製品投稿タイプ。
* "eightfold_product" or "eft_product" - Products post type provided by the hypothetical "EightFold" Theme.
+
* "eightfold_product" または "eft_product" - 仮想の "EightFold" テーマで提供される製品投稿タイプ。
* "ai1m_product" - Products post type provided by the hypothetical "All-in-One Merchant" Plugin.
+
* "ai1m_product" - 仮想の "All-in-One Merchant" プラグインで提供される製品投稿タイプ。
  
Without namespacing of your custom post types your website's post types will more likely conflict with custom post types defined in a theme you fall in love with later or a plugin you realize that you absolutely need to use. Or if you are developing custom post types or themes there's a much greater chance your plugin or theme will conflict with custom post types defined in other plugins or themes and/or custom post types defined for your prospective user's website. Namespacing your custom post type won't guarantee against conflicts but will certainly minimize their likelihood.
+
カスタム投稿タイプに名前空間を付けないと、あなたのウェブサイトのカスタム投稿が、将来愛用するテーマや、必要となるプラグインで定義されるカスタム投稿と衝突する可能性があります。カスタム投稿タイプやテーマを開発しているのであれば、あなたのプラグイン/テーマが、ユーザが使用しているプラグイン/テーマ/カスタム投稿タイプと衝突する可能性はもっと高いでしょう。名前空間を付けると、絶対に衝突しない訳ではありませんが、可能性を最小にするでしょう。
  
Do pay close attention to not having your namespace exceed 20 characters though, as the post_type column in the DB is currently a varchar field of the latter length.
+
名前空間を付けることで、20 文字を越えないように注意してください。データベースの post_type カラムは現時点では最大 20 文字です。
  
=== Reserved Post Type Names ===
+
<div id="Reserved_Post_Type_Names">
Although the core development team has yet to make a final decision on this, it has been proposed on the wp-hackers list that future core post type names will be namespaced with "'''wp_'''", i.e. if the core team decides to add an "Event" post type then according to this suggestion they would use the internal name "wp_event." Even though this hasn't been finalized, it'll be a good idea to avoid any custom post types whose name begins with "wp_."
+
=== 予約済みの投稿タイプ名 ===
 +
</div>
 +
コア開発チームは、まだ最終決定はしていませんが、wp-hackers メーリングリストでコア投稿タイプは "'''wp_'''" という名前空間を付けることが提案されています。つまり、もしコアチームが "Event" 投稿タイプを追加することを決定した場合、この提案によると内部での名前は "wp_event" を使用します。この提案は決定ではありませんが、"wp_" で始まる名前のカスタム投稿タイプは避けたほうが良いでしょう。
  
=== Function Reference ===
+
<div id="Function_Reference">
 +
=== 関数リファレンス ===
 +
</div>
 
{{Post Type Tags}}
 
{{Post Type Tags}}
  
87行目: 93行目:
 
</div>
 
</div>
  
When a post type is created like this, it gets a new top level entry in the Admin section to create posts of that new type. From there, you'll have a full post editor and everything that comes along with it by default.
+
カスタム投稿タイプを作成すると、管理画面セクションに、新しい投稿タイプの投稿を作成する最上位レベルエントリが作成されます。投稿エディタに移動して、編集することができます。
  
 
<div id="URLs">
 
<div id="URLs">
93行目: 99行目:
 
</div>
 
</div>
  
The new post type will also get its own special section of the site layout. In the above example, posts of this new "product" type can be displayed at http://example.com/product/%product_name% (where %product_name% is the URL-ized name of your product, i.e. http://example.com/product/foobrozinator.) You can see this link appear in the edit pages for your new type, just like other posts.
+
新しい投稿タイプは、サイトレイアウトも独自のセクションを持ちます。上記の例では、新しい "product" 投稿タイプの投稿は、http://example.com/product/%product_name% (ここで %product_name% は製品名を URL 化したもの、つまり http://example.com/product/foobrozinator) で表示されます。他の投稿と同様、新しい投稿タイプの編集ページでこのリンクが表示されます。
  
==== URLs with Namespaced Custom Post Types ====
+
<div id="URLs_with_Namespaced_Custom_Post_Types">
 +
==== 名前空間付きカスタム投稿タイプの URL ====
 +
</div>
  
When you namespace a URL and still want to use a "clean" URL structure, you need to add the "rewrite" element to the array. For example, assuming the "ACME Widgets" example from above:
+
名前空間を付けて、かつきれいな URL 構造を使用したい場合は、"rewrite" 要素を配列に追加する必要があります。以下は、上記の "ACME Widgets" という例の場合です。
  
 
  add_action( 'init', 'create_post_type' );
 
  add_action( 'init', 'create_post_type' );
112行目: 120行目:
 
   );
 
   );
 
  }
 
  }
The above will result in a URL like http://example.com/products/%product_name% (see description of %product_name% above.) Note that we used a plural form here which is a format that some people prefer because it implies a more logical URL for a page that embeds a list of products, i.e. http://example.com/products/. 
 
  
Also note using a generic name like "products" here can potentially conflict with other plugins or themes that use the same name but most people would dislike longer and more obscure URLs like http://example.com/acme_products/foobrozinator and resolving the URL conflict between two plugins is easier simply because the URL structure is not stored persistently in each post record in the database in the same way custom post type names are stored.
+
上記は、http://example.com/products/%product_name% (上記の %product_name% の説明を参照) のような URL になります。ここでは複数形を使用していますが、これは製品のリストのページには、http://example.com/products/ のほうがより論理的な URL を意味するので、人々がこちらを好むからです。
 +
 
 +
ここで "products" のような一般的な名前を使用することで、同じ名前を使用するプラグインやテーマと衝突する可能性があることに注意してください。しかし、ほとんどの人は、長くて不明瞭な http://example.com/acme_products/foobrozinator のような URL を嫌うでしょう。2 つのプラグイン間の URL 衝突を解決するのは簡単です。なぜなら、URL 構造はデータベースの投稿レコードに保存されておらず、カスタム投稿タイプ名が保存されるのと同じ方式ではないからです。(because the URL structure is not stored persistently in each post record in the database in the same way custom post type names are stored. --[[利用者:Mizuno|Mizuno]] 2010年10月13日 (水) 05:17 (UTC) not がどこまでかかるか?DBを見て要チェック)
  
 
<div id="Single_template">
 
<div id="Single_template">
120行目: 129行目:
 
</div>
 
</div>
  
The theme system supports post types too, in the form of the single-type template. In the same way that posts are shown on their own page with single.php, custom post types will use single-type.php if it's available. So for the above example, you could create a single-acme_product.php file and the product posts would be shown using that template.
+
テーマシステムでも、single-type テンプレート形式で投稿タイプをサポートします。single.php で投稿を表示するのと同様に、カスタム投稿タイプは(存在するなら) single-type.php を使用します。上記例では、single-acme_product.php ファイルを作成して、このテンプレートを使用して product 投稿を表示できます。
  
 
<div id="Querying_by_post_type">
 
<div id="Querying_by_post_type">
126行目: 135行目:
 
</div>
 
</div>
  
In the rest of the theme system, you can also create new queries to display posts from a specific post type. This is done via the "post_type" parameter to a WP_Query.
+
テーマシステムでは、特定の投稿タイプの投稿を表示する新しいクエリを作成することもできます。WP_Query に "post_type" パラメータを追加してくdださい。
  
Example:
+
:
 
  $loop = new WP_Query( array( 'post_type' => 'product', 'posts_per_page' => 10 ) );
 
  $loop = new WP_Query( array( 'post_type' => 'product', 'posts_per_page' => 10 ) );
 
  while ( $loop->have_posts() ) : $loop->the_post();
 
  while ( $loop->have_posts() ) : $loop->the_post();
137行目: 146行目:
 
  endwhile;
 
  endwhile;
  
This simply loops through the latest 10 product posts and displays the title and content of them.
+
product 投稿の最新 10 件をループし、タイトルと本文を表示します。
  
 
<div id="More_Information">
 
<div id="More_Information">

2010年10月13日 (水) 14:17時点における版

WordPress はたくさんのタイプのコンテンツを保存して表示できます。内部ではこれらはすべて同じ場所、wp_posts テーブルに保存されてます。これらの異なるタイプのコンテンツは "post_type" というカラムによって区別されています。

WordPress 3.0 以降では、任意の投稿コンテンツを追加したり使用できる機能があります。

WordPress には5つの主要なデフォルト投稿タイプがあります。

投稿 (post)

WordPress での投稿 (post) は、ブログで使われるメインの投稿タイプです。投稿は通常、一番新しいものが最初にくる反時系列順で表示されます。投稿はフィードの作成にも使われます。

ページ (page)

WordPress でのページ (page) は投稿に似ていますが、投稿の時系列構造の外にあります。ページはメインのサイトドメインのすぐ下にくる独自 URL を持っており、特別なページテンプレートを使って表示することができます。また、他のページを親に持つ階層化した構造にすることもできます。

添付ファイル (attachment)

添付ファイル (attachment) は特別な投稿で、メディアアップロードシステムを使ってアップロードされたファイルについて、ファイル名・説明などすべての情報が含まれます。例えばファイルが画像の場合、画像のサイズや自動生成されたサムネイル、ファイルの位置、埋込み EXIF 情報などです。

リビジョン (revision)

リビジョン (revision) は下書きや既存の投稿・ページの過去の変更履歴を保存するための投稿タイプです。投稿・ページタイプと基本的には同じような内容ですが、元となる投稿・ページが親となります。

ナビゲーションメニュー (nav_menu) はナビゲーションメニューシステムの各メニュー項目を保存するための投稿タイプです。posts テーブルの項目がサイト内に表示出来るコンテンツ以外にも使えるという最初の例と言えるでしょう。

カスタム投稿タイプ

WordPress にカスタム投稿タイプを追加するには、register_post_type 関数を使って独自の投稿タイプとその動作を定義します。

以下はカスタム投稿タイプ追加の基本的な一例です。

add_action( 'init', 'create_post_type' );
function create_post_type() {
  register_post_type( 'acme_product',
    array(
      'labels' => array(
        'name' => __( 'Products' ),
        'singular_name' => __( 'Product' )
      ),
      'public' => true
    )
  );
}

"Product" というカスタム投稿タイプを作成します。主な引数が2つあります。一つ目は "labels" で、タイプ名(単数形と複数形)を定義します。二つ目は "public" で、管理画面でこの投稿タイプを表示し、要求があったときにメインサイトでも表示するかどうかを事前定義するフラッグです。

register_post_type 関数には、さまざまなパラメータを追加することができます。階層を設定する、検索で新しいカスタム投稿タイプを表示する、新規投稿の URL を変更する、投稿編集画面でメタボックスを表示する/隠す、といったことが可能です。これらのパラメータはオプションで、投稿タイプを詳細にカスタマイズするときに使用できます。

良い名前の付け方

"product" のような単純な名前をつけると、コアの投稿タイプ "post", "page", "revision", "attachment" や "nav_menu_item" と一貫性があるので便利です。よりよい名前を付けるには、短い "名前空間" を接頭辞に付け、カスタム投稿タイプを実装するプラグイン/テーマ/ウェブサイト等を特定するとよいでしょう。

例:

  • "acme_product" または "aw_product" - 仮想の ACMEWidgets.com で使用する製品投稿タイプ。
  • "eightfold_product" または "eft_product" - 仮想の "EightFold" テーマで提供される製品投稿タイプ。
  • "ai1m_product" - 仮想の "All-in-One Merchant" プラグインで提供される製品投稿タイプ。

カスタム投稿タイプに名前空間を付けないと、あなたのウェブサイトのカスタム投稿が、将来愛用するテーマや、必要となるプラグインで定義されるカスタム投稿と衝突する可能性があります。カスタム投稿タイプやテーマを開発しているのであれば、あなたのプラグイン/テーマが、ユーザが使用しているプラグイン/テーマ/カスタム投稿タイプと衝突する可能性はもっと高いでしょう。名前空間を付けると、絶対に衝突しない訳ではありませんが、可能性を最小にするでしょう。

名前空間を付けることで、20 文字を越えないように注意してください。データベースの post_type カラムは現時点では最大 20 文字です。

予約済みの投稿タイプ名

コア開発チームは、まだ最終決定はしていませんが、wp-hackers メーリングリストでコア投稿タイプは "wp_" という名前空間を付けることが提案されています。つまり、もしコアチームが "Event" 投稿タイプを追加することを決定した場合、この提案によると内部での名前は "wp_event" を使用します。この提案は決定ではありませんが、"wp_" で始まる名前のカスタム投稿タイプは避けたほうが良いでしょう。

関数リファレンス

投稿タイプ: register_post_type(), add_post_type_support(), remove_post_type_support(), post_type_supports(), post_type_exists(), set_post_type(), get_post_type(), get_post_types(), get_post_type_object(), get_post_type_capabilities(), get_post_type_labels(), is_post_type_hierarchical(), is_post_type_archive(), post_type_archive_title()


管理画面

カスタム投稿タイプを作成すると、管理画面セクションに、新しい投稿タイプの投稿を作成する最上位レベルエントリが作成されます。投稿エディタに移動して、編集することができます。

URL

新しい投稿タイプは、サイトレイアウトも独自のセクションを持ちます。上記の例では、新しい "product" 投稿タイプの投稿は、http://example.com/product/%product_name% (ここで %product_name% は製品名を URL 化したもの、つまり http://example.com/product/foobrozinator) で表示されます。他の投稿と同様、新しい投稿タイプの編集ページでこのリンクが表示されます。

名前空間付きカスタム投稿タイプの URL

名前空間を付けて、かつきれいな URL 構造を使用したい場合は、"rewrite" 要素を配列に追加する必要があります。以下は、上記の "ACME Widgets" という例の場合です。

add_action( 'init', 'create_post_type' );
function create_post_type() {
  register_post_type( 'acme_product',
    array(
      'labels' => array(
        'name' => __( 'Products' ),
        'singular_name' => __( 'Product' )
      ),
      'public' => true,
      'rewrite' => array('slug' => 'products')
    )
  );
}

上記は、http://example.com/products/%product_name% (上記の %product_name% の説明を参照) のような URL になります。ここでは複数形を使用していますが、これは製品のリストのページには、http://example.com/products/ のほうがより論理的な URL を意味するので、人々がこちらを好むからです。

ここで "products" のような一般的な名前を使用することで、同じ名前を使用するプラグインやテーマと衝突する可能性があることに注意してください。しかし、ほとんどの人は、長くて不明瞭な http://example.com/acme_products/foobrozinator のような URL を嫌うでしょう。2 つのプラグイン間の URL 衝突を解決するのは簡単です。なぜなら、URL 構造はデータベースの投稿レコードに保存されておらず、カスタム投稿タイプ名が保存されるのと同じ方式ではないからです。(because the URL structure is not stored persistently in each post record in the database in the same way custom post type names are stored. --Mizuno 2010年10月13日 (水) 05:17 (UTC) not がどこまでかかるか?DBを見て要チェック)

シングルテンプレート

テーマシステムでも、single-type テンプレート形式で投稿タイプをサポートします。single.php で投稿を表示するのと同様に、カスタム投稿タイプは(存在するなら) single-type.php を使用します。上記例では、single-acme_product.php ファイルを作成して、このテンプレートを使用して product 投稿を表示できます。

投稿タイプによるクエリ

テーマシステムでは、特定の投稿タイプの投稿を表示する新しいクエリを作成することもできます。WP_Query に "post_type" パラメータを追加してくdださい。

例:

$loop = new WP_Query( array( 'post_type' => 'product', 'posts_per_page' => 10 ) );
while ( $loop->have_posts() ) : $loop->the_post();
  the_title();
  echo '<div class="entry-content">';
  the_content();
  echo '</div>';
endwhile;

product 投稿の最新 10 件をループし、タイトルと本文を表示します。

追加情報

日本語情報

英語情報

最新英語版: WordPress Codex » Custom Post Types最新版との差分