Takumi Hirashima Artworks

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' => __('登録する') // 新規項目追加のラベル
),
'description' => 'ディスクリプション', // ディスクリプションを指定
'public' => true, // 投稿タイプをパブリックにする
'has_archive' => true, // アーカイブを有効にする
'hierarchical' => false, // ページ階層の指定
'menu_position' =>5, // 管理画面上の配置指定
'supports' => array('title','editor','thumbnail','custom-fields','excerpt','author','trackbacks','comments','revisions','page-attributes') // サポートの指定
)
);
}

最初に紹介した方法はクラシックテーマで追加する方法です。
Gutenberg に対応させる場合は以下の記述もお試しください。

function register_custom_post_type_products() {
register_post_type( 'products', // 投稿タイプのスラッグ
array(
'labels' => array(
'name' => __( '製品情報' ),
'singular_name' => __( '製品情報' ),
'add_new' => _x( '新規追加', '製品情報' ),
'add_new_item' => __( '新しい製品を追加' ),
'edit_item' => __( '製品を編集' ),
'new_item' => __( '新しい製品' ),
'view_item' => __( '製品を表示' ),
'search_items' => __( '製品を検索' ),
'not_found' => __( '製品が見つかりませんでした' ),
'not_found_in_trash' => __( 'ゴミ箱内に製品が見つかりませんでした' ),
'all_items' => __( '製品一覧' ),
'menu_name' => __( '製品情報' ),
'name_admin_bar' => __( '製品情報' )
),
'description' => '製品情報を管理するカスタム投稿タイプです。',
'public' => true,
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 5,
'menu_icon' => 'dashicons-products', // 必要に応じてアイコン指定
'supports' => array(
'title',
'editor',
'thumbnail',
'excerpt',
'custom-fields',
'author',
'comments',
'revisions',
'page-attributes'
),
'show_in_rest' => true // Gutenberg対応
)
);
}

記述に問題がなければ管理画面内にカスタム投稿が追加されたはずです。
カスタム投稿を複数追加する場合は次のように 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',
array(
'labels' => array(
'name' => '商品',
'singular_name' => '商品'
),
'public' => true,
'has_archive' => true,
'menu_position' => 5,
'supports' => array( 'title', 'editor', 'thumbnail' )
)
);
/*【カスタム分類(タクソノミー)】*/
register_taxonomy(
'products-cat',
'products',
array(
'hierarchical' => true,
'update_count_callback' => '_update_post_term_count',
'label' => 'カテゴリー',
'singular_label' => 'カテゴリー',
'public' => true,
'show_ui' => true,
'show_admin_column' => true, // ← 一覧画面に表示
'meta_box_cb' => 'post_categories_meta_box', // ← 投稿編集画面に表示するために必要
'rewrite' => array('slug' => 'products-cat') // ← 任意
)
);
}

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

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

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

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

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

まとめ

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

モバイルバージョンを終了