カスタム投稿タイプとカスタムタクソノミーの覚え書き~

カスタム投稿作成の依頼がきたときにすぐ使えるようにメモφ(..)

カスタム投稿でブログ作成の依頼があったので、その時のソースを使ってます^^;

functions.php

function 関数名() {
  register_post_type(カスタム投稿タイプ名, パラメータの配列);
  flush_rewrite_rules();
}
add_action('init', 関数名);

▲これが基本の形でパラメータでいろいろ形を作っていきます。

カスタム投稿タイプ名は最大20文字の半角英数字で指定します。
標準で作成される投稿タイプ「post」「page」「attachment」「revision」は指定できません。

flush_rewrite_rules()はパーマリンク設定を再設定するための処理で、この処理を入れないと、カスタム投稿タイプのページに正しくアクセスすることができないことがあります。

▼そして今回設定した形はこちら。カスタム投稿でブログ作成だったので、
パラメーターはデフォルトのままでもいけますが、
入れた方がわかりやすいかなーと思い、入れときました。。

functions.php

// カスタム投稿タイプを作成
function add_blog_post_type(){
  $labels = array(
		'name'                => 'ブログ',
		'singular_name'       => '投稿',
		'add_new'             => '新規追加',
		'add_new_item'        => '投稿を新規追加',
		'edit_item'           => '投稿を編集する',
		'new_item'            => '新規投稿',
		'all_items'           => '投稿一覧',
		'view_item'           => '投稿の説明を見る',
		'search_items'        => '投稿を検索する',
		'not_found'           => '投稿が見つかりませんでした。',
		'not_found_in_trash'  => 'ゴミ箱内に投稿が見つかりませんでした。'
  );
  $args = array(
    'labels'              => $labels,
    'public'              => true,
    'has_archive'         => true,
    'menu_position'       => 5,
    'supports'            => array('title','editor'),
		'taxonomies'          => array('blog_cat','blog_tag')
  );
  register_post_type('blog',$args);
}
add_action('init', 'add_blog_post_type');



// カスタム投稿タイプ用のカテゴリ&タグを作成
function add_taxonomies() {
	// カテゴリを作成
	$labels = array(
		'name'                => 'ブログカテゴリ',
		'singular_name'       => 'ブログカテゴリ',
		'search_items'        => 'ブログカテゴリを検索',
		'all_items'           => '全てのブログカテゴリ',
		'parent_item'         => '親カテゴリ',
		'parent_item_colon'   => '親カテゴリ:',
		'edit_item'           => 'ブログカテゴリを編集',
		'update_item'         => 'ブログカテゴリを更新',
		'add_new_item'        => '新規ブログカテゴリを追加',
		'new_item_name'       => '新規ブログカテゴリ',
		'menu_name'           => 'ブログカテゴリ'
	);
	$args = array(
		'hierarchical'        => true,
		'labels'              => $labels,
		'rewrite'             => array( 'slug' => 'blog_cat' )
	);
	register_taxonomy( 'blog_cat', 'blog', $args );

	// タグを作成
	$labels = array(
		'name'                => 'ブログタグ',
		'singular_name'       => 'ブログタグ',
		'search_items'        => 'ブログタグを検索',
		'all_items'           => '全てのブログタグ',
		'parent_item'         => null,
		'parent_item_colon'   => null,
		'edit_item'           => 'ブログタグを編集',
		'update_item'         => 'ブログタグを更新',
		'add_new_item'        => '新規ブログタグを追加',
		'new_item_name'       => '新規ブログタグ',
		'separate_items_with_commas'   => 'ブログタグをコンマで区切る',
		'add_or_remove_items'          => 'ブログタグを追加or削除する',
		'choose_from_most_used'        => 'よく使われているブログタグから選択',
		'not_found'                    => 'アイテムは見つかりませんでした',
		'menu_name'                    => 'ブログタグ'
	);
	$args = array(
		'hierarchical'            => false,
		'labels'                  => $labels,
		'update_count_callback'   => '_update_post_term_count',
		'rewrite'                 => array( 'slug' => 'blog_tag' )
	);

	register_taxonomy( 'blog_tag', 'blog', $args );
}
add_action('init', 'add_taxonomies');

カスタム投稿タイプのアーカイブページ

通常利用している「index.php」「archive.php」ではなく、
カスタム投稿専用のテンプレートを使用するときは、
ファイル名を「archive-◯◯.php」で作成します。
◯◯には作成するカスタム投稿タイプ名が入ります。
今回でいうと
「archive-blog.php」になります。

コピペ用にループのタグも載せておきます。

archive-blog.php

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
<div><?php the_content(); ?></div>
<div><?php the_time('Y/m/d'); ?></div>
<?php endwhile; endif; ?>

カスタム投稿タイプのシングルページ

同じく、投稿ページも「single-blog.php」のように、
「single-カスタム投稿タイプ名.php」とすると
カスタム投稿専用のテンプレートとして利用できます。

コピペ用にループのタグも載せておきます。

single-blog.php

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
<div><?php the_content(); ?></div>
<div><?php the_time('Y/m/d'); ?></div>
<?php endwhile; endif; ?>

サイドなどに記事のタイトル一覧を表示させる

以下のコードで、今回作成した記事のタイトル一覧をサイドに表示させます。

<ul>
<?php
	$args = array(
		'posts_per_page' => 7,
		'post_type' => 'blog',
	);
	$my_query = new WP_Query($args);
?>
<?php if($my_query->have_posts()): while($my_query->have_posts()): $my_query->the_post(); ?>
	<li><a href="<?php the_permalink(); ?>">
	<?php the_title(); ?></a></li>
<?php endwhile; endif; ?>
<?php wp_reset_postdata(); ?>
</ul>    

「posts_type」パラメータで、get_post_type() と指定すると、
表示中の記事と同じ投稿タイプの記事を取得できます。

'post_type' => get_post_type(),

カスタム投稿タイプの詳細設定(オプション)

※ここで紹介しているパラメーター以外にもあります。

label カスタム投稿タイプの名前を指定。
(初期値: $post_type)
この値が管理画面のメニュー、カスタム投稿一覧ページのタイトルに表示される。日本語使用可能。
labels 「新規追加」「新規投稿を追加」「投稿の編集」などのデフォルトのラベルを変更
description カスタム投稿タイプの概要を指定。
public 管理画面にカスタム分類の作成や一覧のページを表示するかどうか(初期値: false )
hierarchical この投稿タイプが階層かどうか(初期値: false )
menu_icon カスタム投稿のメニューに表示するアイコンのURLを指定。
例:’menu_icon’ => get_bloginfo(‘template_url’).’/images/wood_icon_s.jpg’
デフォルトは「投稿」のアイコン(ピンの絵柄)
has_archive 「true」に指定すると投稿した記事の一覧ページ(投稿タイプのトップページ)を作成することができる
query_var 生成する個別ページのURLフォーマット
(投稿タイプ名=記事のスラッグ)(初期値: true )
hierarchical この投稿タイプが階層かどうか
menu_position 投稿タイプが表示されるメニューの位置
(初期値: null – デフォルトはコメントの下 )
supports 記事編集画面に表示する編集エリアパーツ
例:「supports=>array(‘title’, ‘editor’)」とすると、タイトルと本文の入力欄が表示される。
title:タイトル
editor:本文(とその編集機能)
authro:作成者
thumbnail:アイキャッチ画像
excerpt:抜粋
comments:コメント一覧
trackbacks:トラックバック送信
custom-fields:カスタムフィールド
revisions:リビジョン
page-attributes :属性(「hierarchical」を「true」に設定している場合のみ指定)
rewrite ページごとにパーマリンクを設定したとき、有効にするか(初期値: true )
capability_type 投稿タイプの閲覧・編集・削除の権限制御に使用する。
taxonomies カスタム投稿タイプ専用のカテゴリやタグを使用するときに指定します。

管理画面に表示されるラベル(labelsの配列)

nameカスタム投稿タイプ名(通常複数形)
ダッシュボードのサイドメニュー、カスタム投稿一覧ページのタイトルに表示される
この値は「label」の値を上書きする。
singular_nameカスタム投稿の識別名
add_new新規追加ラベル:サイドメニューの下層に表示
add_new_item新規項目追加ラベル:投稿画面のタイトル
edit_item項目編集ラベル:編集画面のタイトル
all_items一覧項目ラベル:サイドメニューの下層に表示
view_item項目を表示ラベル
search_items検索ラベル:一覧の検索ボタンテキスト
not_found記事検索で記事が見つからない時に表示するテキスト
not_found_in_trashゴミ箱内検索で記事が見つからない時に表示するテキスト
parent_item_colon

menu_position:5ずつ数値を上げると、管理画面の下へと移動

MENU_POSITIONの数値管理画面上の移動場所
5投稿の下
10メディアの下
15リンクの下
20固定ページの下
25コメントの下
60外観の下
65プラグインの下
70ユーザーの下
75ツールの下
80設定の下
100最下部に独立させる

LATEST ENTRY - 新着記事 -

CATEGORY - カテゴリ一覧 -