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

WordPressでカスタム投稿タイプのパーマリンクをカスタマイズする方法を説明します。 news などのカスタム投稿タイプのパーマリンクを 投稿IDベース に変更する手順を記載します。


1. 目的と実装概要

通常、カスタム投稿タイプのパーマリンクはスラッグ (/news/sample-post/) になっています。 これを 投稿IDベース (/news/123/) に変更します。

実装内容

  1. post_type_link フィルターを利用して、news のパーマリンクを投稿IDベースに変更
  2. rewrite_rules_array を使ってリライトルールを追加し、投稿IDのURLを適切に処理
  3. 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. 実装後の確認方法

  1. WordPressの管理画面から 「設定」→「パーマリンク設定」 に移動し、「変更を保存」ボタンをクリック。
  2. https://example.com/news/123/ にアクセスし、正常に表示されるか確認。

4. まとめ

この方法を適用することで、news のカスタム投稿タイプのパーマリンクを 投稿IDベース に変更できます。

実装のポイント

  • post_type_link フィルターで投稿のURLをカスタマイズ
  • rewrite_rules_array で投稿IDを適切に取得できるように調整
  • flush_rewrite_rules でリライトルールを適用

カスタム投稿タイプのパーマリンクを投稿IDベースに変更する場合に活用できます。

コメント

タイトルとURLをコピーしました