WordPressでカスタム投稿タイプを使えるようにfunctions.php をカスタマイズする方法

  • 21539
    views
  • このエントリーをはてなブックマークに追加
  • follow us in feedly

通常、WordPressはインストールしたばかりだと、記事を投稿できるメニューは「投稿」や「固定ページ」しかありませんが、今回紹介させていただくようなfunctions.php をゴニョゴニョする方法、またはプラグインにより「カスタム投稿タイプ」という独立した更新コンテンツを利用できるようになります。

そもそも「カスタム投稿タイプって、何のために使うの?」という点についても、さらっとではありますが今回は解説を交えながら、functions.php をカスタマイズする方法を紹介させていただきます。

(1)「カスタム投稿タイプ」を使う理由

例えば企業サイトを作る際に
「よくある質問の質問と回答文を更新したい」
「製品情報をカテゴリ毎に分けて管理したい」
「事例を画像付きで更新したい」
「お客様の声を掲載したい」
「スタッフブログを掲載したい」
などの要望は受けることは多いのではないでしょうか。

さて、これらの更新コンテンツをどのようにWordPressを使って実現するか?と考えた時、通常の「投稿」メニューでカテゴリ別に管理すればできないこともありませんが、クライアントから見たらどうでしょう…。製品情報とよくある質問の記事がごちゃ混ぜになって、更新管理しづらいのではないでしょうか。

カスタム投稿タイプには「タクソノミー」という、投稿メニューの「カテゴリ」や「タグ」に当たる機能も使えますので、投稿メニューで記事を更新するのと同じ感覚でコンテンツを管理することができます。

また、カスタム投稿タイプは自由に増減できますので、「よくある質問」「製品一覧」「お客様の声」「自社ニュース」「スタッフブログ」…などなど、コンテンツ毎にカスタム投稿タイプを用意してあげればクライアント側にとっても管理しやすく、制作者側としても更新コンテンツが増える際の増築作業をスムーズに行うことができます。


functions.php でカスタム投稿タイプを使えるように下準備

WordPress でカスタム投稿タイプを使えるようにするには2 つの方法があります。

1 つは Types のようなプラグインを利用する方法。もう1つが、今回紹介させていただくfunctions.php をカスタマイズする方法です。

ソースコードは長いですが、functions.php に以下のような記述を付け足すだけで、管理画面に「カスタム投稿タイプ」という名称のメニューが出現します。

※name で指定している「カスタム投稿タイプ」、及び、post_type で指定している「sample」、タクソノミーの「sample-cat」「sample-tag」の名前は、ご利用の環境に応じて変更願います。
<?php
//カスタム投稿タイプ
add_action('init', 'my_custom_init');
function my_custom_init()
{
  $labels = array(
    'name' => _x('カスタム投稿タイプ', 'post type general name'),
    'singular_name' => _x('カスタム投稿タイプ', 'post type singular name'),
    'add_new' => _x('新規投稿','sample'),
    'add_new_item' => __('記事を書く'),
    'edit_item' => __('記事を編集'),
    'new_item' => __('新しい記事'),
    'view_item' => __('記事を見る'),
    'search_items' => __('記事を探す'),
    'not_found' =>  __('記事はありません'),
    'not_found_in_trash' => __('ゴミ箱に記事はありません'),
    'parent_item_colon' => ''
  );
  $args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'show_ui' => true,
    'query_var' => true,
    'rewrite' => true,
    'capability_type' => 'post',
    'hierarchical' => false,
    'menu_position' => 5,
    'supports' => array('title','editor','thumbnail','custom-fields','excerpt','author','trackbacks','comments','revisions','page-attributes'),
    'has_archive' => true
  );
  register_post_type('sample',$args);
  
//カスタムタクソノミー(カテゴリ)
  register_taxonomy(
    'sample-cat',
    'sample',
    array(
      'hierarchical' => true,
      'update_count_callback' => '_update_post_term_count',
      'label' => 'カスタム投稿タイプのカテゴリー',
      'singular_label' => 'カスタム投稿タイプのカテゴリー',
      'public' => true,
      'show_ui' => true
    )
  );
 
//カスタムタクソノミー(タグ)
  register_taxonomy(
    'sample-tag',
    'sample',
    array(
      'hierarchical' => false,
      'update_count_callback' => '_update_post_term_count',
      'label' => 'カスタム投稿タイプのタグ',
      'singular_label' => 'カスタム投稿タイプのタグ',
      'public' => true,
      'show_ui' => true
    )
  );
  
}
?>

実際の表示イメージはこんな感じになります。
WordPressでカスタム投稿タイプを使えるようにfunctions.php をカスタマイズする方法



(2)カスタム投稿タイプの記事をRSS配信する

(1)の設定によりカスタム投稿タイプの記事は更新できるようになりますが、通常の投稿記事のようなRSS配信はできません。

カスタム投稿タイプの記事をRSS 配信したい場合は、functions.phpで(1)の記述の後に以下のコードを付け足してあげます。
<?php
add_filter( 'pre_get_posts', 'my_custom_posts_rss' );
function my_custom_posts_rss( $query ) {
if ( is_feed() )
	$query->set( 'post_type', array(
		'ポストタイプA',
		'ポストタイプB'
		 )
	);
return $query;
}
?>


(3)カスタム投稿タイプの投稿記事数を、ダッシュボードに表示させる

管理画面のダッシュボードでは「投稿」「固定ページ」「カテゴリー」「タグ」のそれぞれの投稿記事数が表示されますが、カスタム投稿タイプの投稿記事件数は表示されません。

カスタム投稿タイプの投稿記事数をダッシュボードに表示させる場合は functions.php へ以下のコードを記述します。
<?php
function custom_post_dashboard() {
 
	$dashboard_custom_post_types= Array(
		'ポストタイプA',
		'ポストタイプB'
	);
 
	foreach($dashboard_custom_post_types as $custom_post_type) {
		global $wp_post_types;
		$num_post_type = wp_count_posts($custom_post_type);
		$num = number_format_i18n($num_post_type->publish);
		$text = _n( $wp_post_types[$custom_post_type]->labels->singular_name, $wp_post_types[$custom_post_type]->labels->name, $num_post_type->publish );
		$capability = $wp_post_types[$custom_post_type]->cap->edit_posts;
 
		if (current_user_can($capability)) {
			$num = "<a href='edit.php?post_type=" . $custom_post_type . "'>$num</a>";
			$text = "<a href='edit.php?post_type=" . $custom_post_type . "'>$text</a>";
		}
 
		echo '<tr>';
		echo '<td class="first b b_' . $custom_post_type . '">' . $num . '</td>';
		echo '<td class="t ' . $custom_post_type . '">' . $text . '</td>';
		echo '</tr>';
	}
}
add_action('right_now_content_table_end', 'custom_post_dashboard');
?>


Types のようなプラグインを利用すれば、管理画面だけでカスタム投稿タイプを管理できます。

カスタム投稿タイプが1 つしかないのであれば、今回のような functions.php をゴニョって手動で設定する方が楽かもしれませんが、「カスタム投稿タイプを利用した更新コンテンツが多数あって、今後もどんどん増えていく」なんて場合はTypes のようなプラグインによる管理が楽だと思います。

この辺りはサイトの運用状況次第ですね。

  • 21539
    views
  • このエントリーをはてなブックマークに追加
  • follow us in feedly

この投稿と関連する記事一覧

この記事に関するコメント

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください