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

前回の続き

function.php側を商品とそれ以外に分けてみた。
「選択されたカテゴリが商品カテゴリか、その子孫カテゴリだった場合」を判断するには、
「is_category(var)」ではなく、「in_category(var)」を使うのが正解らしい。
「is_category(var)」だと、現在表示しているカテゴリがvarに一致するかどうかと言う意味になってしまう。

参考:WordPressCodex 条件分岐タグ

なんで、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]

これで無事に、商品アーカイブとブログ記事のアーカイブで表示を切り分ける事ができた。
・・・と思ったら、商品アーカイブだとタイトル出とらんやんけ。
ま、ここまで来たらあとちょぃかな。

コメント

  1. doop doop より:

    よくよく考えたら、ここでquery_postsを使うのは邪道なんかな。
    new WP_Query()に変更しておこう。

タイトルとURLをコピーしました