WordPress 特定カテゴリのパーマリンクを変更する

少し悩んだので、記述しとくぜ。

WordPress 特定カテゴリのパーマリンクを変更する

特定のカテゴリーだけパーマリンクを変更したい時、管理画面のパーマリンクだけではできないので、function.phpに記述。結論から書くと、工程は2工程。

悪いがサクっとコピペはできねぇ。
なぜならパーマリンクは理解しないと、とくに表示がおかしくなるから。
だが理解できればアホでも可能。

覚えて実装する手順は2つ。

  1. そのアドレスで目的のページが出るようにする。
  2. 内部のリンクも書き換える。

こんだけだ。

 

1.そのアドレスで目的のページが出るようにする。

先に結論からかくとこんな感じだ。
解説すると、
‘category/文字列/  ってアドレスなら、index.php?category_name=文字列と同じ表示してくれ ことだ。

WorddPresssのパーマリンクってのは、内部では本来ではあれば、他の1から書いたコードのように、

上記のようにpっていうようなパラメーター値があり、それを読んで変更してる。
http://kato.space/あうあう/ほげほげ/ っていうアドレスがあれば、
内部ではhttp://kato.space/index.php?p=”ほげほげ”&tag=”ほげほげ” って具合に読み取ってるわけだ。

このルールはリライトルールな訳でね、/xxx/xxx/のときはこうだって書き換えてる。
フレームワークだとパーサとかいうが、まあ、そんな感じだ。

つまりだ、/xxxxx/yyyyy/ の時にこういう動きしたいっていう要望があれば、
それに合わせたrewrite_ruleを追加してやればいいってこと。

…でだ、そうなると、WordPressのindex.php?p= のこのpに相当する部分がわからなきゃ困る。
先に結論から書くと、pは投稿のIDの文字列。
つまりだ、カテゴリで検索するのか投稿スラッグだが
このpの部分に相当する部分がわからきゃだめなわけだ。

これはwp-includes/class-wp.php にかいてあるぞ。ざっくりはこうだ。

パラメーター名 役割 指定例
m 日時 201304
p 投稿のID 1234
posts 不明
w 12
cat カテゴリーのterm_id 1
withcomments コメントフィード関連 1
withoutcomments コメントフィード関連 0
s サイト内検索の検索文字列 WordPress
search 不明
exact 検索時完全一致にするかどうか 1
sentence 検索文字列の分解を行うか 1
calendar 不明
page ページ分割時のページ送り数 3
paged アーカイブページのページ送り数 5
more moreの表示 1
tb トラックバック 1
pb 不明
author 作成者のユーザーID 2
order アーカイブの昇順・降順 asc
orderby アーカイブの順列 date
year 2013
monthnum 4
day 16
hour 20
minute 21
second 23
name 投稿スラッグ hello-world
category_name カテゴリースラッグ uncategorized
tag タグのterm_id 4
feed フィードの種類 rss2
author_name 作成者名 omagari
static 不明
pagename 固定ページのスラッグ sample-page
page_id 固定ページのID 2
error レスポンスコード? 404
comments_popup コメントポップアップ
attachment メディアのスラッグ koara
attachment_id メディアのID 11094
subpost attachmentのエイリアス
subpost_id attachment_idのエイリアス
preview プレビューかどうか 1
robots ロボットテキストかどうか 1
taxonomy 分類 category
term 分類のスラッグ uncategorized
cpage コメント分割時のページ送り数 4
post_type 投稿タイプスラッグ custom_post
embed embed要素

この表を見て、

上に書いた例は、

‘category/([^/]+)/?’, 正規表現で書いたマッチした部分、がindex.php?xxxxxx= xxxxxxとして行くわけだ。

あ、パーマリンク設定ページで再設定押さないと反映しないからな。

内部のリンクも書き換える。

でだ、上記で直接アドレスを叩けば、そのページが見える。
だがサイト内部はアドレスがそのままだ、

なので、これは内部リンクを書き換える。

とても良い参考例があったので、参考にさせてもらう。

内部のパーマリンクを変更してる。
特にいいのはmysql2date
つまりだ、
この例は、
if ( !empty($category) && $category[0]->cat_name == “News” ) { カテゴリが Newsなら、
$permalink = trailingslashit( パーマリンクを
home_url(‘/news/’ . ベースはnewsって付けて
mysql2date(‘Ymd’, $post->post_date) .’/’. $post->post_name ) ); }年月日/投稿名

/news/年月日/投稿名 にしてくれって書いてある。

……と忘備録

 

Follow me!

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA