前回の続き
function.php側を商品とそれ以外に分けてみた。
「選択されたカテゴリが商品カテゴリか、その子孫カテゴリだった場合」を判断するには、
「is_category(var)」ではなく、「in_category(var)」を使うのが正解らしい。
「is_category(var)」だと、現在表示しているカテゴリがvarに一致するかどうかと言う意味になってしまう。
なんで、function.phpの実装は結果的にこうなった。
[code lang=’php’ line=’1′]
//カテゴリページの制御
add_action(‘template_redirect’, ‘template_redirect_item_category’);
function template_redirect_item_category() {
if( in_category(‘item’) && is_category() ) {
// 商品カテゴリ以下だった場合、item_category.phpを使用する
include(get_stylesheet_directory() . ‘/item_category.php’);
exit;
}
}
[/code]
次にitem_category.php。
通常のループで表示してしまうと制御が面倒なので、
固定ページの表示だろうと、カテゴリ表示だろうと、「query_posts(var)」を使用することにし、
条件分岐で、パラメータ[category_name]のみを制御することにする。
(通常ループは固定ページ表示時は固定ページの記事として使用したいため)
通常の固定ページ表示の場合は、カスタムフィールド[category_slug]の値、
カテゴリページとして表示する場合は、表示中のカテゴリ名の値を渡すので、こんな感じになる。
[code lang=’php’ line=’1′]
ID); ?>
・・・中略・・・
[/code]
これで無事に、商品アーカイブとブログ記事のアーカイブで表示を切り分ける事ができた。
・・・と思ったら、商品アーカイブだとタイトル出とらんやんけ。
ま、ここまで来たらあとちょぃかな。
コメント
よくよく考えたら、ここでquery_postsを使うのは邪道なんかな。
new WP_Query()に変更しておこう。