カスタム投稿タイプとカスタムタクソノミーの追加・・WordPress


カスタム投稿タイプとカスタム分類とは・・
カスタム投稿タイプ(Custom Post Types)・・「投稿」のようなメニュー項目を追加する事
カスタム分類(Custom Taxonomies)・・「カテゴリ」「タグ」のような分類の事

例えば、“販売店”(store) という「カスタム投稿タイプ」を作成して
「カスタム分類」で “エリア”(area) “取扱商品”(product) を追加してみましょう

今回は、プラグインを使わずにfunctions.php(テーマファイル)にコードを追加します。
※プラグインの場合は「Custom Post Type UI」がおすすめです。

functions.php

/* カスタム投稿タイプの追加 */
add_action( 'init', 'create_post_type' );
function create_post_type() {
  register_post_type( 'store', /* 投稿タイプ名  */
    array(
      'labels' => array(
        'name' => __( '販売店' ), /* 管理画面の表示名 */
        'singular_name' => __( '販売店' )
      ),
      'public' => true,
      'menu_position' => 5,
      'has_archive' => true,  /* アーカイブ生成  */
      /* 投稿画面の表示項目 */
      'supports' => array('title','editor','thumbnail','custom-fields','excerpt','author','page-attributes')
    )
  );

  /* カスタム分類を作成 - エリアの追加 */
  register_taxonomy(
    'area', /* タクソノミー名 */
    'store', /* 投稿タイプ名'  */
    array(
      'hierarchical' => true, /* 階層化あり */
      'update_count_callback' => '_update_post_term_count',
      'label' => 'エリア',
      'singular_label' => 'エリア',
      'public' => true,
      'show_ui' => true, /* 項目の表示 */
      'query_var' => true 
    )
  );

  /*カスタム分類を作成 - 取扱商品の追加 */
  register_taxonomy(
    'product', /* タクソノミー名 */
    'store',
    array(
      'hierarchical' => false, /* 階層化なし */
      'update_count_callback' => '_update_post_term_count',
      'label' => '取扱商品',
      'public' => true,
      'show_ui' => true,
      'query_var' => true
    )
  );

}
カスタム投稿タイプでコメントを受け付ける場合・・
上記コード内のパラメータ 引数 ’supports‘ に以下のように追加。
(コメント→ ’comments‘ 、トラックバック→ ’trackbacks‘ )
参考:関数リファレンスregister_post_type

カスタム投稿タイプ作成後の画面

下の赤枠部分が新規に作成されました。※「販売店」という投稿に「エリア」「取扱商品」の分類

カスタム分類「エリア」の画面・・・”カテゴリー”のように階層化あり

カスタム分類「取扱商品」の画面・・・”タグ”のように階層化なし

カスタム投稿タイプの投稿一覧にタクソノミーを表示する

functions.php(テーマファイル)に以下コードを追加

/* カスタム投稿タイプの投稿一覧にタクソノミーを表示 */
function manage_posts_columns($columns) {
    $columns['area'] = 'エリア';
    $columns['product'] = '取扱商品';
    return $columns;
}
function add_column($column_name, $post_id) {
    /* エリアのターム一覧 */
    if( $column_name == 'area' ) {
        echo get_the_term_list($id, 'area');
    }
    /* 取扱商品のターム一覧 */
    if( $column_name == 'product' ) {
        echo get_the_term_list($id, 'product');
    }
}
add_filter( 'manage_store_posts_columns', 'manage_posts_columns' ); /* 一覧 */
add_action( 'manage_posts_custom_column', 'add_column', 10, 2 ); /* 中身 */

ダッシュボードに投稿数を表示

カスタム投稿タイプの投稿数はfunctions.php(テーマファイル)に以下コードを追加

/* カスタム投稿タイプの投稿数をダッシュボードに表示 */
function custom_post_dashboard() {
    $custom_post_type = 'store'; // カスタム投稿のラベル
    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');

カスタム分類のダッシュボードの表示にはプラグイン「PS Taxonomy Expander」を使用してみました。
以下のようにタクソノミーについていろいろな設定ができて便利です。

参考サイト

次回はカスタム投稿タイプとカスタムタクソノミーの表示についての予定です・・。

関連記事

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*