【WordPress】カスタム投稿タイプのパーマリンクを投稿IDに変更する
※本ページのリンクにはプロモーションが含まれています。
こんにちは、Ryohei(@ityryohei)です!
本記事では、WordPress でカスタム投稿タイプのパーマリンクを投稿IDに変更する方法をご紹介しています。プラグインではなく、functions.php ファイルを使用してカスタム投稿タイプのパーマリンクをフィルターする方法を解説しています。固定ページなどでは投稿名を使用したいけれど、カスタム投稿タイプでは投稿IDに変更したいというケースで役立ちます。
WordPressでカスタム投稿タイプのパーマリンクを投稿IDに変更したいんだけど、良い方法はないかな?
上記の疑問にお答えします。
では、解説してきます。カスタム投稿タイプのパーマリンクを変更するには
以下のフィルターフックを使用します。
- post_type_link
- rewrite_rules_array
post_type_link
post_type_link
は、WordPressプラグインやテーマの開発者が使用するフィルターフックの1つです。パーマリンク構造をカスタマイズする際に使用されます。
WordPressでは、投稿やページ、カスタム投稿タイプなどの各投稿タイプに対して一意のパーマリンクが生成されます。post_type_link
フィルターフックを使用すると、これらの投稿タイプごとに異なるパーマリンクの生成方法を定義することができます。
rewrite_rules_array
rewrite_rules_array
は、WordPress の内部的なリライトルールをカスタマイズするためのフィルターフックです。このフックを使用すると、WordPress がパーマリンクを解決する際に使用されるルールセットを変更できます。
WordPressでは、ユーザーが設定したパーマリンク構造に基づいて、URL を解析して対応するコンテンツを表示します。この処理は、リライトルールと呼ばれる一連のパターンとそれに対応する処理によって行われます。
rewrite_rules_array
フィルターフックを使用すると、これらのリライトルールセットをカスタマイズできます。具体的には、このフックを使用して、特定のパターンのリライトルールを追加、変更、削除したり、カスタムのリライトルールを定義したりすることができます。
post_type_link
と rewrite_rules_array
のフィルターフックを組み合わせることで、WordPress のパーマリンク構造を柔軟にカスタマイズすることが可能となります。これらを利用することで、カスタム投稿タイプのパーマリンクを投稿IDに変更することができます。
カスタム投稿タイプのパーマリンクを投稿IDに変更する
以下は、カスタム投稿タイプのパーマリンクを投稿IDに変更するサンプルです。このコードを functions.php ファイルに追加すると動作します。サンプルでは、カスタム投稿タイプ(news)のパーマリンクを投稿IDに変更してリライトしています。実際にパーマリンクを変更するカスタム投稿タイプ名に置き換えてご利用ください。
// カスタム投稿タイプのパーマリンクの初期値を投稿IDに変更する function my_post_type_link($post_link, $post) { // ニュース if($post->post_type === 'news') { return home_url('/news/'.$post->ID.'/'); } return $post_link; } add_filter('post_type_link', 'my_post_type_link', 10, 2); // パーマリンクのリライトルールを追加する function my_rewrite_rules_array($rules) { $add_rules = array( 'news/([0-9]+)/?$' => 'index.php?post_type=news&p=$matches[1]', ); return $add_rules + $rules; } add_filter('rewrite_rules_array', 'my_rewrite_rules_array');
my_rewrite_rules_array
関数では、新しいルールを既存のルールの前に追加して値を返します。リライトルールの配列は先頭から適用されるため、追加したルールが優先されるようになっています。
上記のサンプルでは、1つのカスタム投稿タイプを指定していますが、複数のカスタム投稿タイプのパーマリンクを変更することも可能です。例えば、ニュース(news)と採用情報(recruit)のカスタム投稿タイプのパーマリンクを投稿IDに変更してみます。
// カスタム投稿タイプのパーマリンクの初期値を投稿IDに変更する function my_post_type_link($post_link, $post) { // ニュース if($post->post_type === 'news') { return home_url('/news/'.$post->ID.'/'); } // 採用情報 if($post->post_type === 'recruit') { return home_url('/recruit/'.$post->ID.'/'); } return $post_link; } add_filter('post_type_link', 'my_post_type_link', 10, 2); // パーマリンクのリライトルールを追加する function my_rewrite_rules_array($rules) { $add_rules = array( // ニュース 'news/([0-9]+)/?$' => 'index.php?post_type=news&p=$matches[1]', // 採用情報 'recruit/([0-9]+)/?$' => 'index.php?post_type=recruit&p=$matches[1]', ); return $add_rules + $rules; } add_filter('rewrite_rules_array', 'my_rewrite_rules_array');
これでカスタム投稿タイプのパーマリンクを投稿IDに変更することができました。
最後に
本記事では、WordPressのpost_type_link
と rewrite_rules_array
のフィルターフックを使って、カスタム投稿タイプのパーマリンクを投稿IDに変更する方法を解説しました。
2つのフィルターフックを組み合わせることで、WordPressのパーマリンク構造を柔軟にカスタマイズし、特定のURL対する処理を定義することが可能になります。パーマリンク構造のカスタマイズはサイト規模が大きくなるほど重要になりますので、post_type_link
と rewrite_rules_array
のフィルターフックの使い方を覚えておいてくださいね。
以上、WordPressでカスタム投稿タイプのパーマリンクを投稿IDに変更する方法のご紹介でした!