この記事の所要時間: 1651

WordPressでカスタム投稿タイプ作っちゃって、カスタムフィールド作っちゃうとなんでもできちゃいますよね。

正直いろいろカスタマイズしちゃうよりこのプラグインで「投稿タイプ」追加しちゃうと手っ取り早いと思います。

ただ、たくさんサイトを作る制作さんだと毎回この作業もめんどう…というか(正直本来もっと面倒なんだけどw)

自分で基本となるテーマ持ってたりすればそこに書いてあるものを基本的に入れたくなりますよね。

functions.php でカスタム投稿タイプ作る

もうテーマに入っている functions.php にこのコード書いとけばそこからいじるだけ…になります。

…基本はこちら

やはりリファレンス見るのが一番くわしいです。

こちらに書いている基本形

function codex_custom_init() {
    $args = array(
      'public' => true,
      'label'  => 'Books'
    );
    register_post_type( 'book', $args );
}
add_action( 'init', 'codex_custom_init' );

これだけを テーマの functions.php に追記するだけで

Books というメニューが出来て、投稿できちゃうはずです。

ただ、これでは細かい設定ができていませんので詳しく…

ご紹介したリンク先では基本的に英語で表示されますので、言語ファイルを作って日本語化する必要がありますが、そこをはしょって日本語で表示するように記述しなおしてみました。

add_action( 'init', 'custom_post_type_book_init' );
/**
 * カスタム投稿タイプ book を登録する。
 *
 * @link http://codex.wordpress.org/Function_Reference/register_post_type
 */
function custom_post_type_book_init() {
	// ラベルを設定
	$labels = array(
		'name'               => 'Books',	// 記事一覧に表示される文字列
		'singular_name'      => 'Book',		// 
		'menu_name'          => 'Books',	// メニューに表示される文字列
		'name_admin_bar'     => 'Book',		// 管理バーの「新規」を押したときに表示される投稿タイプ名
		'add_new'            => '新規追加',	// 新規追加 時の文字列
		'add_new_item'       => "新規Book",	// 新規投稿画面に表示される文字列
		'new_item'           => "新しい記事",	// 
		'edit_item'          => "記事編集",	// 編集画面に表示される文字列
		'view_item'          => "記事を見る",	// 管理バーに表示される「この記事を見る」リンク文字列
		'all_items'          => "投稿一覧",	// メニューの「投稿一覧」文字列
		'search_items'       => "本を探す",	// 記事一覧画面の「投稿を検索」ボタンの文字列
		'parent_item_colon'  => "親本",	// 親記事がある場合
		'not_found'          => "みつかりませーん",	// 検索時みつからないとき
		'not_found_in_trash' => "ごみばこにもありませーーん"	// ゴミ箱にないとき
	);

	$args = array(
		'labels'             => $labels,	// 先に設定したラベルを設定する
		// 'public' について 設定しない場合は 「false」となる
		// 'false' - 投稿タイプをパブリックにしない。他のところで明示的に用意しない限り、管理画面とフロントエンドのどちらからも使えない。
		// 'true' - 投稿タイプをパブリックにする。フロントエンドと管理画面の両方から使えるように。
		'public'             => true,
		// 'publicly_queryable' について
		// 'false' にすると post_type=book など利用できない デフォルトは「public」で設定した値になる
		'publicly_queryable' => true,
		// 'show_ui' について
		// 'false' - この投稿タイプのユーザーインターフェースを表示しない
		// 'true' - (管理パネルで)この投稿タイプのユーザーインターフェースを表示する
		'show_ui'            => true,
		// 'show_in_nav_menus' について
		// ナビゲーションメニューでこの投稿タイプが選択可能かどうか。
		// デフォルトは「public」で設定した値になる
		'show_in_nav_menus'	 => true,	
		// 'show_in_menu' について
		//  管理画面にこの投稿タイプを表示するかどうか。表示するには show_ui が true でなければならない。
		// デフォルトは「show_ui」で設定した値となる
		'show_in_menu'       => true,
		// 'show_in_admin_bar' について
		// (真偽値) (オプション) この投稿タイプを WordPress の管理バーから使えるようにするかどうか。
		// デフォルトは「show_in_menu」で設定した値となる
		'show_in_admin_bar'	 => true,
		// 'menu_position' について
		// デフォルトは null =「コメントの下」
		// 5 - 投稿の下
		// 10 - メディアの下
		// 15 - リンクの下
		// 20 - 固定ページの下
		// 25 - コメントの下
		// 60 - 最初の区切りの下(コメントの下に区切りがある)
		// 65 - プラグインの下
		// 70 - ユーザーの下
		// 75 - ツールの下
		// 80 - 設定の下
		// 100 - 二つ目の区切りの下(設定の下に区切りがある)
		'menu_position'      => null,
		// 'menu_icon' について
		// このメニューで使用するアイコンの URL、または Dashicons のアイコンの名前。
		// 'dashicons-video-alt' (Dashicons のビデオアイコンを使う)
		// 'get_template_directory_uri() . "images/cutom-posttype-icon.png"' (現在のテーマに含まれているイメージを使う)
		// https://developer.wordpress.org/resource/dashicons/
		'menu_icon'			 => 'dashicons-book',
		// 'capability_type' について
		// 閲覧/編集/削除の権限を構築する文字列。
		// デフォルト 'post'
		// https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/register_post_type
		//  の 'capability_type'の項目をご確認ください。
		/** 'capability_type'	 => 'post', */
		// 'capabilities' について
		// この投稿タイプの権限の配列。
		// デフォルト capability_type を使って構築される
		// https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/register_post_type
		//  の 'capabilities'の項目をご確認ください。
		/** 'capabilities'		 => 'post', */
		// 'map_meta_cap' について
		// WordPress が持つデフォルトのメタ権限処理を使用するかどうか。
		// デフォルト null
		// false を指定すると admin 権限グループのユーザーは投稿タイプを編集できなくなります。
		// その場合は edit_post 権限をすべての権限グループ(投稿タイプを追加または編集する)へ追加しなければなりません。
		// https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/register_post_type
		//  の 'map_meta_cap'の項目をご確認ください。
		/** 'map_meta_cap'		 => null, */
		// 'hierarchical' について
		// この投稿タイプが階層を持つ(例:固定ページ)かどうか。true の場合、親を指定できるようになる。
		// 編集ページに親を選択するボックスを表示するために、'supports' パラメータに 'page-attributes' を含めなければならない。
		'hierarchical'       => false,	// 親記事を作る場合、supports に 'page-attributes' を入れないと親記事を選べない
		// 'supports' について
		//  add_post_type_support() を直接呼び出すエイリアス。
		// バージョン 3.5 以降では、配列の代わりに真偽値 false を指定することによりデフォルトの動作(title と editor)を止めることができる。
		// デフォルト title と editor
		// その他のパラメータについては
		// https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/register_post_type
		//  の 'supports'の項目をご確認ください。
		'supports'           => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' /* , 'page-attributes' */ ),
		// 'register_meta_box_cb' について
		// 編集フォームのメタボックスをセットアップするのに呼び出すコールバック関数を指定する(関数名を文字列で指定)。
		// コールバック関数は 1 つの引数 $post (現在編集中の投稿の WP_Post オブジェクト)を受け取る。コールバックの中では remove_meta_box()/en と add_meta_box() を呼び出す。
		// 投稿タイプの編集時にメタボックス(カスタムフィールドなど)を用意したいときに利用する
		// 参考: https://www.webprofessional.jp/adding-meta-boxes-post-types-wordpress/
		/** 'register_meta_box_cb' => null, */
		// 'taxonomies' について
		// この投稿タイプで使用する、登録されたタクソノミーの配列(category や post_tag など)。
		// register_taxonomy_for_object_type() を直接呼び出す代わりに使用可能。タクソノミー(カスタム分類)は register_taxonomy() で登録する必要がある。
		'taxonomies'		 => array( 'category', 'post_tag' ),	// カテゴリー・タグを使う場合
		// 'has_archive' について
		// この投稿タイプのアーカイブを有効にする。デフォルトでは、アーカイブのスラッグとして $post_type が使われる。
		// リライトが有効になっている時は、適切なリライトルールが生成される。rewrite オプションを指定して、使用されるスラッグを変更することもできる。
		'has_archive'        => true,
		// 'rewrite' について
		//  この投稿タイプのパーマリンクのリライト方法を変更する。リライトを避けるには false を指定する。
		// その他のパラメータについては
		// https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/register_post_type
		//  の 'rewrite'の項目をご確認ください。
		'rewrite'            => array( 'slug' => 'book' ),
		// 'query_var' について
		// この投稿に使用する query_var キーの名前。
		'query_var'          => true,	// book={投稿のスラッグ} でアクセスできる
		// 'can_export' について
		// この投稿タイプをエクスポート可能かどうか。
		// デフォルト true
		'can_export' 		 => true,
	);
        // 上記パラメータで投稿タイプをつくります。
        // この場合、 'book' が投稿タイプ名になります。
	register_post_type( 'book', $args );
}

パラメータ等いろいろあるので詳しいことはこちらで確認してください。

…応用すると

検索されない投稿タイプが作れる

検索で表示されなくなる設定や画面上に出てこないようにする設定も行えるので、クライアント(編集者)は意識しないでよいようなものを投稿タイプにすることで使い勝手がよくなったりします。

たとえばメールフォームを投稿タイプで作っているようなプラグインではこのように「検索に出ない」設定を行っています。

編集画面から二次的に利用されるパラメータなどを画面に出さずに利用できる

編集者には意識させることなく二次的に利用できる投稿タイプを作ることで自動的に保存したり呼び出したりして利用することが出来る。

…裏での管理が大変ですが。

いろいろ作れそうですよね。

忘れちゃいけない カスタム投稿タイプ作るときの処理

カスタム投稿タイプを有効にするとき、ファイルに書いてアップロードしただけでは「投稿」は出来ても「表示」出来ないことがあります!

有効化するときはリライトルールをフラッシュするのを忘れずに!!

結局詳しいことは…のリンク先に書いてあるのですが、「あるある」なのでこちらに書いておきます。

今回は functions.php に書く…ということでテーマの場合になりますのでこちらを記述します。

function my_rewrite_flush() {
    flush_rewrite_rules();
}
add_action( 'after_switch_theme', 'my_rewrite_flush' );

プラグインの場合はこちら…

※こちらの記事のコードを一部改変したコードです。(プラグイン用、テーマ用どちらも)

https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/register_post_type

/** 
 * カスタム投稿タイプを custom_post_type_book_init() で作る前提での内容です。
 */
function my_rewrite_flush() {
    // 最初に、上記の関数(custom_post_type_book_init)でカスタム投稿タイプ(CPT)を「追加」する。
    // 注意:ここで「追加」と括弧を付けて書いたのは、まだ CPT がデータベースに登録されないため。
    // 後ほど、この CPT の投稿を追加したときに初めて
    // 投稿エントリーの post_type カラム(データベースの列)からのみ CPT が参照される。
    custom_post_type_book_init();

    // 重要:下記はこの例のプラグイン有効化フックの中で *のみ* 実行される!
    // これをページ読み込みの度に呼び出すことは *絶対に行ってはならない*!!
    flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'my_rewrite_flush' );

テーマでカスタム投稿タイプを作ってページが「見つかりません」となったときは

…テーマでカスタム投稿タイプを作ってページが見つからないのを防ぐコードが上記なわけですが、とにかくその状態を脱したい場合は下記をお試しください。

  • WordPress管理画面を開く
  • 設定 → パーマリンクを開く
  • 画面の内容はそのまま「変更を保存」ボタンを押す
  • もう一度カスタム投稿タイプの記事を見てみる

どうでしょう。

以上です。

この記事が気に入ったら
いいね ! しよう

Twitter で