質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

291閲覧

Wordpressでサイドバーにカテゴリー別のアーカイブリンクを記述したい

HisaoAndo

総合スコア14

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/01/12 05:43

編集2019/01/31 13:50

「Wordpressでサイドバーにカテゴリー別のアーカイブリンクを記述したい」

該当ページ1
該当ページ2

サイドバーのアーカイブのリンク先を年月の後にカテゴリーIDを記述できれば解決できるかと思うのですが、
記述箇所がわからずでして…。

また、他に良い方法等あればご教示いただきますと幸いです。
よろしくお願い致します。


追記(2019/1/28)

テーマはTwenty Sixteen(https://ja.wordpress.org/themes/twentysixteen/)をコピーして、カスタマイズしました。


追記(2019/1/31)

http://takamori.work/miyama/お知らせ

上記ページでのアーカイブのリンク先は、

http://takamori.work/miyama/〇〇〇〇/〇〇?category_name=お知らせ

とし、

http://takamori.work/miyama/みやまの日々

上記ページでのアーカイブのリンク先は、

http://takamori.work/miyama/〇〇〇〇/〇〇?category_name=みやまの日々

と、そのページのカテゴリー名が一致するようにしたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2019/01/15 18:10

使用されているテーマは自作テーマでしょうか?それとも公開されているテーマでしょうか?後者の場合は入手先をリンクつきで質問文に追記してください。
退会済みユーザー
HisaoAndo

2019/01/27 23:54

tohkai様 ご回答ありがとうございます。 参考にさせていただきます! 結果、報告いたします。
guest

回答1

0

ベストアンサー

サイドバーのアーカイブのリンク先を年月の後にカテゴリーIDを記述できれば解決できるかと思うのですが、

これだけでいいのであれば、ウィジェット「アーカイブ」の内部で使われているget_archives_linkフックを利用できます。

PHP

1 2add_filter( 'get_archives_link', 'teratail168423_HisaoAndo_3', 10, 6 ); 3 4function teratail168423_HisaoAndo_3( $link_html, $url, $text, $format, $before, $after ) { 5 //$category_name = "item"; // 20190201 修正 6  $category_name = get_query_var('category_name'); // 20190201 修正 7 8 $link_html = preg_replace('/href=["\'](.*?)["\']/','href="$1?category_name=' . $category_name .'"', $link_html); 9 10 return $link_html; 11}

ただし、該当するカテゴリーの月別アーカイブが存在しない場合に404エラーになってしまうので、もう少し丁寧にやるなら、getarchives_joingetarchives_whereフックを使用する必要があります。


2019/02/01 追記

上記コードを修正。


2019/02/01 追記2

getarchives_joingetarchives_whereフックの処理を追加し、該当のカテゴリーに所属する投稿がある場合のみ月別アーカイブのリンクが表示されるようにしました。
また、カテゴリースラッグではなく、カテゴリーIDでの処理に変更にしました。

PHP

1add_filter( 'getarchives_join', 'teratail168423_HisaoAndo_1', 10, 2 ); 2add_filter( 'getarchives_where', 'teratail168423_HisaoAndo_2', 10, 2 ); 3add_filter( 'get_archives_link', 'teratail168423_HisaoAndo_3', 10, 6 ); 4 5function teratail168423_HisaoAndo_1( $join, $r ) { 6 global $wpdb; 7 8 $join .= <<< EOF 9LEFT JOIN $wpdb->term_relationships AS tr ON ( $wpdb->posts.ID = tr.object_id ) 10EOF; 11 12 return $join; 13} 14 15function teratail168423_HisaoAndo_2( $where, $r ) { 16 $cat = get_query_var('cat'); 17 18 $where .= " AND tr.term_taxonomy_id =" . $cat; 19 20 return $where; 21} 22 23function teratail168423_HisaoAndo_3( $link_html, $url, $text, $format, $before, $after ) { 24 $cat = get_query_var('cat'); 25 26 $link_html = preg_replace('/href=["\'](.*?)["\']/','href="$1?cat=' . $cat .'"', $link_html); 27 28 return $link_html; 29}

投稿2019/01/31 08:29

編集2019/02/02 23:51
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HisaoAndo

2019/01/31 13:50 編集

tohkai様 ご回答ありがとうございます! 書いていただいたPHPコードをfunction.phpに書き加えたのですが、 $category_name = "item"; の部分がそのまま、 http://takamori.work/miyama/2019/01?category_name=item となってしまいました。 用意している2つのカテゴリー名をそれぞれのリンク先で記述できる方法ございましたらご教示いただきたいです。 よろしくおねがい致します。
退会済みユーザー

退会済みユーザー

2019/01/31 10:16

$category_name = "item"; のところは書き換える前提です。 質問文にはどのような条件でカテゴリー名を決めたいのかが書かれていません。詳細を質問文に追記してください。
HisaoAndo

2019/01/31 13:52

tohkai様 ご回答ありがとうございます。 質問にカテゴリー名についての追記をしました。 ご確認お願いいたします。
HisaoAndo

2019/02/01 13:25

tohkai様 ご回答ありがとうございます! コードをfuntions.phpに書き加えてみたのですが、 ページが動作しなくなってしまいます。 何度も申し訳ないのですが、 対処法をご教示いただけたらと思います。 よろしくお願い致します。
退会済みユーザー

退会済みユーザー

2019/02/01 13:37

ページが動作しなくなったとは具体的にどうなりましたか? どうなったのかがわからないことには、対処法をお教えしようがありません。
HisaoAndo

2019/02/02 13:09

このページは動作していません takamori.work では現在このリクエストを処理できません。 HTTP ERROR 500 全ページで上記の文言が画面に表示される状態になってしまいました!
退会済みユーザー

退会済みユーザー

2019/02/02 23:53

HisaoAndoさん 全角スペースが混じってしまっていましたので、修正しました。
HisaoAndo

2019/02/03 00:23

tohkai様 ありがとうございます! 解決できたました! 何度もお付き合いいただきまして、 誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問