シングルやアーカイブで現在属するカテゴリーを取得する方法(WordPress)

シングルページやアーカイブページで現在属するカテゴリーのオブジェクトを取得する方法。

現在のカテゴリーIDなどを取得したくても何故かget_the_category()関数で得られる値は違う値。何故なんだぁ~!!

と調べていくとどうも途中でグローバル変数である$postが書き換えられるとget_the_category()関数は誤動作する模様

なのでカテゴリーに限らず情報の取得はwp_head()の中かfunction.phpで実行。もしくはプラグイン化してコンストラクタで取得しちゃうのが吉。

一つのカテゴリだけ取得するコード

得られたカテゴリを一つだけ取得するコードです。

function.phpに以下のコードを記述します。

//wp_head()実行時にget_current_category()を実行
add_action('wp_head', 'get_current_category');

// 現在のカテゴリを取得
function get_current_category()
{
	global $_curcat;
	$cate = null;
	if( is_category() ) {
		//カテゴリー表示だったら
		$now_cate = get_query_var('cat');
		$cate = get_category($now_cate);
	} else if (is_single() ) {
		//シングルページ表示だったら
		$cates = get_the_category();
		$i = 0;
		$use_category = 0;
		foreach ($cates as $cate) {
			//未分類を除外した配列の一番初めのカテゴリを選択
			if($cate->category_parent > 0 && $use_category == 0) {
				$use_category = $i;
			}
			$i++;
		}
		$cate = $cates[$use_category];
	}
	//カテゴリーのオブジェクトごと保持
	$_curcat = $cate;
	return $cate;
}

各テンプレートでglobal $_curcat;を宣言し$cate->cat_IDで現在のカテゴリーIDを取得することが出来ます。

属する全てのカテゴリを取得するコード

function.phpに以下のコードを記述します。

//wp_head()実行時にget_current_categories()を実行
add_action('wp_head', 'get_current_categories');

// 現在のカテゴリを取得
function get_current_categories()
{
	global $_curcats;
	$cates = null;
	if( is_category() ) {
		//カテゴリー表示だったら
		$now_cate = get_query_var('cat');
		$cates[] = get_category($now_cate);
	} else if (is_single() ) {
		//シングルページ表示だったら
		$cates = get_the_category();
	}
	//カテゴリーのオブジェクトごと保持
	$_curcats = $cates;
	return $cates;
}

各テンプレートでglobal $_curcats;を宣言しループ処理して使用することが出来ます。

得られたオブジェクトをprint_r()で出力した結果

stdClass Object
(
    [term_id] => 12
    [name] => プラグイン
    [slug] => plugin
    [term_group] => 0
    [term_taxonomy_id] => 13
    [taxonomy] => category
    [description] =>
    [parent] => 9
    [count] => 6
    [object_id] => 558
    [cat_ID] => 12
    [category_count] => 6
    [category_description] =>
    [cat_name] => プラグイン
    [category_nicename] => plugin
    [category_parent] => 9
)

おまけに

get_the_category()関数は記事のIDを引数に与えることでカテゴリオブジェクトを取得できます。なので$postを書き換えられても良いように初めに保持し引数として与えても良いです。

最後に

なんとなくFAQっぽいんで書いてみた。

動作はこのサイトで確認を。。。自分はプラグイン化して使用しています。気が向いたら、このサイトのカテゴリ表示に使用しているプラグインを公開するかも?ウィジェット化は面倒なので勘弁してくらはい(汗

情報取得関数実行をいつもwp_head()内に統一しているが、拘らなくても良いかも。。。普通に関数を実行した方が速度的に良いのかもしれない。

ページトップ

ブックマーク!


3件のトラックバック

  1. 月別アーカイブをカテゴリ毎に表示させる | setting_web
    トラックバック日時 2009 年 7 月 22 日 at 5:12 PM

    [...]  http://soft.fpso.jp/develop/wordpress/customize/entry_2150.html [...]

  2. 橋本雄の技術ブログ » シングルやアーカイブで現在属するカテゴリーを取得する方法(WordPress) | とりさんのソフト屋さん
    トラックバック日時 2009 年 7 月 30 日 at 12:24 AM

    [...] シングルやアーカイブで現在属するカテゴリーを取得する方法(WordPress) | とりさんのソフト屋さん [...]

  3. カテゴリの情報がうまくとれない « WEB制作 – tinyboat.net
    トラックバック日時 2009 年 12 月 10 日 at 9:19 PM

コメント投稿

* は必須項目です。入力したメールアドレスは公開されません。

*
*



AccessやExcel、.NETソフトウェア開発、WordPress等を使用したWebのシステム化、PCサポート、コンサルなどを行っています。全国対応可能です。お問い合わせください。
TEL (0776)56-8539