WordPress

WordPress カスタム投稿タイプの作成方法

WordPress カスタム投稿タイプの作成方法

WordPress で投稿とは別にオリジナルの投稿タイプ(以下、カスタム投稿タイプ)を作成する方法を紹介します。
例えば、投稿とは別に「お知らせ」や「製品情報」などを登録したい時に便利な方法です。

  1. カスタム投稿タイプとは?
  2. カスタム投稿タイプの作成方法
    1. 管理画面内での表示内容をカスタマイズする方法
    2. カスタム投稿タイプに階層構造を持たせる方法
  3. カスタム投稿タイプの表示方法
  4. カスタム投稿タイプにカテゴリやタグを追加する方法
  5. カスタム投稿タイプの詳細ページを非表示にする方法

カスタム投稿タイプとは?

WordPress では投稿とは別に任意の投稿タイプコンテンツを追加することができます。
これを「カスタム投稿タイプ」と呼びます。

カスタム投稿タイプの追加方法

カスタム投稿タイプを追加するには functions.php にコードを追加します。
例えば、カスタム投稿タイプ「製品情報(スラッグ:Products)」を追加する場合は、次のコードを functions.php に追加します。

/*【カスタム投稿設定】================================================ */
add_action( 'init', 'custom_post_type' );
function custom_post_type() {
/*【カスタム投稿タイプの追加】 */
register_post_type( 'products', // 投稿タイプのスラッグの指定
array(
'labels' => array(
'name' => __( '製品情報' ), // メニューに表示されるラベル
'singular_name' => __( '製品情報' ), // 単体系のラベル
'add_new' => _x('新しく登録する', '製品情報'), // 新規追加のラベル、国際化対応のために投稿タイプを指定
'add_new_item' => __('登録する') // 新規項目追加のラベル
),
'public' => true, // 投稿タイプをパブリックにする
'has_archive' => true, // アーカイブを有効にする
'hierarchical' => false, // ページ階層の指定
'menu_position' =>5, // 管理画面上の配置指定
'supports' => array('title','editor','thumbnail','custom-fields','excerpt','author','trackbacks','comments','revisions','page-attributes') // サポートの指定
)
);
}

記述に問題がなければ管理画面内にカスタム投稿が追加されたはずです。
カスタム投稿を複数追加する場合は次のように register_post_type を任意の数追加します。

/*【カスタム投稿設定】================================================ */
add_action( 'init', 'custom_post_type' );
function custom_post_type() {
/*【カスタム投稿タイプの追加1】 */
register_post_type( 'products1', // 投稿タイプのスラッグの指定
...省略...
);
/*【カスタム投稿タイプの追加2】 */
register_post_type( 'products2', // 投稿タイプのスラッグの指定
...省略...
);
}

管理画面内での表示内容をカスタマイズする方法

管理画面に表示される文言などをカスタマイズしたい場合は、前述したコードの labels の値に以下のコードを追加します。

...省略...
'labels' => array(
'name' => 'カスタムポスト名',
'singular_name' => 'カスタムポスト名',
'menu_name' => 'カスタムポスト名',
'all_items' => 'すべての項目',
'add_new' => '新規追加',
'add_new_item' => '新規項目追加',
'edit' => '編集',
'edit_item' => '項目を編集',
'new_item' => '新規項目',
'view' => '表示',
'view_item' => '項目を表示',
'search_items' => '検索項目',
'not_found' => '見つかりません',
'not_found_in_trash' => 'ゴミ箱にはありません',
'parent' => '親'
),
...省略...

カスタム投稿タイプに階層構造を持たせる方法

カスタム投稿タイプに固定ページのような階層構造を持たせるには hierarchical を編集します。
前述したコードの hierarchicalfalse から true に変更します。

'hierarchical' => true, // ページの階層化を有効にする

編集ページに親を選択するボックスを表示するためには supports パラメータに page-attributes を含める必要があります。
次のコードは supportspage-attributes を含めた例です。

'supports' => array('title','editor','thumbnail','custom-fields','excerpt','author','trackbacks','comments','revisions','page-attributes') // サポートの指定

カスタム投稿タイプの表示方法

追加されたカスタム投稿は通常のメインループで表示することができますが、サブループを追加することで好きな場所に好きな条件で表示することも可能です。
例えば、カスタム投稿タイプ「製品情報(スラッグ:Products)」の最新5件を表示する場合は、次のコードをテンプレートファイルに追加します。

<?php
$args = array(
'post_type' => 'Products', // 投稿タイプのスラッグを指定
'post_status' => 'publish', // 公開済の投稿を指定
'posts_per_page' => 5 // 投稿件数の指定
);
$the_query = new WP_Query($args); if($the_query->have_posts()):
?>
<?php while ($the_query->have_posts()): $the_query->the_post(); ?>
<?php echo get_the_date(); ?>
<?php the_permalink(); ?>
<?php echo get_the_title(); ?>
<?php the_content(); ?>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php else: ?>
<!-- 投稿が無い場合の処理 -->
<?php endif; ?>

サブループのカスタマイズ方法はWordPress メインループとサブループの表示方法で詳しく紹介しています。

カスタム投稿タイプにカテゴリやタグを追加する方法

カスタム投稿タイプにカテゴリやタグを追加する場合は、カスタム分類(タクソノミー)を追加します。
前述した設定に、オリジナルのカスタム分類(タクソノミー)を追加する場合は次のコードを追加します。

/*【カスタム投稿設定】 */
add_action( 'init', 'custom_post_type' );
function custom_post_type() {
/*【カスタム投稿タイプの追加】 */
register_post_type( 'products', // 投稿タイプのスラッグの指定
...省略...
);
/*【カスタム分類(タクソノミー)】*/
register_taxonomy(
'products-cat', /* タクソノミースラッグ */
'products', /* 使用するカスタム投稿タイプを選択、複数の投稿タイプでタクソノミーを使い回す場合は array('aaa','bbb'), と表記 */
array(
'hierarchical' => true, /* trueならカテゴリ、falseならタグ */
'update_count_callback' => '_update_post_term_count',
'label' => 'タクソノミー名',
'singular_label' => 'タクソノミー名',
'public' => true,
'show_ui' => true
)
);
}

追加したカスタム分類(タクソノミー)の表示方法は、WordPress タームの取得と表示方法で詳しく紹介しています。

カスタム投稿タイプの詳細ページを非表示にする方法

例えば「商品情報は登録したいけどその商品詳細ページを作りたくない」と言った時には、パラメーター publicfalse にすることで、詳細ページを表示させないようにすることができます。

...省略...
'public' => false, // false の場合に意図的に出さない限り投稿タイプを管理画面とページに表示させない
'show_ui' => true, // true の場合に投稿タイプを管理するUIを表示する
...省略...

publicfalse するとプレビューやサイトから表示を消すことができますが、このままでは管理画面からカスタム投稿を編集できないため、show_uitrue にすることで、管理画面にカスタム投稿のUIを表示します。
この場合、管理画面の一覧からはページのプレビューを表示するリンク「表示」が非表示になります。

まとめ

WordPress で投稿以外のオリジナル投稿タイプを追加する方法を紹介しました。