人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

WordPressでの質問です。
サイドバーに表示されるアーカーブのカスタマイズについてです。
カテゴリが4つありまして、各カテゴリやそのカテゴリ内の記事を表示した際にアーカイブ部分には該当カテゴリの情報のみを表示したいと思っています。
月単位で表示したいと思います。
以下、イメージです。

「カテゴリA」「カテゴリB」・・・があった場合
「カテゴリB」をクリックするとサイドバーの表示は

2011年9月
9月に投稿した「カテゴリB」の記事のタイトルA
9月に投稿した「カテゴリB」の記事のタイトルB

2011年8月
8月に投稿した「カテゴリB」の記事のタイトルA
8月に投稿した「カテゴリB」の記事のタイトルB
8月に投稿した「カテゴリB」の記事のタイトルC
8月に投稿した「カテゴリB」の記事のタイトルD

のようにサイドバーのナビゲーションに該当カテゴリの記事だけを
月別に表示したいと思っています。

これが実現できるプラグインもしくはソースコードをお教えください。


●質問者: salvatore
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● rouge_2008
●200ポイント

プラグインは知らないので、コードを書いてみました。


1.「functions.php」に次のコードを追加します。(※文字コードはUTF-8です。)

function get_category_monthentry($id, $cat) {
global $wpdb;

$sql = "SELECT YEAR( post_date ) AS `year` , MONTH( post_date ) AS `month` , COUNT( ID ) AS posts
FROM $wpdb->posts JOIN $wpdb->term_relationships ON $wpdb->posts.ID = $wpdb->term_relationships.object_id
WHERE $wpdb->posts.post_type = 'post' AND $wpdb->posts.post_status = 'publish' AND $wpdb->term_relationships.term_taxonomy_id =".$id.
" GROUP BY YEAR( post_date ) , MONTH( post_date ) ORDER BY post_date DESC";
$gresults = $wpdb->get_results($sql);
$list_query = new WP_Query( 'cat='.$id.'&nopaging=true' );

if($list_query->have_posts()) : ;
$list = "<li id=\"entry-list\" class=\"widget-container\">\n";
$list .= "<h3 class=\"widget-title\">" . $cat . "の年月別エントリー</h3>\n";
$list .= "<ul>\n";
$cnt =0; $out = 0; $n = 0;

while ($list_query->have_posts()) : $list_query->the_post();
$i = $gresults[$cnt]->posts;
if($out == $n) {
$list .= "<li>" . $gresults[$cnt]->year . "年" . $gresults[$cnt]->month . "月\n<ul>\n";
}
$list .= "<li><a href=\"" . get_permalink() . "\">" . the_title('','',false) . "</a></li>";
$out++;
if($out == $n + $i) {
$n += $i;
$cnt++;
$list .= "</ul>\n</li>\n";
}
endwhile;
$list .= "</ul>\n</li>\n";
echo $list;
endif;
}



2.「sidebar.php」の任意の箇所に次のコードを追加します。(※少し余分な記述があったので修正)

<?php if ( is_single() ) : ?>
<?php $now_cat = get_the_category(); get_category_monthentry($now_cat[0]->cat_ID, $now_cat[0]->cat_name); ?>
<?php elseif ( is_category() ) : ?>
<?php $now_cat = get_query_var('cat'); $id = get_category($now_cat); get_category_monthentry($id->cat_ID, $id->cat_name); ?>
<?php endif; ?>


※標準テーマの「TwentyTen」の場合、上記のコードを以下の部分以降の任意の箇所に追加します。【コード訂正済み】

<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' ) ) : ?>
<!-- これ以降に先ほどのコードを追加 -->


※現在表示されているアーカイブが必要ない場合は、次の箇所を削除します。(※これも標準テーマの「TwentyTen」です。)

<li id="archives" class="widget-container">
<h3 class="widget-title"><?php _e( 'Archives', 'twentyten' ); ?></h3>
<ul>
<?php wp_get_archives( 'type=monthly' ); ?>
</ul>
</li>



※※※管理画面の「外観」→「ウィジェット」で、表示するウィジェットを設定している場合で、


1.現在表示されているアーカイブが必要ない場合は、管理画面のウィジェットで削除してください。


【※※※ 訂正済み ※※※】

2.次のようにコードを追加する箇所を変更した上で、各ウィジェットの表示順を管理画面のウィジェットで変更してください。(※年月別のカテゴリー内記事リストよりも上に表示したいウィジェットを「ウィジェットエリア1」に、下に表示したいウィジェットを「ウィジェットエリア2」に設定します。)

<?php endif; // end primary widget area ?>
<!-- ※※※ ここから追加 ※※※ -->
<?php if ( is_single() ) : ?>
<?php $now_cat = get_the_category(); get_category_monthentry($now_cat[0]->cat_ID, $now_cat[0]->cat_name); ?>
<?php elseif ( is_category() ) : ?>
<?php $now_cat = get_query_var('cat'); $id = get_category($now_cat); get_category_monthentry($id->cat_ID, $id->cat_name); ?>
<?php endif; ?>
<!-- ※※※ ここまで ※※※ -->

</ul>
</div><!-- #primary .widget-area -->


ウィジェットの表示に合わせる為に、オリジナルのエリアを作成して、その中に表示するようにしています。(「#originalarea」への指定をstyle.cssに追加してください。)オリジナルのエリアを作成せずに、既存のプライマリーエリア(「ウィジェットエリア1」の下)に追加する様に変更したので、以下のスタイルシートの追加は必要ありません。

#originalarea {
float: right;
overflow: hidden;
width: 220px;
}



※他のテーマを使用していて、「TwentyTen」とは著しく異なるため分からないという時には、「sidebar.php」の内容を以下のようにスーパーpre記法を使用して教えてください。

>||

ここに「sidebar.php」のコードを記述します。

||<

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ