デフォルトのウィジェットカレンダーのリンク先をカテゴリ別にしたい
-
投稿カテゴリーを2つ作成し、それをカテゴリー別に表示するよう
archive-**.phpとsingle-**.phpを作成していて、
それぞれに<?php dynamic_sidebar(); ?>で直接ウィジェットを読み込んでいます。
ウィジェットでは、デフォルトのカレンダーとアーカイブを使用しています。そこでAのカテゴリー(archive-A.phpとsingle-A.php)の際には、ウィジェットのリンク先はきちんとAカテゴリーのアーカイブと、日別アーカイブに飛ぶのですが、
Bカテゴリーの際(archive-B.phpとsingle-B.php)、何故かAカテゴリーに投稿した日付がカレンダー上でリンクになっていて、クリックするとAのアーカイブに飛んでしまいます。
月別アーカイブも月の横の記事数がAカテゴリーの記事数になってしまって、困っております。どのようにすれば解決できるでしょうか?
ご教授宜しくお願い致します。
-
archive-ABC.php と single-ABC.php は、ふつうならカスタム投稿タイプ(スラッグが ABC)用のアーカイブページと個別投稿ページだと思います。それが(ふつうの投稿の)カテゴリーアーカイブや個別投稿ページへ適用されるように、何か特別なコードを書いておられますか?
gblsm様
回答ありがとうございます。
特に何も記述していません。。
特別な記述が必要なことも知りませんでした。
無知で申し訳ございません。
どのような記述が必要なのか教えて頂けないでしょうか?特に何も記述していないのですね。これは状況を知るためにお聞きしただけで、原因ではないと思います。
状況をつかむためにもう少し教えてください。カテゴリーAのアーカイブページは本当にarchive-A.phpが使われていますか?
確認方法は例えば、そのphpファイルに目印となる何かの文字を表示させます。
同じように単一投稿ページも、カテゴリーAの投稿がsingle-A.phpを使って表示されているか確かめましょう。gblsm様
ありがとうございます。
はい、ご指示いただいた通りに確かめましたがきちんと各テンプレが使われています。お見せした方が早いのかもしれないので、archive-Aのコードを貼ります。
疎いコードですが、よろしくお願いいたします。<?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. * * If you'd like to further customize these archive views, you may create a * new template file for each specific one. For example, Twenty Thirteen * already has tag.php for Tag archives, category.php for Category archives, * and author.php for Author archives. * * @link https://codex.wordpress.org/Template_Hierarchy * * @package WordPress * @subpackage Twenty_Thirteen * @since Twenty Thirteen 1.0 */ ?> <!--サムネイルで一覧表示--> <?php if ( in_category( array( 'A' ) )) : ?> <div id="A_thumbnail" class="A_thumbnail"> <div class="container"> <div class="row"> <div class="main-img"> <br/><br/><br/><br/> <span class="cont_title">アーカイブA</span> <hr><br/> <div class="col-sm-3 col-sm-push-9 col-xs-push-12 col-xs-12"> <div class="left_side"> <p>New</p> <?php $randimg_posts = get_posts('category_name=A&numberposts=10'); global $post; foreach( $randimg_posts as $post ) : ?> <a href="<?php the_permalink() ?>"> <?php the_title(); ?></span></a><br/><hr> <?php endforeach; ?> <div> <?php dynamic_sidebar(); ?> </div> </div><!--.left_side--> </div> <div class="col-sm-9 col-sm-pull-3 col-xs-pull-12 col-xs-12 right_main"> <div class="col-md-4 col-sm-6 col-xs-12"> <div class="A_archive"> <?php $randimg_posts = get_posts('category_name=A&numberposts=-1'); foreach( $randimg_posts as $post ) : ?> <span class="text_size_sm"><?php echo get_the_date('Y.n.d'); ?> <h3><?php if(mb_strlen($post->post_title)>14) { $title= mb_substr($post->post_title,0,14) ; echo $title. ・・・ ; } else {echo $post->post_title;}?></h3></span> <a href="<?php the_permalink() ?>"><?php echo get_the_post_thumbnail($post->ID, 'medium'); ?> <h4 style="text-align:left"> <?php echo mb_substr(strip_tags($post-> post_content),0,30).'...'; ?> </h4> </a> </div><!-- .A_archive--><br/> </div><!--.col-offset--> <?php endforeach; ?> <?php else: ?> <?php endif; ?> </div><!--right_main--> </div><!--main-img--> </div><!--row--> </div><!--containe--> </div><!--A_thumbnail--> <!--ここまで--> <?php get_footer(); ?>
検証してみましたが、そのコードを書いたテンプレートファイルが使われません。sasasa24さんのところと比べてどこが違っているでしょうか。
- WordPress 4.2.7を新規インストール。サイトのURLは http://example.jp/wp427/
- Twenty Thirteen の子テーマを作成。
- 子テーマにテンプレートファイル archive-cat1.php を新規作成して、sasasa24さんのコードを入れる。Aの代わりにcat1としました。
- 子テーマを有効化。
- 投稿をいくつか新規作成してカテゴリーcat1(スラッグcat1)をつける。
- cat1のカテゴリーアーカイブページを表示。ページのURLは http://example.jp/wp427/category/cat1/
- archive-cat1.phpではなく、category.phpが使われてページが表示された。
gblsm様
すみませんでした。
1つ前の書き込みの通り、記述をしたらそれぞれに書いた文字が表示されたのですが、
「Show Current Template」プラグインを使用して確認してみると、
category.phpが使用されておりました。
申し訳ございませんでした。追記です。
category.phpには以下を記述しております。<?php $post = $wp_query->post; if ( in_category('2') ) { include(TEMPLATEPATH.'/archive-A.php'); } elseif ( in_category('3') ) { include(TEMPLATEPATH.'/archive-B.php'); } else { //それ以外の投稿カテゴリー include(TEMPLATEPATH.'/archive.php'); } ?>
archive-cat1.php(Aの代わりにcat1としました)を使って表示されるまで検証できました。
しかし…ウィジェットでは、デフォルトのカレンダーとアーカイブを使用しています。
そこでAのカテゴリー(archive-A.phpとsingle-A.php)の際には、ウィジェットのリンク先はきちんとAカテゴリーのアーカイブと、日別アーカイブに飛ぶのですが、こちらの検証では上記のようになりません。カレンダーの日付をクリックして飛んだ先はAカテゴリーではない投稿も一緒に表示されます。また日付アーカイブの投稿数はAカテゴリーではない投稿も含んだ数になります。
sasasa24さんから聞かされていないテーマや設定の違いがまだあるのでしょうか?gblsm様
度々申し訳ございません。
カレンダーの日付をクリックして飛んだ先はAカテゴリーではない投稿も一緒に表示されます。また日付アーカイブの投稿数はAカテゴリーではない投稿も含んだ数になります。
その通りで、私の方もすべてのカテゴリーの投稿が表示されておりました。
きちんと確認しておらずお手数をお掛けして申し訳ございません。すべてのカテゴリーの投稿がカウントされたりアーカイブに表示されるのは、WordPressデフォルトのウィジェット(カレンダー、日付アーカイブ)の仕様だと思います。
変更できなくはないと思いますが、難しそうです。
例えばカレンダーについて、過去トピックが参考になるかもしれません。
フォーラム » 特定のカテゴリーのみカレンダーに表示したい。 — WordPress
過去に何度か類似の質問が出ていますが(「カレンダー」でフォーラムを検索)ぴったりの答えは見つかっていないですね。
フォーラム » カレンダーのカスタマイズについて — WordPressgblsm様
お返事が遅くなりまして申し訳ございません。
変更するのは難しいのですね…ありがとうございます。
投稿内でカテゴリ分けするのが難しいのでしょうか?
カスタム投稿にすればまた違うのでしょうか?WordPressコアのPHPコードを複製して変更する必要があるので、とても詳しいという訳ではない私にとっては難しいという意味で書きましたが、sasasa24さんは違う感想を持たれるかもしれません。
ウィジェットを表示するWordPressの関数(PHPコード)を読んでみてください。カレンダーのウィジェットは
wp-includes/widgets/class-wp-widget-calendar.php
にあり、実際にはget_calendar()
関数がカレンダーを表示します。
日別アーカイブのウィジェットはwp-includes/widgets/class-wp-widget-archives.php
にあり、実際にはwp_get_archives()
関数がアーカイブのリストを表示します。
get_calendar()
とwp_get_archives()
のコードはどちらもwp-includes/general-template.php
の中です。追記です…
日別アーカイブに限ると、wp_get_archives() 関数がカスタム投稿タイプを受け付けるので、カテゴリーAとBの代わりにカスタム投稿タイプAとタイプBでよければ、ウィジェットのコード修正が簡単(比較的)になるかもしれません。
アーカイブのウィジェットがフィルター widget_archives_dropdown_args を呼び出してくれるので、このフィルターにフックした関数の中で post_type パラメータにカスタム投稿タイプを入れてあげればよさそうです。参考:
widget_archives_dropdown_args | Hook | WordPress Developer Resources
WP_Widget_Archives::widget() | Method | WordPress Developer Resources
- トピック「デフォルトのウィジェットカレンダーのリンク先をカテゴリ別にしたい」には新たに返信することはできません。