ECサイトにも本格的なブログページを

2010 年 11 月 15 日

Welcart で作ったショップ(ECサイト)にブログ専用ページを作ることは簡単です。商品以外を扱うテンプレートを1つ作って固定ページに適用させるか、カテゴリーテンプレートを作って商品以外を分岐させるなど方法はいくつか有ります。Welcart のテンプレートはコメント機能を省いていますので、ブログ用のテンプレートを作る場合はコメントに関するテンプレートタグを設置すると良いでしょう。

さて、この様なブログページを作ったことのある方はなんだか物足りない感じがしなかったでしょうか。それはブログ記事が多くなればなるほど感じるストレス。そうなんですブログ専用のナビゲーションが無いと言うことです。

WordPress には「カレンダー」や「カテゴリーリスト」、「最近の投稿」など標準で便利なウィジェットが搭載されていますので、それら専用のサイドバーテンプレート(モジュール)を1つ作って、ブログ専用ページを表示する際はサイドバーを入れ替えると言った工夫をするとユーザビリティーを高める事ができます。

サイドバーを入れ替えるテクニックはまた別の機会にお話しするとして、今回お話したいのは、これらの便利なデフォルトウィジェットが商品をも同じようにブログ記事として扱ってしまう問題を回避する方法です。

さて、本題です。

WordPress デフォルト・ウィジェットに商品を適用させない方法

WordPress デフォルト・ウィジェットが出力する内容から商品を除外するにはフィルターを利用します。
フィルターフックの利用方法は「Welcart のカスタマイズとフック」をご覧ください。
各フィルターは次の通りです。

カテゴリー

カテゴリーページへ飛ぶためのリンクを表示するためのウィジェットです。商品を除外してリンクを生成させるためのフィルターはこのようになります。

add_filter('widget_categories_dropdown_args', 'welcart_categories_dropdown_args');
function welcart_categories_dropdown_args( $args ){
	global $usces;
	$ids = $usces->get_item_cat_ids();
	$ids[] = USCES_ITEM_CAT_PARENT_ID;
	$args['exclude'] = $ids;
	return $args;
}


アーカイブ

投稿の月別ページへ飛ぶためのリンクを表示するためのウィジェットです。商品を除外してリンクを生成させるためのフィルターはこのようになります。

adadd_filter('getarchives_where', 'welcart_getarchives_where');
function welcart_getarchives_where( $r ){
	$where = "WHERE post_type = 'post' AND post_status = 'publish' AND post_mime_type <> 'item' ";
	return $where;
}


タグクラウド

最もよく使われるタグをタグクラウド形式で表示するためのウィジェットです。商品を除外してリンクを生成させるためのフィルターはこのようになります。

add_filter('widget_tag_cloud_args', 'welcart_tag_cloud_args');
function welcart_tag_cloud_args( $args ){
	global $usces;
	if( 'category' == $args['taxonomy']){
		$ids = $usces->get_item_cat_ids();
		$ids[] = USCES_ITEM_CAT_PARENT_ID;
		$args['exclude'] = $ids;
	}else if( 'post_tag' == $args['taxonomy']){
		$ids = $usces->get_item_post_ids();
		$tobs = wp_get_object_terms($ids, 'post_tag');
		foreach( $tobs as $ob ){
			$tids[] = $ob->term_id;
		}
		$args['exclude'] = $tids;
	}
	return $args;
}


カレンダー

投稿のカレンダーを表示するためのウィジェットです。このウィジェットに対するフックがありませんでしたので、専用のカレンダーを新たにWelcart に乗せました。フィルターと同じくテーマのfunctions.php に下記のコードを追加することで、「Welcart Blog Calendar」というウィジェットが利用できるようになります。

require_once(USCES_PLUGIN_DIR."/widgets/usces_blog_calendar.php");
add_action('widgets_init', create_function('', 'return register_widget("Welcart_Blog_Calendar");'));


最近の投稿

このウィジェットもカレンダーと同じく、専用のウィジェットを新たにWelcart に乗せました。フィルターと同じくテーマのfunctions.php に下記のコードを追加することで、「Welcart Recent Posts」というウィジェットが利用できるようになります。

require_once(USCES_PLUGIN_DIR."/widgets/usces_recent_posts.php");
add_action('widgets_init', create_function('', 'return register_widget("Welcart_Recent_Posts");'));




これらのコードは、v0.8 のWelcart にバンドルされているデフォルトテーマには既に追加されています。
現在ご利用のテーマには手動で入力する必要が有りますので、上記のウィジェットを利用する場合はこの様に適用させてください。


関連記事