JOURNAL クリエイティブとマーケティングの話

WordPressのループ外でカスタム投稿タイプ名を出力する方法

WordPressのループ外でカスタム投稿タイプ名を表示する方法のメモです。

わざわざループ外でと書いていますが、別にループ内でも使えます。

カスタム投稿タイプ名を表示するのはアーカイブページのタイトルなど(=ループ外)の場合が多いかと思うので、一応そういう意味です。

自分で考えたみたいに書いちゃってますが、参考ページのソースを使わせて頂きました。

WordPressのループ外でカスタム投稿タイプ名を出力する

PHP
<?php
	$q = $wp_query->query_vars;
	$postTypeNameObj = $q["post_type"];
	$postTypeName = get_post_type_object($postTypeNameObj)->labels->name;
	echo $postTypeName
?>

カスタム投稿タイプの概要文を出力する

カスタム投稿タイプ名だけでなく、カスタム投稿タイプを有効化したときにfunctions.phpで設定した概要文(description)を出力することもできます。

PHP
<?php
	$q = $wp_query->query_vars;
	$postTypeNameObj = $q["post_type"];
	$postTypeName = get_post_type_object($postTypeNameObj)->description;
	echo $postTypeName
?>

カスタム投稿タイプを有効化する

ついでですが、カスタム投稿タイプを有効化するソースも書いておきます。

WordPressテーマのfunctions.phpに下記のように記述してください。

この例では「お客様の声」というカスタム投稿タイプ(スラッグはvoice)を有効化しています。

functions.php
/* カスタム投稿タイプ(お客様の声)
---------------------------------------------------------- */
add_action('init', 'custom_post_voice');
function custom_post_voice() {
  $labels = array(
    'name'               => _x('お客様の声', 'post type general name'),
    'singular_name'      => _x('お客様の声', 'post type singular name'),
    'add_new'            => _x('新規追加', 'voice'),
    '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'       => 6,
    'supports'            => array('title','editor','thumbnail','revisions'),
    'has_archive'         => true,
    'exclude_from_search' => false
  );
  register_post_type('voice',$args);
}