WordPressでカスタム投稿タイプのパーマリンクをカスタマイズする方法を説明します。 news
などのカスタム投稿タイプのパーマリンクを 投稿IDベース に変更する手順を記載します。
1. 目的と実装概要
通常、カスタム投稿タイプのパーマリンクはスラッグ (/news/sample-post/
) になっています。 これを 投稿IDベース (/news/123/
) に変更します。
実装内容
post_type_link
フィルターを利用して、news
のパーマリンクを投稿IDベースに変更rewrite_rules_array
を使ってリライトルールを追加し、投稿IDのURLを適切に処理flush_rewrite_rules
を実行してリライトルールを適用
2. 実装手順
① post_type_link でパーマリンクを変更
まず、post_type_link
フィルターを使って、news
のパーマリンクを news/{投稿ID}/
に変更します。
/**
* カスタム投稿タイプ news のパーマリンクを投稿IDベースに変更
*/
function custom_post_type_link($link, $post)
{
if (!is_object($post) || !isset($post->post_type)) {
return $link;
}
// news の場合は ID ベースのパーマリンクに変更
if ($post->post_type === 'news') {
return home_url('/news/' . $post->ID . '/');
}
return $link;
}
add_filter('post_type_link', 'custom_post_type_link', 10, 2);
② リライトルールを追加
次に、rewrite_rules_array
フィルターを使って、news/{投稿ID}/
のURLを正しく解釈するルールを追加します。
/**
* リライトルールの追加
*/
function custom_rewrite_rules_array($rules)
{
$new_rules = array(
'news/([0-9]+)/?$' => 'index.php?post_type=news&p=$matches[1]',
);
return $new_rules + $rules;
}
add_filter('rewrite_rules_array', 'custom_rewrite_rules_array');
③ リライトルールを適用
リライトルールを適用するために、flush_rewrite_rules()
を init
フックで実行します。
/**
* ルール変更を適用
*/
function custom_flush_rewrite_rules()
{
flush_rewrite_rules();
}
add_action('init', 'custom_flush_rewrite_rules', 99);
3. 実装後の確認方法
- WordPressの管理画面から 「設定」→「パーマリンク設定」 に移動し、「変更を保存」ボタンをクリック。
https://example.com/news/123/
にアクセスし、正常に表示されるか確認。
4. まとめ
この方法を適用することで、news
のカスタム投稿タイプのパーマリンクを 投稿IDベース に変更できます。
実装のポイント
post_type_link
フィルターで投稿のURLをカスタマイズrewrite_rules_array
で投稿IDを適切に取得できるように調整flush_rewrite_rules
でリライトルールを適用
カスタム投稿タイプのパーマリンクを投稿IDベースに変更する場合に活用できます。
コメント