WordPressでカスタム投稿タイプのパーマリンクを変更する方法

WordPressのカスタム投稿タイプで作成したページのURLを、ページタイトルから投稿IDへ変更する方法の備忘録です。
通常の「投稿」のURLは、ダッシュボードの「パーマリンク設定」で変更が可能です。しかし、カスタム投稿タイプのURLを変更する場合、functions.phpでコードの編集が必要になります。
カスタム投稿のパーマリンクを変更する
カスタム投稿タイプのパーマリンク設定から、ページを表示するURLを変更します。
テンプレートファイルの「functions.php」に以下のコードを追記します。
add_filter('post_type_link', 'custom_post_link', 1, 2);
function custom_post_link($link, $post) {
if($post -> post_type === 'reports') {
return home_url('/reports/'.$post->ID);
} else {
return $link;
}
}
functions.phpにエラーがあるとWebサイトが正常に表示できなくなる可能性があるため、編集する際はバックアップを取るなど十分に注意して作業してください。
カスタム投稿名が「reports」の投稿のパーマリンクを「/reports/投稿ID/」の形に書き換えるコードです。「reports」の部分は変更するカスタム投稿のpost_type
の値に合わせて変更します。
リライトルールの追加
続いてパーマリンクをカスタマイズするためのリライトルールを設定します。
「functions.php」で先ほどのコードの直後に以下のコードを追記します。
add_filter('rewrite_rules_array', 'custom_post_link_rewrite');
function custom_post_link_rewrite($rules) {
$rewrite_rules = array(
'reports/([0-9]+)/?$' => 'index.php?post_type=reports&p=$matches[1]',
);
return $rewrite_rules + $rules;
}
設定したパーマリンクに対応したリライトルールを新たに追加しました。「reports」の部分は変更するカスタム投稿のpost_type
の値に合わせて変更します。
パーマリンクの設定
最後に、変更したパーマリンク設定をWebサイトに反映させます。
管理画面の左メニューから「設定」>「パーマリンク」を開き、「パーマリンク構造」の項目を「基本」以外を選択した状態で保存します。

カスタム投稿ページを開いて、URLが以下のような形に変更されていたら設定は完了です。
https://tamatuf.net/reports/123/
プラグインで変更する
「functions.php」を変更できない時などコードを記入できない場合は、プラグインを利用してパーマリンクを変更することができます。
WordPressプラグイン「Custom Post Type Permalinks」を使用したパーマリンクの変更方法は、下記の記事でも紹介しています。