WordPressのパーマリンクをコードでカスタマイズする方法
Masaki Oba
代表取締役・WordPress運用スペシャリスト
目次
WordPressのパーマリンクをコードでカスタマイズする方法
パーマリンクの基本
パーマリンクとは、各ページに割り当てられる固定URLのことです。WordPressでは管理画面の「設定 > パーマリンク」からURL構造を選択できます。
よく使われる設定は「投稿名」(/%postname%/)ですが、案件によっては「投稿のURLに /news/ を挟みたい」「カスタム投稿タイプのスラッグを変えたい」など、管理画面だけでは対応できないケースがあります。
そういった場面では、フィルターフックを使ってコードでカスタマイズします。
投稿のURLにプレフィックスを追加する
たとえば、投稿の詳細ページURLを example.com/sample-post/ から example.com/news/sample-post/ のように変更したいケースです。
これには2つのフィルターを組み合わせます。
パーマリンクの出力を変更する
post_link フィルターを使って、投稿のURLに /news/ を挿入します。
function custom_post_permalink( $permalink ) {
$home_url = home_url( '/' );
$permalink = str_replace( $home_url, $home_url . 'news/', $permalink );
return $permalink;
}
add_filter( 'post_link', 'custom_post_permalink' );
元の記事ではトップレベルドメイン(.jp/)を基準にした str_replace を使っていましたが、home_url() を使ったほうが環境に依存しません。
リライトルールを追加する
URLの表示を変えただけでは、実際にそのURLでアクセスしたときに404になります。WordPressに「/news/ 付きのURLでも投稿を表示してね」と教えるために、リライトルールを書き換えます。
function custom_post_rewrite_rules( $post_rewrite ) {
$rewrite_rules = [];
foreach ( $post_rewrite as $regex => $rewrite ) {
$rewrite_rules[ 'news/' . $regex ] = $rewrite;
}
return $rewrite_rules;
}
add_filter( 'post_rewrite_rules', 'custom_post_rewrite_rules' );
これで /news/記事スラッグ/ のURLで正しく投稿が表示されるようになります。
カスタム投稿タイプのスラッグを変更する
カスタム投稿タイプを register_post_type で登録するとき、rewrite パラメータでスラッグを指定できます。
register_post_type( 'works', [
'label' => '実績',
'public' => true,
'rewrite' => [
'slug' => 'works',
'with_front' => false,
],
// ...
]);
with_front を false にすると、パーマリンク設定で指定したプレフィックス(例: /blog/)がカスタム投稿タイプのURLに付かなくなります。
with_front | 結果 |
|---|---|
true(デフォルト) | /blog/works/記事スラッグ/ |
false | /works/記事スラッグ/ |
カスタムタクソノミーのスラッグを変更する
カスタムタクソノミーも同様に、rewrite パラメータでスラッグを制御できます。
register_taxonomy( 'works_category', 'works', [
'label' => '実績カテゴリー',
'public' => true,
'rewrite' => [
'slug' => 'works/category',
'with_front' => false,
'hierarchical' => true,
],
]);
hierarchical を true にすると、親子関係のあるタームのURLに階層が反映されます(例: /works/category/親/子/)。
リライトルールのフラッシュを忘れずに
パーマリンクに関するコードを追加・変更したあとは、リライトルールのフラッシュが必要です。これを忘れるとURLが正しく動作しません。
一番手軽な方法は、管理画面の「設定 > パーマリンク」を開いて、何も変えずに「変更を保存」をクリックすることです。
コードで行う場合は flush_rewrite_rules() を使いますが、この関数はコストが高いため、init などで毎回実行するのは避けてください。テーマやプラグインの有効化時に一度だけ実行するのが適切です。
function my_theme_activate() {
// カスタム投稿タイプやタクソノミーの登録処理
custom_post_types();
flush_rewrite_rules();
}
add_action( 'after_switch_theme', 'my_theme_activate' );
よくあるトラブル
URLを変更したのに404になる
リライトルールがフラッシュされていない可能性が高いです。管理画面のパーマリンク設定を保存し直してみてください。
パーマリンクの変更が反映されない
キャッシュプラグインを使っている場合は、キャッシュのクリアも必要です。また、.htaccess のパーミッションが書き込み不可になっていると、リライトルールが保存できないことがあります。
本番環境で突然404になった
サーバー移行やドメイン変更のあとに起きやすいトラブルです。.htaccess が正しく生成されているか確認し、パーマリンク設定を保存し直してください。
関連記事
WordPressのクエリを正しく扱う ― pre_get_postsの仕組みと使い分け
WordPressのメインクエリを安全にカスタマイズするpre_get_postsの仕組みと使い方を解説します。query_postsが非推奨とされる理由や、WP_Queryとの使い分けなど、WordPress開発で押さえておきたいクエリの基本を整理します。
WebサイトにWordPressを導入すべきかどうかを決めるポイント
WordPressの導入を検討している企業や個人事業主向けに、その必要性を判断するためのポイントを解説します。更新頻度、セキュリティリスク、運用コストなどを踏まえ、WordPress以外の選択肢もあわせて紹介します。
サーバー選びでお悩みですか?ビジネスで利用するならエックスサーバービジネスがおすすめ
ビジネス利用に最適なレンタルサーバー選びのポイントを解説。運用実績、安定性、価格、サポート、SSLの5つの観点と、実際に業務で使っている立場からエックスサーバービジネスをおすすめする理由を紹介します。