お知らせ

フリーランスのための青色申告ガイドブック2012年1月11日

フリーランスのための青色申告ガイドブック」を発売しました。
青色申告にしてみたいが、やり方がよく分からないフリーランスの方のための解説書です。
会計ソフトの「やよいの青色申告」を使って、簿記の知識がなくても帳簿付けができるように工夫しました。
PDFによる販売で、当サイトでのみ購入できます(書店では購入できません)

他にも多数書籍を執筆しています。
こちらもぜひご覧ください。

register_taxonomy関数の書き方

| コメント(8) | トラックバック(0)

WordPressにカスタム分類を登録するには、「register_taxonomy」という関数を使います。
この関数の書き方を紹介します。

1.register_taxonomy関数の概要

register_taxonomy関数は、WordPressにカスタム分類を登録する働きをします。
基本的な書き方は以下の通りです。

register_taxonomy(カスタム分類名, 投稿のタイプ名, パラメータの配列)

「カスタム分類名」は、登録したいカスタム分類に合わせて、その名前を英単語で指定します。
例えば、地域を表すカスタム分類を追加するなら、カスタム投稿タイプ名は「area」等にすると良いでしょう。

「投稿のタイプ名」では、カスタム分類で分類できるようにしたい投稿のタイプを指定します。
WordPress標準の投稿を分類できるようにするなら、タイプ名として「post」を指定します。
また、カスタム投稿タイプを分類できるようにするなら、そのカスタム投稿タイプのタイプ名を指定します。
例えば、「realestate」というカスタム投稿タイプを登録してある時に、そのカスタム投稿タイプを分類できるようにするなら、「投稿のタイプ名」に「realestate」を指定します。

1つのカスタム分類を、複数のタイプの投稿に結び付けることもできます。
その場合は、「投稿のタイプ名」の箇所に、カスタム投稿タイプ名の配列を指定します。
例えば、「video」と「audio」のカスタム投稿タイプを登録してある時に、その両方を同じ1つのカスタム分類で分類できるようにする場合は、「投稿のタイプ名」の箇所を「array('video', 'audio')」と指定します。

また、「パラメータの配列」には、register_taxonomy関数に渡す各種のパラメータを、連想配列の形で指定します。

以下の例は、物件(realestate)のカスタム投稿タイプを、地域(area)のカスタム分類で分類できるようにする場合の書き方の例です。
なお、物件のカスタム投稿タイプは、すでに登録されているものとします。

$args = array(
  'label' => '地域',
  'labels' => array(
    'name' => '地域',
    'singular_name' => '地域',
    'search_items' => '地域を検索',
    'popular_items' => 'よく使われている地域',
    'all_items' => 'すべての地域',
    'parent_item' => '親地域',
    'edit_item' => '地域の編集',
    'update_item' => '更新',
    'add_new_item' => '新規地域を追加',
    'new_item_name' => '新しい地域',
  ),
  'public' => true,
  'show_ui' => true,
  'hierarchical' => true,
);
register_taxonomy('area', 'realestate', $args);

2.パラメータの配列の指定方法

前述したように、register_taxonomy関数の3つ目のパラメータには、各種のパラメータを連想配列に入れて渡します。
その連想配列の要素名と、要素ごとの設定の内容は、以下の通りです。

2-1.label

カスタム分類の名前を指定します。
例えば、地域を表すカスタム分類を追加するなら、label要素の値は「地域」にすれば良いでしょう。

2-2.labels

カスタム分類関連の管理画面に表示するラベルを指定します。
管理画面上での位置と、そこに表示するラベルの対応は、連想配列の形で表します。
この連想配列の要素名と、要素ごと設定の内容は、以下の通りです。
「○○」の部分に、カスタム分類の名前を入れます。

要素名設定内容
nameカスタム分類の複数形
singular_nameカスタム分類の単数形
search_itemsカスタム分類一覧ページの検索ボタンのラベル
popular_items「よく使われる○○」のラベル
all_items「すべての○○」のラベル
parent_item「親○○」のラベル
edit_itemカスタム分類の編集ページの左上に表示されるタイトル
add_new_itemカスタム分類の新規作成のボタンに表示されるラベル
choose_from_most_used「よく使われている○○から選択」のラベル(タグ型のカスタム分類のみ)
separate_items_with_commas「○○が複数ある場合はコンマで区切ってください」のラベル(タグ型のカスタム分類のみ)

各設定と、実際の管理画面上での対応は、以下の各画面のようになっています。

カスタム分類一覧のページ

カスタム分類の編集のページ

カスタム投稿のページ

2-3.public

WordPressのCodexのページでは、「このカスタム分類を管理画面に表示するかどうかを指定する」というような記述があります。
ただ、こちらで試した限りでは、管理画面に表示するかどうかは、後述する「show_ui」で決まるようです。

2-4.show_ui

管理画面にカスタム分類の作成や一覧のページを表示する場合は、この値をtrueに設定します。
一方、この値をfalseに設定すると、管理画面上ではこのカスタム分類を操作することができません。
なお、この値の指定を省略した場合、publicに指定した値と同じ設定になります。

2-5.hierarchical

この値をtrueに設定すると、カテゴリーのように、カスタム分類に親子関係を持たせることができます。
一方、この値をfalseにすると、タグのように、親子関係を持たせないようになります。
デフォルト値はfalseです。

2-6.show_tagcloud

Codexによると、タグ型のカスタム分類を登録した場合、この値をfalseに設定すると、カスタム分類の管理画面にタグクラウドを表示しないとあります。
ただ、実際には値をfalseにしても、カスタム分類の管理画面にタグクラウドが表示されました。

2-7.query_var

「'query_var' => true」に設定すると、「http://ブログのアドレス/?カスタム分類名=個々の分類のスラッグ」のアドレスで、そのカスタム分類のアーカイブページを開くことができるようになります。
また、「'query_var' => 文字列」とすると、「http://ブログのアドレス/?文字列=個々の分類のスラッグ」のアドレスで、そのカスタム分類のアーカイブページを開くことができるようになります。

2-8.rewrite

「'rewrite' => true」に設定すると、「http://ブログのアドレス/カスタム分類名/個々の分類のスラッグ」のアドレスで、そのカスタム分類のアーカイブページを開くことができるようになります。
また、「'rewrite' => array('slug' => 文字列)」とすると、「http://ブログのアドレス/文字列/個々の分類のスラッグ」のアドレスで、そのカスタム分類のアーカイブページを開くことができるようになります。
ただし、rewriteを動作させるには、カスタム分類を登録した後で、flush_rewrite_rules関数を実行する必要があるようです。

2-9.capabilities

カスタム分類を操作できるユーザーの権限を指定します。

3.カスタム投稿タイプ/カスタム分類関係の記事の一覧

カスタム投稿タイプ/カスタム分類関係のその他の記事は、以下のリンクから参照できます。

WordPressで学ぶPHPとMySQLWordPressで学ぶPHPとMySQL」発売中です。
WordPressを通して、PHPとMySQLの基本をマスターするための本(PDF)です。
詳細は特設ページにて。

Facebook連携

当記事について「いいね」や「送信」を行っていただけると幸いです。


この記事についてウォールに投稿

トラックバック(0)

トラックバックURL: http://www.h-fj.com/mt/mt-tb.cgi/2234.

コメント(スレッド3件,コメント8件)

コメントはスレッド表示になっています。
また、スレッドの先頭のコメントに対する返信には、先頭に矢印を表示しています。

No.1 li4ch : デフォルトの投稿について

いつも楽しく拝見させてもらってます。

デフォルトの投稿、ページやメディアなどもregister_post_typeでラベルを変えたり、register_taxonomyでタクソノミーを追加したりするような感じで、カスタマイズする方法はありますでしょうか?

プラグインではなく、functions.phpで実現させたいです。

よろしければ、ヒントを頂けたらうれしいです。

No.2  : デフォルトの投稿について

>li4chさん
こんにちは。

ちょっと調べてみた限りでは、残念ながらラベルの変更は一筋縄ではいかないようでした。
なお、デフォルトの投稿やページでも、register_taxonomy関数でカスタム分類を追加することは可能です。

No.3 li4ch : デフォルトの投稿について

さっそくのお答えありがとうございます。

プラグインでもラベルを変えたり、menu_positionを変えたりというのはなさそうなので、むずかしいのかなとは思っていたのですが、残念です。

でも、通常の投稿でもタクソノミーは追加することができました!!
ありがとうございます。


No.4 ココ : テーマの編集

デフォルトのテーマだとできるのですが
別のテーマだと反映しないのですが
どうすればいいのでしょうか?

初心者の質問でスイマセン

No.5  : Re:テーマの編集

>ココさん
こんにちは。

お使いのテーマを見てみないと何とも言えませんが、おそらくregister_taxonomy関数が動作していない状態だと思います。

No.6 ココ : (無題)

掲示板汚してスイマセン
functions.phpはこのような状態です。

<?php
if ( function_exists('register_sidebar') )
    register_sidebar(array('name'=>'Sidebar %d',
        'before_widget' => '<div id="%1$s" class="narrow widget %2$s">',
        'after_widget' => '</div>',
        'before_title' => '<p class="title"><em>',
        'after_title' => '</em></p>',
    ));
function list_comments($comment, $args, $depth) {
	$GLOBALS['comment'] = $comment;  
 
    <li <?php comment_class(); ?> id="comment-<?php comment_ID(); ?>"><div id="div-comment-<?php comment_ID(); ?>">	
		<div class="commenttext">
			<?php if ($comment->comment_approved == '0') : ?>
			<em>承認待ちのコメントです。</em>
			<?php endif; ?>
			<?php comment_text() ?>
			<p class="reply"><?php comment_reply_link(array_merge( $args, array('add_below' => 'div-comment', 'depth' => $depth, 'max_depth' => $args['max_depth']))) ?></p>
		</div>
		<p class="commenter"><cite><span class="comment-avatar"><?php echo get_avatar($comment, $size = '36'); ?></span><?php comment_type(__('コメント'), __('トラックバック'), __('ピンバック')); ?> <?php comment_author_link() ?>
		<br /><a href="#comment-<?php comment_ID() ?>" title="コメント"><?php comment_date() ?> <?php comment_time() ?></a></cite> <?php edit_comment_link(__("編集"), ' | '); ?></p>
	</div><?php // </li> は必要ありません。 ?>
<?php } // list_comments() 終了  ?>
No.7  : (無題)

>ココさん
こんにちは。

先頭の「<?php」の行と、その次の「if (function_exists・・・) }」の行の間に、register_taxonomy関数の行を入れれば良いはずです。

No.8 ココ : ありがとうございます

動作確認できました。
ありがとうございます

コメントする


Facebookでコメント

試験的にFacebookのコメントフォームを設置しました。