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

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

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

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

Q&A

解決済

2回答

3401閲覧

WordPressにて、「投稿」の年別アーカイブのパーマリンクを変更する方法がわかりません。

yusako

総合スコア13

WordPress

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

0グッド

0クリップ

投稿2018/10/05 02:26

編集2018/10/05 03:18

前提・実現したいこと

WordPressの「投稿」の年別アーカイブのパーマリンクを以下のように変更したいと思っています。
https://www.hoge.com/news/2018/
newsというアドレスを入れたい。
現状
https://www.hoge.com/2018/

カテゴリー別アーカイブについては、管理画面の「設定」->「パーマリンク設定」の「カテゴリーベース」を「news」にし、
urlのcategoryがnewsに変更されることで対応できたのですが、
年別アーカイブにはもともとcategoryというアドレスが含まれないため、上記の設定外になってしまうようです。
https://www.hoge.com/2018/
newsを入れることができない。

ちなみにカスタム投稿については、パーマリンクにタクソノミースラッグが挿入されるのを利用して下記の方針で、おそらくやりたいことが実装できています。
'rewrite' => array('slug' => 'blog')
add_rewrite_rule('blog/([^/]+)/?$', 'index.php?blogCat=$matches[1]', 'top');

これについてわかる方がおりましたらご教示くださると助かります。
また、不足する情報等がありましたらこちらもご教示ください。

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

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

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

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

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

guest

回答2

0

以下の方法で前にやったことありますが、一度試してみてください。

1、管理画面のパーマリンクを下記にする
/%category%/%year%/%postname%

2、category-{slug or ID}.php というテンプレートを作る
この場合は category-news.php

3、category-news.php に archive.php の内容をコピーする

投稿2018/10/05 05:04

thameat

総合スコア15

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

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

0

ベストアンサー

ダッシュボードで変更できないパーマリンクの書き換えは、おそらく rewrite_rules_array フィルターフックを使って変更する感じかなぁ...

WP_Rewrite を直接設定することになるので、ちょっぴり面倒です。


下記URLと仮定します。

テストしていませんが、こんな感じでどうでしょうか?

function flush_rules(){ global $wp_rewrite; $wp_rewrite->flush_rules(); } add_filter('init','flush_rules'); function add_rewrite_date_link_tt150218($rules){ $newrules = array(); $newrules['news/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$'] = 'index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]'; $newrules['news/([0-9]{4})/([0-9]{1,2})/?$'] = 'index.php?year=$matches[1]&monthnum=$matches[2]'; $newrules['news/([0-9]{4})/?$'] = 'index.php?year=$matches[1]'; return $newrules + $rules; } add_filter('rewrite_rules_array', 'add_rewrite_date_link_tt150218'); function date_link_replace_tt150218($link){ $wp_home_url = home_url(); $link = str_replace( $wp_home_url, $wp_home_url.'/news', $link); return $link; } add_filter('year_link', 'date_link_replace_tt150218'); add_filter('month_link', 'date_link_replace_tt150218'); add_filter('day_link', 'date_link_replace_tt150218');

詳しくは、下記URLを参照。

投稿2018/10/05 03:49

編集2018/10/05 03:58
CHERRY

総合スコア25171

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

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

yusako

2018/10/05 04:07

ありがとうございます。 このままだと、下記のコードでシンタックスエラーが出たのですが、({1,2})でカンマがエラーと言われる) function add_rewrite_date_link_tt150218($rules){ $newrules = array(); $newrules['news/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$'] = 'index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]'; $newrules['news/([0-9]{4})/([0-9]{1,2})/?$'] = 'index.php?year=$matches[1]&monthnum=$matches[2]'; $newrules['news/([0-9]{4})/?$'] = 'index.php?year=$matches[1]'; return $newrules + $rules; } これを今回は年別まででよかったので、下記に変更したところ現状、想定通りの動きになりました。 function add_rewrite_date_link_tt150218($rules){ $newrules = array(); $newrules['news/([0-9]{4})/?$'] = 'index.php?year=$matches[1]'; return $newrules + $rules; }
CHERRY

2018/10/05 04:20

あれ?  正規表現としての間違いはないと思うのだけどなぁ... あとで確認してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問