任意のカテゴリーの子カテゴリーをウィジェットに表示する。【WordPress備忘録】

カテゴリーの中の子カテゴリーを取得して子カテゴリー一覧をウィジェットに表示する方法。

忘れそうなので備忘録として。

 

準備するプラグイン

並び替えするプラグイン Category Order and Taxonomy Terms Order

※任意に並び替えしたい場合のみ。もし名前や記事数で並び替え程度なら必要なし。

 

投稿→Taxonomy Order というメニューが出来るので、そこでドラッグ&ドロップで並び替えする。

 

function.phpに関数追加

テーマ(子テーマがあれば子テーマ)のfunction.phpに以下を追加する。

add_filter('widget_text', 'do_shortcode' );

//子カテゴリを表示する
function SetPaperLabelcategory ($atts){

		extract(shortcode_atts(array(
				'postid' => '',
				'title' => '',
		), $atts));

//子カテゴリのタームを取得
$children = get_terms('category', array(
    'orderby'    => 'term_order',
    'hide_empty' => 0,
    'child_of' => $postid,
 ) );

$output = "<h3 class='widget_title sidebar_widget_title'>" . $title . "</h3><ul>";

foreach ( $children as $child ) {
	$term = get_term_by( 'id', $child->term_id, 'category' );
	$output .= '<li><a href="' . get_term_link( $child, 'category' ) . '" title="' . $taxonomy_name . '" ' . '>' . $term->name . '(' .$term->count . ')' .'</a></li>';
}

$output .= "</ul>";

return $output;

}

add_shortcode('PaperLabelcategory', 'SetPaperLabelcategory');

 

add_filterは、ウィジェットにショートコードを読み込めるようにするコード。ショートコードがウィジェットで動く場合は不要。

orderby の指定は、term_orderとしているのは、プラグインの指定。

ここに書いてあるとおりにしただけ。通常は、name や count などを指定する。

 

ウィジェットにショートコードを挿入

[PaperLabelcategory title=’タイトルで探す’ postid=’000′]

[PaperLabelcategory title=’価格で探す’ postid=’000′]

 

postidは、カテゴリー画面のURLで親カテゴリーのIDを調べる。

 

 

以上。

こうすると、子カテゴリーに追加したときでもカテゴリーにわざわざ追加することもない。

コメント