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

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

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

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

Q&A

1回答

1472閲覧

WordPress:投稿一覧ページのURLにスラッグを含めつつアーカイブウィジェットを使いたい

tassi

総合スコア10

WordPress

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

0グッド

0クリップ

投稿2019/07/19 04:09

編集2019/07/26 01:49

WordPress 5.2.2を使っています。

投稿一覧ページを作成するため、functions.php に以下のコードを記述しました。

php

1function post_has_archive( $args, $post_type ) { 2 if ( 'post' == $post_type ) { 3 $args['rewrite'] = true; 4 $args['has_archive'] = 'topics'; 5 $args['label'] = 'トピックス'; 6 } 7 return $args; 8} 9add_filter( 'register_post_type_args', 'post_has_archive', 10, 2 );

これにより https://ドメイン名.com/topics/ で投稿一覧が表示されるようになりました。

その上でウィジェットの月別アーカイブを表示させた際、リンク先が https://ドメイン名.com/年/月/ となってしまい、トップページにリダイレクトされます。アーカイブウィジェットのURLにスラッグを含めたいのですが、どのようにすればよいでしょうか?

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

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

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

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

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

guest

回答1

0

https://developer.wordpress.org/reference/classes/wp_widget_archives/
によると、
ウェジットでドロップダウン形式を選択していないならば、

PHP

1wp_get_archives( 2 apply_filters( 3 'widget_archives_args', 4 array( 5 'type' => 'monthly', 6 'show_post_count' => $c, 7 ), 8 $instance 9 ) 10);

wp_get_archivesを読みだしてるだけですね。
https://elearn.jp/wpman/function/wp_get_archives.html
によると、wp_get_archivesは引数にpost_typeを追加できるので、こうすればよいかと。

PHP

1//functions.phpに追記 2add_filter( 'widget_archives_args','my_topics_archives'); 3function my_topics_archives( $content ){ 4 $content['post_type'] = 'topics'; 5 return $content; 6}

でもこのままだと他の投稿タイプのページで月別アーカイブウェジットを使おうとしてもtopicsのリンクが出そうなので、これで行けるかな。get_post_type()がちゃんと働くのか確認してないのでもしだめなら上記の奴で許して。

PHP

1//functions.phpに追記 2add_filter( 'widget_archives_args','my_topics_archives'); 3function my_topics_archives( $content ){ 4 5 //topics, post投稿タイプのページではそれぞれの投稿タイプの月別アーカイブにする。 6 //ここら辺のifの判定内容については、状況によって書き換えてください。例:if( is_home() )  7 if( in_array( $post_type = get_post_type(), array( 'topics', 'post' ) ) ){ 8 $content['post_type'] = $post_type; 9 } 10 11 return $content; 12}

投稿2019/07/31 10:43

編集2019/08/08 00:12
yukikp

総合スコア797

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

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

tassi

2019/08/06 04:09

ご回答ありがとうございます。気づくのが遅れて申し訳ありません。 ・アーカイブウィジェットはドロップダウン形式ではありません ・カスタム投稿タイプは使用していません その上で、それぞれのコードを追記しましたがリカバリーモードとなり解決しませんでした。 https://ドメイン名/topics/2019/08/ でアクセスした場合に表示されるのは404ページです。 質問に記載のコードから間違っているのでしょうか?
yukikp

2019/08/06 04:30

上の方のコードをだけ追加しても、リカバリーモード(つまりエラーが発生した)ってことでしょうか。
yukikp

2019/08/08 00:12

動かない理由が分かりました。全角スペースが入ってました。。。(´・ω・`) ごめんなさい><
tassi

2019/08/23 05:13

こちらこそ初歩的なことに気づけず申し訳ありません。直してくださったんですね、ありがとうございます。 しかし、やはりどちらのコードでも実現しませんでした・・・。 1つめだとアーカイブウィジェット自体が出力されず(ul までは出力され、中身の li はない)、2つめだと最初と同じでトップページにリダイレクトされました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問