カスタム投稿タイプのパーマリンク設定

前回までで、無事新しいテーマにカスタム投稿タイプの設定ができたのだが、実際に投稿してみると記事単体ページのURLが
ドメイン名/slug名/投稿タイトル
になっている。

 

このブログでは通常は
ドメイン名/年/月/投稿ID
で設定しているが、どうやらカスタム投稿タイプには効かないらしい。

 

さすがに日本語URLは格好悪いので何としても変えたい。ググってみるとそれらしい記事はいくつかあるものの、試してみて、ダメの繰り返しでようやくたどり着いたのが以下をfunctions.phpに記述することでできた。

 

// カスタム投稿タイプのパーマリンクリライト設定
add_filter('post_type_link', 'generateCustomPostLink', 1, 2);
add_filter('rewrite_rules_array', 'addRewriteRules');

function generateCustomPostLink($link, $post){
  if($post->post_type === 'fbook'){
    return home_url('/fbook/'.$post->ID);
} else if($post->post_type === 'fmovie'){
    return home_url('/fmovie/'.$post->ID);
  } else {
    return $link;
  }
}

function addRewriteRules($rules){
  // 書き換えたパーマリンクに対応したクエリルールを追加
  $new_rule = array(
    'fbook/([0-9]+)/?$' => 'index.php?post_type=fbook&p=$matches[1]',
    'fmovie/([0-9]+)/?$' => 'index.php?post_type=fmovie&p=$matches[1]'
  );
  return $new_rule + $rules;
}

基本的にはWordpressはPHPでDBから情報を取得して表示する仕組みなので、基本的にはURLにパラメータが埋め込まれるクエリパラメータで各記事を表示しているが、それだとカッコ悪いのでプログラムでURLをキレイにしている。それが通常のダッシュボードで設定できるパーマリンク設定になる。

 

上のfunctionでカスタム投稿タイプのこのslugはこういうパーマリンクにしますよという設定事項を定義し、下のfunctionで本来のクエリパラメータをこういう風に表示させてねと書いている感じでしょうか。

 

このブログの場合、カスタム投稿タイプが2つあり、1つのslug名がfbook、もう1つがfmovieなので、この部分を適宜書き換えてもらえれば転用できる。
また2つあるのでelse ifからelseまでを消してもらえれば1つにできる。

 

下のfunctionは$new_rule変数に配列で入れているだけなので、1つがっつり削除で大丈夫。

 

ようやく日本語でないURLになったので、コツコツ記憶のあるうちに読んだ本、観た映画を入れていくことにしよう。

コメントを書く