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

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

提供: WordPress Codex 日本語版
移動先: 案内検索
(日本語情報)
(150804}} <!-- 17:08, 13 April 2015‎ Wturrell 版 -->)
2行目: 2行目:
  
 
[[Version 3.0|WordPress 3.0]] からは、自分で[[#Custom_Types|カスタム投稿タイプ]]を追加して異なる用途に利用できるようになっています。
 
[[Version 3.0|WordPress 3.0]] からは、自分で[[#Custom_Types|カスタム投稿タイプ]]を追加して異なる用途に利用できるようになっています。
 +
  
 
<div id="Default_Types">
 
<div id="Default_Types">
8行目: 9行目:
  
 
WordPress には5つの主要なデフォルト投稿タイプがあります。
 
WordPress には5つの主要なデフォルト投稿タイプがあります。
 +
 +
*Post (Post Type: 'post')
 +
*Page (Post Type: 'page')
 +
*Attachment (Post Type: 'attachment')
 +
*Revision (Post Type: 'revision')
 +
*Navigation menu (Post Type: 'nav_menu_item')
 +
  
 
<div id="Post">
 
<div id="Post">
13行目: 21行目:
 
</div>
 
</div>
  
WordPress での投稿 (post) は、ブログで使われるメインの投稿タイプです。投稿は通常、一番新しいものが最初にくる反時系列順で表示されます。投稿はフィードの作成にも使われます。
+
WordPress での''[[Posts|投稿]]'' (post) は、ブログで最もよく使われる投稿タイプです。投稿は通常、一番新しいものが最初にくる反時系列順で表示されます。投稿は [[Glossary#Feed|フィード]]の作成にも使われます。
  
 
<div id="Page">
 
<div id="Page">
19行目: 27行目:
 
</div>
 
</div>
  
WordPress でのページ (page) は投稿に似ていますが、投稿の時系列構造の外にあります。ページはメインのサイトドメインのすぐ下にくる独自 URL を持っており、特別な[[Pages#Page_Templates|ページテンプレート]]を使って表示することができます。また、他のページを親に持つ階層化した構造にすることもできます。
+
WordPress での[[Pages|ページ]] (page) は投稿に似ていますが、投稿の時系列構造の外にあります。ページはメインのサイトドメインのすぐ下にくる独自 URL を持っており、特別な[[Pages#Page_Templates|ページテンプレート]]を使って表示することができます。また、他のページを親に持つ階層化した構造にすることもできます、, but they normally cannot be assigned ''[[Glossary#Category|categories]]'' and ''[[Glossary#Tag|tags]]''. If ''[[Permalinks|permalinks]]'' are enabled, the ''permalink'' of a ''page'' is always composed solely of the main site URL and the user-friendly and URL-valid names (also referred to as ''[[Glossary#Slug|slug]]'') of the ''page'' and its parents if they exist. See the ''[[Pages]]'' article for more information about the differences.
 +
 
  
 
<div id="Attachment">
 
<div id="Attachment">
25行目: 34行目:
 
</div>
 
</div>
  
添付ファイル (attachment) は特別な投稿で、メディアアップロードシステムを使ってアップロードされたファイルについて、ファイル名・説明などすべての情報が含まれます。例えばファイルが画像の場合、画像のサイズや自動生成されたサムネイル、ファイルの位置、埋込み EXIF 情報などです。
+
''[[Attachments|添付ファイル]]'' (attachment) は特別な投稿で、WordPressメディアアップロードシステムを使ってアップロードされたファイルについて、ファイル名・説明、''[[Database_Description#Table:_wp_postmeta|wp_postmeta]]'' テーブルに格納されている、画像のサイズ等の情報が含まれます。
 +
 
 +
例えばファイルが画像の場合、画像のサイズや自動生成されたサムネイル、ファイルの位置、埋込み EXIF 情報などです。
 +
 
  
 
<div id="Revisions">
 
<div id="Revisions">
31行目: 43行目:
 
</div>
 
</div>
  
リビジョン (revision) は下書きや既存の投稿・ページの過去の[[Revision_Management|変更履歴]]を保存するための投稿タイプです。投稿・ページタイプと基本的には同じような内容ですが、元となる投稿・ページが親となります。
+
''[[Revision Management|リビジョン]]'(revision) は下書きや既存の投稿・ページの過去の[[Revision_Management|変更履歴]]を保存するための投稿タイプです。投稿・ページタイプと基本的には同じような内容ですが、元となる投稿・ページが親となります。それは ''wp_posts''テーブルの''post_parent''コラムを使います。
 +
 
  
<div id="Nav_Menus">
+
<div id="Navigation Menu">
=== ナビゲーションメニュー (nav_menu) ===
+
=== ナビゲーションメニュー (nav_menu_item) ===
 
</div>
 
</div>
  
ナビゲーションメニュー (nav_menu) は[[Appearance_Menus_SubPanel|ナビゲーションメニュー]]システムの各メニュー項目を保存するための投稿タイプです。posts テーブルの項目がサイト内に表示出来るコンテンツ以外にも使えるという最初の例と言えるでしょう。
+
''[[Navigation Menus|ナビゲーションメニュー]]' (nav_menu_item) は[[Appearance_Menus_SubPanel|ナビゲーションメニュー]]システムの各メニュー項目を保存するための投稿タイプです。''wp_posts'' テーブルの項目がサイト内に表示出来るコンテンツ以外にも使えるという最初の例と言えるでしょう。
  
<div id="Custom_Types">
+
 
 +
<div id="Custom Post Types">
 
== カスタム投稿タイプ ==
 
== カスタム投稿タイプ ==
 
</div>
 
</div>
 +
''Custom post types'' are new ''post types'' you can create. A ''custom post type'' can be added to WordPress via the <tt>[[Function_Reference/register_post_type|register_post_type()]]</tt> function. This function allows you to define a new ''post type'' by its labels, supported features, availability and other specifics.
  
 +
<!--
 
WordPress にカスタム投稿タイプを追加するには、[[関数リファレンス/register_post_type|register_post_type]] 関数を使って独自の投稿タイプとその動作を定義します。
 
WordPress にカスタム投稿タイプを追加するには、[[関数リファレンス/register_post_type|register_post_type]] 関数を使って独自の投稿タイプとその動作を定義します。
 +
-->
 +
 +
Note that you must call <tt>register_post_type()</tt> before the ''[[Plugin_API/Action_Reference/admin_menu|admin_menu]]'' and after the ''[[Plugin_API/Action_Reference/after_setup_theme|after_setup_theme]]'' ''action [[Glossary#Hook|hook]]s''. A good ''hook'' to use is the ''[[Plugin_API/Action_Reference/init|init]]'' ''hook''.
  
 
以下はカスタム投稿タイプ追加の基本的な一例です。
 
以下はカスタム投稿タイプ追加の基本的な一例です。
  
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
 
    )
 
  );
 
}
 
  
 +
<pre>
 +
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,
 +
      'has_archive' => true,
 +
    )
 +
  );
 +
}
 +
</pre>
 +
This creates a ''post type'' named ''Product'' identified as ''acme_product''. The <tt>[[Function_Reference/register_post_type|register_post_type()]]</tt> function receives two major arguments. The first one is ''labels'' which define the name of the ''post type'' in both plural and singular forms. The second one is ''public'' which is a predefined flag to show the ''post type'' on the ''[[Administration Screens|administration screens]]'' and to make it show up in the site content itself, if it's queried for.
 +
 +
<!--
 
"Product" というカスタム投稿タイプを作成します。主な引数が2つあります。一つ目は "labels" で、タイプ名(単数形と複数形)を定義します。二つ目は "public" で、管理画面でこの投稿タイプを表示し、要求があったときにメインサイトでも表示するかどうかを事前定義するフラッグです。
 
"Product" というカスタム投稿タイプを作成します。主な引数が2つあります。一つ目は "labels" で、タイプ名(単数形と複数形)を定義します。二つ目は "public" で、管理画面でこの投稿タイプを表示し、要求があったときにメインサイトでも表示するかどうかを事前定義するフラッグです。
 +
-->
  
 +
There are many more arguments you can pass to the <tt>register_post_type()</tt> function, to do things like set up hierarchy (to behave like ''pages''), show the new ''post type'' in searches, change the URLs of the new posts, and hide or show meta boxes in the [[Writing Posts|post edit]] 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 を変更する、投稿編集画面でメタボックスを表示する/隠す、といったことが可能です。これらのパラメータはオプションで、投稿タイプを詳細にカスタマイズするときに使用できます。
 
[[関数リファレンス/register_post_type|register_post_type]] 関数には、さまざまなパラメータを追加することができます。階層を設定する、検索で新しいカスタム投稿タイプを表示する、新規投稿の URL を変更する、投稿編集画面でメタボックスを表示する/隠す、といったことが可能です。これらのパラメータはオプションで、投稿タイプを詳細にカスタマイズするときに使用できます。
 +
-->
 +
 +
<div id="Archive page">
 +
=== アーカイブページ ===
 +
</div>
 +
For your index or archive page to be accessible (at /acme-product in the above example) you will need to update (or "flush") the permalink structure as described in the [[#Custom_Post_Type_Templates|Custom Post Type Templates]] section.  The template file used for the index is explained [[Template_Hierarchy|here]].
 +
 +
 +
<div id="A word about custom post types as a plugin">
 +
=== A word about custom post types as a plugin ===
 +
</div>
 +
In order to avoid breaking a site on theme switching, try to define custom post types as a plugin, or, better as a [[Must Use Plugins]]. This way you won't force users into using a certain theme.
 +
  
 
<div id="Naming_Best_Practices">
 
<div id="Naming_Best_Practices">
78行目: 119行目:
  
 
名前空間を付けることで、20 文字を越えないように注意してください。データベースの post_type カラムは現時点では最大 20 文字です。
 
名前空間を付けることで、20 文字を越えないように注意してください。データベースの post_type カラムは現時点では最大 20 文字です。
 +
  
 
<div id="Reserved_Post_Type_Names">
 
<div id="Reserved_Post_Type_Names">
84行目: 126行目:
 
コア開発チームは、まだ最終決定はしていませんが、wp-hackers メーリングリストでコア投稿タイプは "'''wp_'''" という名前空間を付けることが提案されています。つまり、もしコアチームが "Event" 投稿タイプを追加することを決定した場合、この提案によると内部での名前は "wp_event" を使用します。この提案は決定ではありませんが、"wp_" で始まる名前のカスタム投稿タイプは避けたほうが良いでしょう。
 
コア開発チームは、まだ最終決定はしていませんが、wp-hackers メーリングリストでコア投稿タイプは "'''wp_'''" という名前空間を付けることが提案されています。つまり、もしコアチームが "Event" 投稿タイプを追加することを決定した場合、この提案によると内部での名前は "wp_event" を使用します。この提案は決定ではありませんが、"wp_" で始まる名前のカスタム投稿タイプは避けたほうが良いでしょう。
  
<div id="Function_Reference">
 
=== 関数リファレンス ===
 
</div>
 
{{Post Type Tags}}
 
  
 
<div id="Admin_UI">
 
<div id="Admin_UI">
94行目: 132行目:
  
 
カスタム投稿タイプを作成すると、管理画面セクションに、新しい投稿タイプの投稿を作成する最上位レベルエントリが作成されます。投稿エディタに移動して、編集することができます。
 
カスタム投稿タイプを作成すると、管理画面セクションに、新しい投稿タイプの投稿を作成する最上位レベルエントリが作成されます。投稿エディタに移動して、編集することができます。
 +
  
 
<div id="URLs">
 
<div id="URLs">
101行目: 140行目:
 
新しい投稿タイプは、サイトレイアウトも独自のセクションを持ちます。上記の例では、新しい "product" 投稿タイプの投稿は、http://example.com/product/%product_name% (ここで %product_name% は製品名を URL 化したもの、つまり http://example.com/product/foobrozinator) で表示されます。他の投稿と同様、新しい投稿タイプの編集ページでこのリンクが表示されます。
 
新しい投稿タイプは、サイトレイアウトも独自のセクションを持ちます。上記の例では、新しい "product" 投稿タイプの投稿は、http://example.com/product/%product_name% (ここで %product_name% は製品名を URL 化したもの、つまり http://example.com/product/foobrozinator) で表示されます。他の投稿と同様、新しい投稿タイプの編集ページでこのリンクが表示されます。
  
<div id="URLs_with_Namespaced_Custom_Post_Types">
+
 
 +
<div id="URLs of Namespaced Custom Post Types Identifiers">
 
==== 名前空間付きカスタム投稿タイプの URL ====
 
==== 名前空間付きカスタム投稿タイプの URL ====
 
</div>
 
</div>
  
名前空間を付けて、かつきれいな URL 構造を使用したい場合は、"rewrite" 要素を配列に追加する必要があります。以下は、上記の "ACME Widgets" という例の場合です。
+
''カスタム投稿タイプ''の識別子の名前空間をつける時、かつきれいな URL 構造を使用したい場合は、<tt>[[関数リファレンス/register_post_type|register_post_type()]]</tt> 関数の "rewrite" 引数を配列に追加する必要があります。 以下は、上記の "ACME Widgets" という例の場合です。
 +
 
 +
<pre>
 +
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,
 +
      'has_archive' => true,
 +
    )
 +
  );
 +
}
 +
</pre>
  
add_action( 'init', 'create_post_type' );
+
The above will result in post URLs in the form ''http://<nowiki/>example.com/'''products'''/%product_name%''. Note that we used a plural word for the ''slug'' here which is a form that some people prefer because it implies a more logical URL for a page that embeds a list of products, i.e. ''<nowiki>http://example.com/products/</nowiki>''.
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 を意味するので、人々がこちらを好むからです。
 
上記は、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を見て要チェック) -->
+
ここで "products" のような一般的な名前を使用することで、同じ名前を使用するプラグインやテーマと衝突する可能性があることに注意してください。しかし、ほとんどの人は、長くて不明瞭な ''<nowiki>http://example.com/acme_products/foobrozinator</nowiki>'' のような 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="Custom Post Type Templates">
 +
=== カスタム投稿タイプテンプレート ===
 
</div>
 
</div>
  
テーマシステムでも、single-type テンプレート形式で投稿タイプをサポートします。single.php で投稿を表示するのと同様に、カスタム投稿タイプは(存在するなら) single-type.php を使用します。上記例では、single-acme_product.php ファイルを作成して、このテンプレートを使用して product 投稿を表示できます。
+
The WordPress theme system supports custom ''[[Glossary#Template|templates]]'' for ''custom post types'' too. A custom ''template'' for a single display of posts belonging to a ''custom post type'' is supported since WordPress [[Version 3.0]] and the support for a custom ''template'' for an archive display was added in [[Version 3.1]].
 +
 
 +
Note: In some cases, the ''permalink'' structure must be updated in order for the new ''template'' files to be accessed when viewing posts of a ''custom post type''. To do this, go to ''[[Administration Panels]]'' > ''[[Administration Panels#Settings|Settings]]'' > ''[[Administration Panels#Permalinks|Permalinks]]'', change the ''permalink'' structure to a different structure, save the changes, and change it back to the desired structure.
 +
 
 +
 
 +
<div id="Template Files">
 +
==== テンプレートファイル ====
 +
</div>
 +
 
 +
In the same way single ''posts'' and their archives can be displayed using the ''single.php'' and ''archive.php'' ''template'' files, respectively,
 +
* single posts of a ''custom post type'' will use ''single-'''{post_type}'''.php''
 +
* and their archives will use ''archive-'''{post_type}'''.php''
 +
* and if you don't have this post type archive page you can pass BLOG_URL?post_type='''{post_type}'''
 +
where '''''{post_type}''''' is the ''$post_type'' argument of the <tt>[[Function_Reference/register_post_type|register_post_type()]]</tt> function.
 +
 
 +
So for the above example, you could create ''single-'''acme_product'''.php'' and ''archive-'''acme_product'''.php'' ''template'' files for single product posts and their archives.
 +
 
 +
Alternatively, you can use the <tt>[[Function Reference/is post type archive|is_post_type_archive()]]</tt> function in any ''template'' file to check if the ''[[Glossary#Query|query]]'' shows an archive page of a given ''post types(s)'', and the <tt>[[Function Reference/post_type_archive_title|post_type_archive_title()]]</tt> to display the ''post type'' title.
 +
 
  
 
<div id="Querying_by_post_type">
 
<div id="Querying_by_post_type">
135行目: 198行目:
 
</div>
 
</div>
  
テーマシステムでは、特定の投稿タイプの投稿を表示する新しいクエリを作成することもできます。WP_Query に "post_type" パラメータを追加してくdださい。
+
テーマシステムでは、特定の投稿タイプの投稿を表示する新しいクエリを作成することもできます。WP_Query に "post_type" パラメータを追加してください。
  
 
例:
 
例:
$loop = new WP_Query( array( 'post_type' => 'product', 'posts_per_page' => 10 ) );
+
<pre>
while ( $loop->have_posts() ) : $loop->the_post();
+
$args = array( 'post_type' => 'product', 'posts_per_page' => 10 );
  the_title();
+
$loop = new WP_Query( $args );
  echo '&lt;div class="entry-content"&gt;';
+
while ( $loop->have_posts() ) : $loop->the_post();
  the_content();
+
  the_title();
  echo '&lt;/div&gt;';
+
  echo '&lt;div class="entry-content"&gt;';
endwhile;
+
  the_content();
 +
  echo '&lt;/div&gt;';
 +
endwhile;
 +
</pre>
  
 
product 投稿の最新 10 件をループし、タイトルと本文を表示します。
 
product 投稿の最新 10 件をループし、タイトルと本文を表示します。
 +
 +
 +
<div id="Custom Post Types in the Main Query">
 +
=== メインクエリにおけるカスタム投稿タイプ ===
 +
</div>
 +
 +
Registering a ''custom post type'' does not mean it gets added to the main ''[[Glossary#Query|query]]'' automatically.
 +
 +
If you want your ''custom post type'' posts to show up on standard archives or include them on your home page mixed up with other ''post types'', use the ''[[Plugin API/Action Reference/pre get posts|pre_get_posts]]'' ''action [[Glossary#Hook|hook]]''.
 +
 +
<pre>
 +
// Show posts of 'post', 'page' and 'movie' post types on home page
 +
add_action( 'pre_get_posts', 'add_my_post_types_to_query' );
 +
 +
function add_my_post_types_to_query( $query ) {
 +
  if ( is_home() && $query->is_main_query() )
 +
    $query->set( 'post_type', array( 'post', 'page', 'movie' ) );
 +
  return $query;
 +
}
 +
</pre>
 +
 +
 +
<div id="Function_Reference">
 +
=== 関数リファレンス ===
 +
</div>
 +
{{Post Type Tags}}
 +
  
 
<div id="More_Information">
 
<div id="More_Information">
159行目: 252行目:
  
 
=== 英語情報 ===
 
=== 英語情報 ===
 +
* [http://justintadlock.com/archives/2014/07/25/custom-post-type-standards Custom post type standards]
 +
* [http://generatewp.com/post-type/ WordPress Post Type Generator]
 
* [http://justintadlock.com/archives/2010/02/02/showing-custom-post-types-on-your-home-blog-page Showing custom post types on your home/blog page]
 
* [http://justintadlock.com/archives/2010/02/02/showing-custom-post-types-on-your-home-blog-page Showing custom post types on your home/blog page]
* [http://justintadlock.com/archives/2010/04/29/custom-post-types-in-wordpress Custom post types in WordPress]
+
* [http://blondish.net/podcast-presentation-wordpress-custom-post-types/ Podcast Presentation: WordPress Custom Post Types] Both Slides and Audio on Custom Post Types
 
* [http://kovshenin.com/archives/custom-post-types-in-wordpress-3-0/ Custom Post Types in WordPress 3.0]
 
* [http://kovshenin.com/archives/custom-post-types-in-wordpress-3-0/ Custom Post Types in WordPress 3.0]
 
* [http://kovshenin.com/archives/extending-custom-post-types-in-wordpress-3-0/ Extending Custom Post Types in WordPress 3.0]
 
* [http://kovshenin.com/archives/extending-custom-post-types-in-wordpress-3-0/ Extending Custom Post Types in WordPress 3.0]
 +
* [http://wordpress.org/extend/plugins/post-types-order/ Change Order for Custom Post Types in WordPress 3.0 and up]
 +
* [http://web-profile.com.ua/wordpress/docs/custom-post-types/ Custom Post Type Example]
 +
* [http://yoast.com/custom-post-type-snippets/ Custom Post Type Snippets]
 +
 +
{{NeedTrans|一部}}
  
{{原文|Custom Post Types|93324}} <!-- 12:41, 29 September 2010 MichaelH 版 -->
+
{{原文|Custom Post Types|150804}} <!-- 17:08, 13 April 2015‎ Wturrell  版 -->
  
 
[[Category:wp3.0]]
 
[[Category:wp3.0]]

2015年8月16日 (日) 08:14時点における版

WordPress は多数の異なるタイプのコンテンツを保存し、表示することができます。内部ではこれらはすべてひとつの場所(データベースの wp_posts テーブル)に格納されています。これらは、post_type というカラムによって差別化されています。

WordPress 3.0 からは、自分でカスタム投稿タイプを追加して異なる用途に利用できるようになっています。


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

  • Post (Post Type: 'post')
  • Page (Post Type: 'page')
  • Attachment (Post Type: 'attachment')
  • Revision (Post Type: 'revision')
  • Navigation menu (Post Type: 'nav_menu_item')


投稿 (post)

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

ページ (page)

WordPress でのページ (page) は投稿に似ていますが、投稿の時系列構造の外にあります。ページはメインのサイトドメインのすぐ下にくる独自 URL を持っており、特別なページテンプレートを使って表示することができます。また、他のページを親に持つ階層化した構造にすることもできます、, but they normally cannot be assigned categories and tags. If permalinks are enabled, the permalink of a page is always composed solely of the main site URL and the user-friendly and URL-valid names (also referred to as slug) of the page and its parents if they exist. See the Pages article for more information about the differences.


添付ファイル (attachment)

添付ファイル (attachment) は特別な投稿で、WordPressメディアアップロードシステムを使ってアップロードされたファイルについて、ファイル名・説明、wp_postmeta テーブルに格納されている、画像のサイズ等の情報が含まれます。

例えばファイルが画像の場合、画像のサイズや自動生成されたサムネイル、ファイルの位置、埋込み EXIF 情報などです。


リビジョン (revision)

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


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


カスタム投稿タイプ

Custom post types are new post types you can create. A custom post type can be added to WordPress via the register_post_type() function. This function allows you to define a new post type by its labels, supported features, availability and other specifics.


Note that you must call register_post_type() before the admin_menu and after the after_setup_theme action hooks. A good hook to use is the init hook.

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


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,
      'has_archive' => true,
    )
  );
}

This creates a post type named Product identified as acme_product. The register_post_type() function receives two major arguments. The first one is labels which define the name of the post type in both plural and singular forms. The second one is public which is a predefined flag to show the post type on the administration screens and to make it show up in the site content itself, if it's queried for.


There are many more arguments you can pass to the register_post_type() function, to do things like set up hierarchy (to behave like pages), show the new post type in searches, change the URLs of the new posts, and hide or show meta boxes in the post edit screen. These parameters are optional, and you can use them to configure your post type on a detailed level.

アーカイブページ

For your index or archive page to be accessible (at /acme-product in the above example) you will need to update (or "flush") the permalink structure as described in the Custom Post Type Templates section. The template file used for the index is explained here.


A word about custom post types as a plugin

In order to avoid breaking a site on theme switching, try to define custom post types as a plugin, or, better as a Must Use Plugins. This way you won't force users into using a certain theme.


良い名前の付け方

"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_" で始まる名前のカスタム投稿タイプは避けたほうが良いでしょう。


管理画面

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


URL

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


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

カスタム投稿タイプの識別子の名前空間をつける時、かつきれいな URL 構造を使用したい場合は、register_post_type() 関数の "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,
      'has_archive' => true,
    )
  );
}

The above will result in post URLs in the form http://example.com/products/%product_name%. Note that we used a plural word for the slug here which is a form 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/.

上記は、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.


カスタム投稿タイプテンプレート

The WordPress theme system supports custom templates for custom post types too. A custom template for a single display of posts belonging to a custom post type is supported since WordPress Version 3.0 and the support for a custom template for an archive display was added in Version 3.1.

Note: In some cases, the permalink structure must be updated in order for the new template files to be accessed when viewing posts of a custom post type. To do this, go to Administration Panels > Settings > Permalinks, change the permalink structure to a different structure, save the changes, and change it back to the desired structure.


テンプレートファイル

In the same way single posts and their archives can be displayed using the single.php and archive.php template files, respectively,

  • single posts of a custom post type will use single-{post_type}.php
  • and their archives will use archive-{post_type}.php
  • and if you don't have this post type archive page you can pass BLOG_URL?post_type={post_type}

where {post_type} is the $post_type argument of the register_post_type() function.

So for the above example, you could create single-acme_product.php and archive-acme_product.php template files for single product posts and their archives.

Alternatively, you can use the is_post_type_archive() function in any template file to check if the query shows an archive page of a given post types(s), and the post_type_archive_title() to display the post type title.


投稿タイプによるクエリ

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

例:

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

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


メインクエリにおけるカスタム投稿タイプ

Registering a custom post type does not mean it gets added to the main query automatically.

If you want your custom post type posts to show up on standard archives or include them on your home page mixed up with other post types, use the pre_get_posts action hook.

// Show posts of 'post', 'page' and 'movie' post types on home page
add_action( 'pre_get_posts', 'add_my_post_types_to_query' );

function add_my_post_types_to_query( $query ) {
  if ( is_home() && $query->is_main_query() )
    $query->set( 'post_type', array( 'post', 'page', 'movie' ) );
  return $query;
}


関数リファレンス

投稿タイプ: 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()


追加情報

日本語情報

英語情報

このページ「投稿タイプ」は一部未翻訳です。和訳や日本語情報を加筆してくださる協力者を求めています

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

Vlastné typy príspevkov