【WordPress】カスタム投稿でよく使うタグ

WordPressでカスタム投稿の時に表示するタグをよく忘れるので、自分への備忘録も兼ねてご紹介します。

投稿タイプの追加

前提として、functions.phpに以下の記述をして投稿タイプ(カスタム投稿)を追加した場合を想定しています。

// 投稿タイプを追加
add_action('init', 'sample_custom_post_type');
function sample_custom_post_type() {
  $labels = array(
    'name'                => 'サンプル',
    'singular_name'       => 'サンプル',
    'add_new_item'        => '新しいサンプルを追加',
    'add_new'             => '新規追加',
    'new_item'            => '新しいサンプル',
    'view_item'           => 'サンプルを表示',
    'not_found'           => 'サンプルはありません',
    'not_found_in_trash'  => 'ゴミ箱にサンプルはありません。',
    'search_items'        => 'サンプルを検索',
  );
  $args = array(
    'labels'              => $labels,
    'public'              => true,
    'publicly_queryable'  => true,
    'show_ui'             => true,
    'query_var'           => true,
    'rewrite' => array('slug' => 'sample', 'with_front' => false),
    'hierarchical'        => false,
    'menu_position'       => 4,
    'has_archive'         => true,
    'yarpp_support'       => true,
    'capability_type'     => 'post',
    'supports' => array(
      'title',
      'editor',
      'thumbnail',
      'excerpt',
      'custom-fields'
      )
  );
  register_post_type('sample', $args);

  register_taxonomy(
    'sample-cat',
    array('sample'),
    array(
      'hierarchical' => true,
      'update_count_callback' => '_update_post_term_count',
      'label' => 'カテゴリー',
      'singular_label' => 'カテゴリー',
      'public' => true,
      'show_ui' => true,
      )
    );
}

カスタムタクソノミーを出力

get_the_term_list();を使って表示

echo get_the_term_list( $id, $taxonomy, $before, $sep, $after );

「$id」は投稿のIDを指定します。
「$taxonomy」はカスタムタクソノミー名を記述します。
「$before」は指定した文字列が、カスタムタクソノミーの前に表示されます。
「$sep」複数のカスタムタクソノミーがあった場合、区切り文字として表示されます。
「$after」は指定した文字列が、カスタムタクソノミーの後に表示されます。

今回の設定したカスタムタクソノミーを簡単に表示する場合は、以下を出力するテンプレートに記述します。

echo get_the_term_list( $post->ID, 'sample-cat');

get_the_terms();を使って表示

「get_the_terms」を使って、投稿のカスタムタクソノミーの情報を取得します。

get_the_terms( $id, $taxonomy );

表示する時は、「$terms」の中を「foreach」を利用して出力させます。

if ($terms = get_the_terms($post->ID, 'sample-cat')) {
	foreach ( $terms as $term ) {
		echo $term->name;
	}
}