商品カテゴリ選択時に、商品カテゴリ専用のテンプレートを表示する

これ、結構以前からの課題だった。
WelCartでは商品カテゴリを表示するための専用テンプレート「item_category.php」がある。
しかし、これは固定ページを作成し、そのテンプレートとして選択する必要がある。
ところが、商品ページのカテゴリや、パンくずリストで表示されているカテゴリをユーザがクリックすると、
通常のアーカイブ用テンプレート「archive.php」が表示される。
これでは、せっかくのカテゴリ表示や、パンくずリストの効果が半減してしまう。

そこで、カテゴリページを表示する際にフックして、
「item_category.php」を表示するように小細工してみた。
実際には、function.phpに以下のように記述。

add_action('template_redirect', 'template_redirect_item_category');
function template_redirect_item_category() {
	if( is_category() ) {
		include(get_stylesheet_directory() . '/item_category.php');
		exit;
	}
}

実際には、選択されたカテゴリが商品カテゴリか否かの判定をしなければいけないんだけど、
今回は実験的な実装だったので、ここまで。
ところがこれを実装すると、通常のアーカイブを表示した後、その下に
item_category.phpの内容が表示されてしまうといった現象が起こった。
これの解明に手間取ってしまったが、何の事は無い。
item_category.phpはちゃんと表示されているのだが、その中の記事のループで
archive.phpを表示するための情報が出力されてしまっていただけのことだった。
なので、item_category.php側でも、同様にカテゴリ表示だったら、
記事のループを行わないように修正してあげる必要があった。
こんな感じ。

<?php if (!is_category()) : while (have_posts()) : the_post(); ?>
	<article id="post-<?php the_ID(); ?>" <?php post_class('clearfix'); ?> role="article">
	<?php the_content(); ?>
<?php endwhile; endif; ?>

function.php側の制御がまだ不完全だけど、とりあえずこの方針で何とかなるでしょ。
明日は早起きだから、今日はここまで。


この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

この投稿へのトラックバック

  1. […] 商品カテゴリ選択時に、商品カテゴリ専用のテンプレートを表示する […]

トラックバック URL