サポート » 使い方全般 » 投稿記事の詳細ページのデザインを各カテゴリごとに分類する方法

  • wordpress初心者でしてお恥ずかしながら、こちらでお聞きしたく投稿させて頂きます。
    早速ですがただ今製作中のwebサイトで、ブログ形式の物が3コンテンツ必要で、
    wordpressの管理画面の投稿を使用し下記の様に分類しております。

    ・カテゴリAをブログAとして→ブログAテンプレート作成(カテゴリAのみを掲出)
    ・カテゴリBをブログBとして→ブログBテンプレート作成(カテゴリBのみを掲出)
    ・カテゴリCをブログCとして→ブログCテンプレート作成(カテゴリCのみを掲出)

    にしており、投稿画面からカテゴリを指定してそれぞれA,B,Cの
    ブログに掲出させております。

    カテゴリ別の各ブログに行った時に一覧が表示され、
    タイトルをクリックすると記事の詳細ページにいくと思うのですが、
    この詳細ページのデザインもA,B,C共に違う物にしなければなりません。

    この方法がどういうやり方で出来るのかが、検索してもなかなか出てこなく、
    こちらにご質問させて頂きました。

    現状は記事の詳細ページに行くとA,B,C共に同じデザインの表示になってしまっております。

    どのようなやり方があるのか、お分かりになる方ご教授願えませんでしょうか?
    どうぞ宜しくお願い致します。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • こんにちは、

    カテゴリアーカイブで、テンプレート毎の表示ができているのであれば、

    category.php( またはカテゴリアーカイブ用に使っているテンプレート)をコピペして、

    single.phpに、貼り付けてください。

    あとは、微調整してください。

    single.php 内で in_category を使用して条件分岐するのはどうでしょうか。

    <?php if (in_category('1') ): ?>
    (カテゴリーAのIDを 1 と仮定)
    
    【カテゴリーA で出す内容というかデザイン】
    
    <?php elseif (in_category('2') ): ?>
    (カテゴリーBのIDを 2 と仮定)
    
    【カテゴリーB で出す内容というかデザイン】
    
    <?php else: ?>
    (カテゴリーA B以外)
    
    【カテゴリーA B 以外で出す内容というかデザイン】
    
    <?php endif; ?>

    初心者の方はこの方法が分かりやすいかもしれません。

    >nobitaさま
    >taku-kさま

    お早いコメントありがとうございます。
    大変助かっております。
    single.phpに条件分岐して作成しております。
    この感じならそれぞれにデザインを当てられます。
    ありがとうございます。

    ここでまたつまずいてしまったのですが、下記の記述でsingleを書いているのですが、

    <?php if (in_category('1') ): ?>
    <?php get_sidebar(2); ?>
    <div id="blog_container" class="container_12 clearfix">
    <h1>タイトル</h1>
    <?php if (have_posts()) : ?>
        <?php while (have_posts()) : the_post(); ?>
            <div class="post">
            <article <div id="post-<?php the_ID(); ?>" <?php post_class('post'); ?>>
    <h2><a href="<?php the_permalink() ?>"><?php the_title(); /* タイトル */ ?></a></h2>
                <p><?php the_time("Y.m.j") ?></p>
                <div class="clear">
                <?php if(has_post_thumbnail()) { the_post_thumbnail(); } ?>
            <?php the_content(); ?>
            </div>
                </div>
                <div class="tag"><?php the_tags('',', '); ?></div>
        <?php endwhile; ?>
    <?php else : ?>
        <div class="post">
            <h2>記事が見つかりません</h2>
            <p>記事が存在しないときのテキスト</p>
        </div>
    <?php endif; ?>
    <?php get_template_part('pager'); ?>
    
    <?php elseif (in_category('3') ): ?>
    <?php get_sidebar(3); ?>
    <div id="shikadayori_container" class="container_12 clearfix">
    <h1>タイトル</h1>
    <?php if (have_posts()) : ?>
        <?php while (have_posts()) : the_post(); ?>
            <div class="post">
           <article <div id="post-<?php the_ID(); ?>" <?php post_class('post'); ?>>
    <h2><a href="<?php the_permalink() ?>"><?php the_title(); /* タイトル */ ?></a></h2>
                <p><?php the_time("Y.m.j") ?></p>
                <div class="clear">
                <?php if(has_post_thumbnail()) { the_post_thumbnail(); } ?>
                  <?php the_content(); ?>
            </div>
                </div>
        <?php endwhile; ?>
    <?php else : ?>
        <div class="post">
            <h2>記事が見つかりません</h2>
            <p>記事が存在しないときのテキスト</p>
        </div>
    <?php endif; ?>
    <?php get_template_part('pager'); ?>

    こちらtaku-kさまのコメントを参考に書いており、
    カテゴリ1に関してはsingleに行ったときに1つの記事なのに対し、
    なぜかカテゴリ3に行った時は一覧で出てしまいます。
    何度見返してみても、カテゴリ1の部分と記述はほぼ一緒で(class tagの部分はカテゴリ1のみ)なぜ一覧表示されてしまうのかが分かりません。

    上記のコードには載せませんでしたが、同様にもう一つのカテゴリの部分でも
    同様の状況になってしまいます。

    もしお分かりになりましたらご教授願えませんでしょうか?

    宜しくお願い致します。

    すみません、見当違いなこと書いたので消しました。

    あらためて

    カテゴリーによって初めの部分を出し分けているようなので、その部分だけ条件分岐させるとドウでしょうか?

    <?php if (in_category('1') ): ?>
    <?php get_sidebar(2); ?>
    <div id="blog_container" class="container_12 clearfix">
    
    <?php elseif (in_category('3') ): ?>
    <?php get_sidebar(3); ?>
    <div id="shikadayori_container" class="container_12 clearfix">
    
    <?php endif; ?>
    
    <h1>タイトル</h1>
    <?php if (have_posts()) : ?>
        <?php while (have_posts()) : the_post(); ?>
            <div class="post">
            <article <div id="post-<?php the_ID(); ?>" <?php post_class('post'); ?>>
    <h2><a href="<?php the_permalink() ?>"><?php the_title(); /* タイトル */ ?></a></h2>
                <p><?php the_time("Y.m.j") ?></p>
                <div class="clear">
                <?php if(has_post_thumbnail()) { the_post_thumbnail(); } ?>
            <?php the_content(); ?>
            </div>
                </div>
                <div class="tag"><?php the_tags('',', '); ?></div>
        <?php endwhile; ?>
    <?php else : ?>
        <div class="post">
            <h2>記事が見つかりません</h2>
            <p>記事が存在しないときのテキスト</p>
        </div>
    <?php endif; ?>
    <?php get_template_part('pager'); ?>

    taku-kさま

    色々とありがとうございます。
    先ほど消された記述を元にループ部分を削除し作成させて頂いた所、
    記事詳細は1記事のみの表示にはなりましたが、下記の問題が出て参りました。

    カテゴリ1に関して(詳細ページ)
    ・・・文部分が出ない

    カテゴリ2とその他に関して(詳細ページ)
    ・・・それぞれ、記事詳細は1記事になったのですがなぜか
    違う記事に飛んでしまいます。例えば、「今日の記事」の詳細ページが
    「昨日の記事」のように違う記事へ行ってしまいます。。。

    下記がソースになります。

    <?php if (in_category('1') ): ?>
    <?php get_sidebar(2); ?>
    <div id="blog_container" class="container_12 clearfix">
    <h1>タイトル①</h1>
            <div class="post">
            <article <div id="post-<?php the_ID(); ?>" <?php post_class('post'); ?>>
    <h2><a href="<?php the_permalink() ?>"><?php the_title(); /* タイトル */ ?></a></h2>
                <p><?php the_time("Y.m.j") ?></p>
                <div class="clear">
                <?php if(has_post_thumbnail()) { the_post_thumbnail(); } ?>
            <?php the_content(); ?>
            </div>
                </div>
                <div class="tag"><?php the_tags('',', '); ?></div>
    <?php get_template_part('pager'); ?>
    
    <?php elseif (in_category('2') ): ?>
    <?php get_sidebar(3); ?>
    <div id="shikadayori_container" class="container_12 clearfix">
    <h1>タイトル②</h1>
            <div class="post">
           <article <div id="post-<?php the_ID(); ?>" <?php post_class('post'); ?>>
    <h2><a href="<?php the_permalink() ?>"><?php the_title(); /* タイトル */ ?></a></h2>
                <p><?php the_time("Y.m.j") ?></p>
                <div class="clear">
                <?php if(has_post_thumbnail()) { the_post_thumbnail(); } ?>
                  <?php the_content(); ?>
            </div>
                </div>
    <?php get_template_part('pager'); ?>
    <?php else: ?>
    <?php get_sidebar(4); ?>
    <div id="opinion_container" class="container_12 clearfix">
    <h1>タイトル③</h1>
    <div id="opinion_loop">
            <div class="post">
                <h2 class="opinion_title"><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
                <div class="opinion_area">
                <?php if(has_post_thumbnail()) { the_post_thumbnail(); } ?>
               <?php the_content(); ?>
            </div>
    <div id="boder_bt"></div>
     <p class="opinion_time"><?php the_time("Y.m.j") ?></p>
                </div>
    </div>
    <?php get_template_part('pager'); ?>
    <?php endif; ?>

    いろいろと大変申し訳ございません。。

    taku-kさま

    上記の追記になります。

    >カテゴリ2とその他に関して(詳細ページ)
    ・・・それぞれ、記事詳細は1記事になったのですがなぜか
    違う記事に飛んでしまいます。例えば、「今日の記事」の詳細ページが
    「昨日の記事」のように違う記事へ行ってしまいます。。。

    →こちらですが、どうやら最初の投稿に行ってしまうみたいです。。
    (複数ある記事のどこからでも、カテゴリの最初の記事の詳細ページに行きます)

    モデレーター Takuro Hishikawa

    (@hissy)

    途中までがんばられたあとで恐縮ですが、過去に作ったことがあるので共有しておきます。下記をプラグインとして有効化していただくか、テーマのfunctions.phpに追加していただければ、通常は投稿で single.php しか使えないですが、single-{category_slug}.php という形式のテンプレートが認識されるようになります。存在しない場合はsingle.phpが使われます。
    (例:カテゴリースラッグが movies の場合、single-movies.php)

    <?php
    /*
    Plugin Name: カテゴリーごとにsingle.phpを分岐したい
    */
    
    add_filter('template_include', function($template)
    {
    	if ( is_single() ) {
    		$templates = array();
    
    		if ( ! empty( $object->post_type ) ) {
    			$templates[] = "single-{$object->post_type}.php";
    		}
    
    		$post = get_queried_object();
    		$categories = get_the_category( $post->ID );
    		if ($categories) {
    			$cat_slug = $categories[0]->slug;
    			$templates[] = "single-{$cat_slug}.php";
    		}
    
    		$templates[] = "single.php";
    
    		return get_query_template( 'single', $templates );
    	}
    	return $template;
    });

    >Takuro Hishikawaさま

    初めまして!コメント頂きありがとうございます。
    Hoshikawaさまが言ってくださっている方法は、今私がやっているsingleでカテゴリごとの条件分岐するのではなく、カテゴリ毎に別のsingleを当てはめるという認識でよろしいでしょうか?

    上記のソースをfunction.phpに記載し、
    Hoshikawaさまが例としてあげてくださっています、スラッグが[movies]の場合は
    、single-movies.phpを作成すると、カテゴリ別で表示している固定ページから記事をクリックするとsingle-movies.phpに飛ぶ形でしょうか?

    細かい話ですが、現在居るカテゴリページのスラッグと同じ、single-スラッグ.phpに
    飛ぶという認識でよろしいのでしょうか?

    質問ばかり、なおかつ初心者な質問で申し訳ありません。
    ご教授下さいませ。

    モデレーター Takuro Hishikawa

    (@hissy)

    記事の詳細ページで、記事のカテゴリーに応じてテンプレートを切り替えるという手法です。

    Hishikawaさま

    ありがとうございます。
    分岐でつまずいているのでこちらの手法もやってみたいと思います。

    またご報告させて頂きます。

    >皆様

    まだ記事の詳細が正しい記事にいかないことや、投稿内容が出て来ないなど
    トラブル続出ですが、また別スレッドに質問してみようかとおもいます。

    ご教授ありがとうございました。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • トピック「投稿記事の詳細ページのデザインを各カテゴリごとに分類する方法」には新たに返信することはできません。