サポート » 使い方全般 » カテゴリとアーカイブについて

  • 解決済 yuki3

    (@yuki3)


    テンプレートのカテゴリとアーカイブについて、どなたかご教授いただけませんでしょうか。

    WordPressを使ったサイト内に、いくつかカテゴリを作ってブログ投稿をしています。

    そして、カテゴリタイトルを選択すると、そのカテゴリ内の最新記事1つをページに表示させるように、カテゴリテンプレートをカスタマイズしました。サイドバーには、記事一覧とアーカイブ一覧(月別)が表示されるようにしています。

    そうすると、月別一覧から任意の項目(たとえば2011年3月の欄)をクリックしても、カテゴリテンプレートが採用されて、最新記事が1つ表示されてしまいます。

    カテゴリタイトルをクリックしたときは、カテゴリテンプレートを、月別アーカイブをクリックしたときは、アーカイブテンプレートを適用される方法はないでしょうか。

    (Wordpressの説明を読んでいると、優先順位でカテゴリーテンプレートがある場合はそちらを優先して表示されるような事が書いてありました。)

    当方、XHTML、CSSは問題ありませんが、PHPの知識は乏しく、Wordpressのカスタマイズもいろいろな方のサンプルを参考に編集させていただいております。

    どうぞ、よろしくお願いいたします。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • モデレーター jim912

    (@jim912)

    yuki3さん、こんにちは。

    • 利用しているテーマ
    • カスタマイズした全てのファイル名
    • カスタマイズした全てのコード

    を教えて下さい。

    いただいた内容だと、CODEXのテンプレート階層を読んで、アーカイブが適用されるファイル名のテンプレートを作成してくださいとしかアドバイスできません。

    トピック投稿者 yuki3

    (@yuki3)

    jim912さん、ご回答ありがとうございます。
    以下、ご連絡いたしますので、どうぞよろしくお願いいたします。

    【利用しているテーマ】
    Twenty Ten をカスタマイズ

    【カスタマイズしたファイル名】
    ・category.php カテゴリごとに作成(category-info.php など2つ)デフォルトのcategory.phpはそのまま
    ・header.php(共通ヘッダーをカスタマイズ)
    ・page.php(テンプレートを使い分けたいページ用に3つ追加。それ以外は編集した共通page.phpを利用)
    ・sidebar.php(使い分けたいsidebarを5つ追加。それ以外は編集した共通sidebar.phpを使用)
    ・single.php(2つのカテゴリ用に2つとそれ以外用に1つ追加し、single.phpに振り分け指示)
    ・footer.php(共通フッターをカスタマイズ)
    ・style.css(共通スタイルシートをカスタマイズ)

    【カスタマイズしたコード】
    カスタマイズしているファイルが多いので、該当すると思われるところを記載します。

    <category-info.php>“info” というカテゴリ用 (もう1つも同じ形式)
    ——————————————————

    <?php
    /**
     * The template for displaying Category Archive pages.
     *
     * @package WordPress
     * @subpackage Twenty_Ten
     * @since Twenty Ten 1.0
     */
    
    get_header(); ?>
    
    <div id="left">
    <div id="contents_page" role="main">
    
    <h2 class="page-title">インフォメーションブログ</h2>
    
    <?php query_posts('category_name=info&showposts=1');?>
    <?php if (have_posts()) : ?>
    
    <?php while ( have_posts() ) : the_post(); ?>
    <h3><?php the_title(); ?></h3>
    <div class="entry-meta"><?php the_time(get_option('date_format')); ?></div>
    <?php the_content(); ?>
    
    <?php endwhile; ?>
    
    <?php else : ?>
    <p>投稿がありません</p>
    <?php endif; ?>
    <?php wp_reset_query(); ?>
    
    </div><!-- #contents_page -->
    </div><!-- #left -->
    
    <?php get_sidebar(info); ?>
    <?php get_footer(); ?>

    <sidebar-info.php>infoカテゴリで表示させいているサイドバー部分
    ——————————————————

    <?php
    /**
     * The Sidebar containing the primary and secondary widget areas.
     *
     * @package WordPress
     * @subpackage Twenty_Ten
     * @since Twenty Ten 1.0
     */
    ?>
    
    <div id="side">
    
    <div id="login">
    <p class="logintitle"><img src="<?php bloginfo('template_url'); ?>/images/login_title.gif" width="90" height="40" /></p>
    <div id="primary" class="widget-area" role="complementary">
    <ul class="xoxo">
    <?php
    	/* When we call the dynamic_sidebar() function, it'll spit out
    	 * the widgets for that widget area. If it instead returns false,
    	 * then the sidebar simply doesn't exist, so we'll hard-code in
    	 * some default sidebar stuff just in case.
    	 */
    	if ( ! dynamic_sidebar( 'primary-widget-area' ) ) : ?>
    
    <li id="meta" class="widget-container">
    <h3 class="widget-title"><?php _e( 'Meta', 'twentyten' ); ?></h3>
    <ul>
    <?php wp_register(); ?>
    <li><?php wp_loginout(); ?></li>
    <?php wp_meta(); ?>
    </ul>
    </li>
    <?php endif; // end primary widget area ?>
    </ul>
    </div><!-- #primary .widget-area -->
    <?php cp_displayPoints('所持ポイント'); ?>
    </div>
    
    <div id="sub_menu">
    <h3>投稿一覧</h3>
    <ul>
    <?php $posts = get_posts('numberposts=10&category=6');
    foreach($posts as $post) :
    setup_postdata($post); ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    <?php endforeach; ?>
    </ul>
    
    <h3>アーカイブ</h3>
    <ul>
    <?php wp_get_archives('cat=6');  ?>
    </ul>
    
    </div>
    </div>

    <archive.php>アーカイブファイル(ほぼデフォルト)
    ——————————————————

    <?php
    /**
     * The template for displaying Archive pages.
     *
     * Used to display archive-type pages if nothing more specific matches a query.
     * For example, puts together date-based pages if no date.php file exists.
     *
     * Learn more: http://codex.wordpress.org/Template_Hierarchy
     *
     * @package WordPress
     * @subpackage Twenty_Ten
     * @since Twenty Ten 1.0
     */
    
    get_header(); ?>
    
    <div id="left">
    <div id="contents_page" role="main">
    
    <?php
    	/* Queue the first post, that way we know
    	 * what date we're dealing with (if that is the case).
    	 *
    	 * We reset this later so we can run the loop
    	 * properly with a call to rewind_posts().
    	 */
    	if ( have_posts() )
    		the_post();
    ?>
    
    			<h2 class="page-title">
    <?php if ( is_day() ) : ?>
    				<?php printf( __( 'Daily Archives: <span>%s</span>', 'twentyten' ), get_the_date() ); ?>
    <?php elseif ( is_month() ) : ?>
    				<?php printf( __( 'Monthly Archives: <span>%s</span>', 'twentyten' ), get_the_date('F Y') ); ?>
    <?php elseif ( is_year() ) : ?>
    				<?php printf( __( 'Yearly Archives: <span>%s</span>', 'twentyten' ), get_the_date('Y') ); ?>
    <?php else : ?>
    				<?php _e( 'Blog Archives', 'twentyten' ); ?>
    <?php endif; ?>
    			</h2>
    
    <?php
    	/* Since we called the_post() above, we need to
    	 * rewind the loop back to the beginning that way
    	 * we can run the loop properly, in full.
    	 */
    	rewind_posts();
    
    	/* Run the loop for the archives page to output the posts.
    	 * If you want to overload this in a child theme then include a file
    	 * called loop-archives.php and that will be used instead.
    	 */
    	 get_template_part( 'loop', 'archive' );
    ?>
    
    </div><!-- #contents_page -->
    </div><!-- #left -->
    
    <?php get_sidebar(3); ?>
    <?php get_footer(); ?>

    と、いうような感じです。いかがでしょうか。何か解決策がありそうでしょうか。
    他に必要な内容があればご連絡ください。

    >アーカイブが適用されるファイル名のテンプレートを作成してください
    これは、category-info.php を作った様に、archive-info.phpを作成しておけば、アーカーブ表示(月別など)の時はカテゴリファイルではなくアーカイブファイルを読んでくれる。ということでしょうか。

    お手数おかけしますが、どうぞよろしくお願いいたします。

    トピック投稿者 yuki3

    (@yuki3)

    追伸:
    archive-info.php を作ってみたのですが、やはりアーカイブ(月別)を表示させても、category-info.phpが優先(最新記事表示)されてしまいました。

    ●カテゴリタイトルをクリック→カテゴリ内の最新記事を1つ表示。
    ●月別アーカイブ(例:2011年5月)をクリック→カテゴリ内のアーカイブ一覧表示(例:2011年5月投稿記事のタイトル一覧)

    ということがしたいです。宜しくお願いたします。

    モデレーター jim912

    (@jim912)

    yuki3さん

    月別アーカイブ(例:2011年5月)をクリック→カテゴリ内のアーカイブ一覧表示(例:2011年5月投稿記事のタイトル一覧)

    いままで提供いただいた情報で、これに関する言及は初めてかと思います。
    通常、アーカイブではカテゴリーでの絞り込みにはなりません。
    それを実現させるための何らかの変更・カスタマイズ・プラグインを利用していますか?

    トピック投稿者 yuki3

    (@yuki3)

    >jim912さん、ご回答ありがとうございます。

    アーカイブではカテゴリごとのアーカイブ表示はできないのですか!すみません、それは知りませんでした。
    ですので、これに関しては何のプラグインやカスタマイズなどもしていませんでした。

    どうでしょうか。。私のやりたいことは難しいのでしょうか。。
    どうぞ、よろしくお願いいたします。

    トピック投稿者 yuki3

    (@yuki3)

    追伸;
    何度もすみません。

    カテゴリごとのアーカイブということで、「archives for a category」というプラグインを入れて、
    さきほどのarchive-info.phpに
    <?php wp_get_archives('cat=6'); ?>
    と入れてみたのですが、やはりアーカイブ(例:2011年5月)を表示させるとcateory-info.phpが優先されてしまうようで、category-info.phpで設定している最新記事1つが表示されてしまう状態でした。

    cateory-info.php の先頭(get_header();の上)に下記コードを加えたらどうでしょう。
    *未検証です。

    if ( is_date() ) {
        return get_template_part( 'archive', 'info' );
    }
    get_header(); ?>
    トピック投稿者 yuki3

    (@yuki3)

    >LVP8さん、ご回答ありがとうございます。
    おかげさまで、教えていただいた方法で解決できました!
    ※ただ、さきほどのarchived for a category のプラグインのコードをいれると、表示されたページには、サイドメニューに表示しているものと同じ月別表示(2011年5月、2011年4月・・・)が表示されるだけでしたので、これは削除して、元のコードに戻して、思うような動作となりました。

    ちなみに、解決したコードを記載しておきます。
    (Twenty-Tenでの動作です)

    category-info.php

    <?php
    /**
     * The template for displaying Category Archive pages.
     *
     * @package WordPress
     * @subpackage Twenty_Ten
     * @since Twenty Ten 1.0
     */
    if ( is_date() ) {
        return get_template_part( 'archive', 'info' );
    }
    get_header(); ?>
    
    <div id="left">
    <div id="contents_page" role="main">
    
    <h2 class="page-title">インフォメーションブログ</h2>
    
    <?php query_posts('category_name=info&showposts=1');?>
    <?php if (have_posts()) : ?>
    
    <?php while ( have_posts() ) : the_post(); ?>
    <h3><?php the_title(); ?></h3>
    <div class="entry-meta"><?php the_time(get_option('date_format')); ?></div>
    <?php the_content(); ?>
    
    <?php endwhile; ?>
    
    <?php else : ?>
    <p>投稿がありません</p>
    <?php endif; ?>
    <?php wp_reset_query(); ?>
    
    </div><!-- #contents_page -->
    </div><!-- #left -->
    
    <?php get_sidebar(info); ?>
    <?php get_footer(); ?>

    archive-info.php

    <?php
    /**
     * The template for displaying Archive pages.
     *
     * Used to display archive-type pages if nothing more specific matches a query.
     * For example, puts together date-based pages if no date.php file exists.
     *
     * Learn more: http://codex.wordpress.org/Template_Hierarchy
     *
     * @package WordPress
     * @subpackage Twenty_Ten
     * @since Twenty Ten 1.0
     */
    
    get_header(); ?>
    
    <div id="left">
    <div id="contents_page" role="main">
    <?php
    	/* Queue the first post, that way we know
    	 * what date we're dealing with (if that is the case).
    	 *
    	 * We reset this later so we can run the loop
    	 * properly with a call to rewind_posts().
    	 */
    	if ( have_posts() )
    		the_post();
    ?>
    
    			<h2 class="page-title">
    <?php if ( is_day() ) : ?>
    				<?php printf( __( 'Daily Archives: <span>%s</span>', 'twentyten' ), get_the_date() ); ?>
    <?php elseif ( is_month() ) : ?>
    				<?php printf( __( 'Monthly Archives: <span>%s</span>', 'twentyten' ), get_the_date('F Y') ); ?>
    <?php elseif ( is_year() ) : ?>
    				<?php printf( __( 'Yearly Archives: <span>%s</span>', 'twentyten' ), get_the_date('Y') ); ?>
    <?php else : ?>
    				<?php _e( 'Blog Archives', 'twentyten' ); ?>
    <?php endif; ?>
    			</h2>
    
    <?php
    	/* Since we called the_post() above, we need to
    	 * rewind the loop back to the beginning that way
    	 * we can run the loop properly, in full.
    	 */
    	rewind_posts();
    
    	/* Run the loop for the archives page to output the posts.
    	 * If you want to overload this in a child theme then include a file
    	 * called loop-archives.php and that will be used instead.
    	 */
    	 get_template_part( 'loop', 'archive' );
    ?>
    
    </div><!-- #contents_page -->
    </div><!-- #left -->
    
    <?php get_sidebar(info); ?>
    <?php get_footer(); ?>

    jim912さん、LVP8さん、ありがとうございました。
    これで、私の求めていた表示ができるようになりました!

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「カテゴリとアーカイブについて」には新たに返信することはできません。