WordPressを導入した際に、必ず最初にしておきたいのがパーマリンク設定です。
途中から変更すると、記事のURLが変更になってしまいそれまでのSEO評価を失ってしまう事になります。そのため、最初に一度運用していく記事のURLの形式を決める事が重要です。
先日、カスタム投稿タイプのパーマリンクを任意のURLに設定出来る「Custom Post Type Permalinks」の使い方【WordPress】でプラグインを仕様したカスタム投稿タイプのパーマリンクの変更方法について解説しましたが、今回はfunctions.phpでプラグインを使わず変更する方法を解説していきます。
カスタム投稿タイプのパーマリンクを変更する理由
カスタム投稿タイプのパーマリンクを変更する理由は、自身で運営・管理して記事のスラッグを適宜変更している場合は大丈夫ですが、一般のユーザーは記事のスラッグを気にせず日本語のまま投稿します。
そのままでは日本語URLは英数字等にエンコードされてとても長いURLになります。SEO的には問題無いとされてはいますが、ユーザーの視認性も下がり扱いにくいものになってしまいます。
後から記事のスラッグを変更すると、検索エンジンにインデックスされているURLが変わってしまいますのでSEO的にも評価が下がってしまったりと悪影響となります。
そこで、今回はあらかじめ記事のスラッグを記事IDに変更するようにしていきたいと思います。
カスタム投稿タイプのパーマリンクを変更する方法
カスタム投稿タイプのパーマリンクを変更する方法としてfunctions.phpを使用します。今回はプラグインは使用しませんので、難しいと感じる場合は、先日解説した、カスタム投稿タイプのパーマリンクを任意のURLに設定出来る「Custom Post Type Permalinks」の使い方【WordPress】をご覧ください。
以下の内容がfunctions.phpを使用してカスタム投稿タイプのパーマリンクをIDに変更するために必要な内容となります。
rewriteオプションで’with_front’ => falseにする
まずは、カスタム投稿タイプを定義するregister_post_typeのrewriteオプションで‘with_front’ => falseにする事を忘れないようにしてください。
'rewrite' => array( 'with_front' => false ),
これは、パーマリンク設定でカスタム構造を選択していて追加でディレクトリ構造等を組み込んでいる場合に、そのディレクトリ構造を引き継いでしまうためとなります。
パーマリンクをIDに変更する
続いてパーマリンクの末尾をIDに変更するための記述となります。
function custom_post_type_link($link, $post) {
if($post -> post_type === 'news') {
return home_url('/news/'.$post->ID);
} else {
return $link;
}
}
add_filter('post_type_link', 'custom_post_type_link', 1, 2);
上記の記述でカスタム投稿タイプのスラッグが「news」のパーマリンクを「news/投稿ID」の形に書き換えています。
「news」の部分はお使いの環境によって適宜書き換えてください。
書き換えたパーマリンクに対応したリライトルールを追加する
次に、書き換えたパーマリンクに対応したリライトルールを記述する事で、アーカイブや記事ページの表示を正常に出来るようにします。
function custom_rewrite_rules_array($rules) {
$rewrite_rules = array(
'news/([0-9]+)/?$' => 'index.php?post_type=news&p=$matches[1]',
);
return $rewrite_rules + $rules;
}
add_filter('rewrite_rules_array', 'custom_rewrite_rules_array');
「news」の部分はお使いの環境によって適宜書き換えてください。
パーマリンクの変更を反映させる
最後に、Wordpress管理画面メニューの「設定」→「パーマリンク」から、「パーマリンク構造」の項目を「基本」以外を選択し保存してください。
※すでに「基本」以外を選択している場合でも必ず一度保存してください。
以上がカスタム投稿タイプのパーマリンクを変更する方法となります。
さいごに
いかがでしたでしょうか。
今回は、functions.phpでカスタム投稿タイプのパーマリンクを任意のURLに変更する方法を解説しました。
プラグインが増えるとサイトが重くなり脆弱性の問題もありますので、出来ればfunctions.phpで変更する事が望ましいですが出来ない場合は無理せず、カスタム投稿タイプのパーマリンクを任意のURLに設定出来る「Custom Post Type Permalinks」の使い方【WordPress】で解説しているプラグインでの対応をしてみて下さい。