カスタム投稿タイプのパーマリンクを数字ベース(投稿ID)に変更する方法

カスタム投稿タイプのパーマリンクを数字ベース(投稿ID)に変更する方法

カスタム投稿タイプのパーマリンクを数字ベース(投稿ID)に変更する方法

WordPressでカスタム投稿タイプのパーマリンクを数字ベースに変更する方法をご紹介いたします。

カスタム投稿タイプのデフォルトのパーマリンク設定は”投稿名”になっています。パーマリンク設定を投稿名以外にしたい場合、プラグインを使っても良いですが、functions.phpに少し追記するだけで簡単に変更可能です。

カスタム投稿タイプの追加

まずは、カスタム投稿タイプを追加します。今回は「book」というカスタム投稿タイプを追加しました。

※カスタム投稿タイプの追加方法については、「プラグインを使わずにカスタム投稿やカスタムタクソノミーを追加する方法」をご参照ください。

function add_custom_post_type() {
  $args = array(
    'label' => 'ブック',
    'hierarchical' => false,
    'public' => true,
    'menu_position' => 5,
    'has_archive' => true,
    'show_in_rest' => true,
    'rewrite' => array('with_front' => false),
    'supports' => array(
      'title',
      'editor',
      'thumbnail'
    )
  );
  register_post_type( 'book', $args );
}
add_action( 'init', 'add_custom_post_type' );

ハイライトしていますが、上記の中で「’rewrite’ => array(‘with_front’ => false)」は必須です。これを入れておかないと、後述するコードが正常に機能しない可能性があります。

なお、with_frontをfalseにするとデフォルトのパーマリンクに設定されているarchivesなどの文字列が除外されます。with_frontについては、フラップイズムさんの記事がわかりやすかったです。一部抜粋いたします。

例えば、「設定」→「パーマリンク設定」にてカスタム構造を選択し、「/blog/%post_id%/」と設定した場合、全ての記事に「/blog」というURLがつくことになるわけですが、その値を格納しているのがWP_Rewriteの$frontです。
つまり、これが「true」になっていて、カスタム構造を選択し、「/blog/%post_id%/」と設定すると、「add_permastruct」にて「/%blog%/%post_id%/」と設定していても、「/blog/%blog%/%post_id%/」と解釈されてしまいます。
混乱が起きるのを防ぐためにも、「false」に設定することをお勧めします。

フラップイズム

カスタム投稿タイプのパーマリンクを数字ベース(投稿ID)に変更する方法

「book」というカスタム投稿タイプを追加している場合、以下のコードをfunctions.phpに追加します。

function book_post_type_link( $link, $post ){
  if ( $post->post_type === 'book' ) {
    return home_url( '/book/' . $post->ID );
  } else {
    return $link;
  }
}
add_filter( 'post_type_link', 'book_post_type_link', 1, 2 );

function book_rewrite_rules_array( $rules ) {
  $new_rewrite_rules = array( 
    'book/([0-9]+)/?$' => 'index.php?post_type=book&p=$matches[1]',
  );
  return $new_rewrite_rules + $rules;
}
add_filter( 'rewrite_rules_array', 'book_rewrite_rules_array' );

「book」となっているところを適宜変更してください。

上記コードをfunctions.phpに追加することで、カスタム投稿タイプのパーマリンクが数字ベースに変更されます。投稿IDが128の場合は、「https://example.com/book/128」がカスタム投稿のURLになります。

あとがき

パーマリンクが数字ベースだとURLがスッキリしますね。

functions.phpは触りたくないなーという場合は、「Custom Post Type Permalinks」や「Simple Post Type Permalinks」等のプラグインが便利です。

この記事が気に入ったら
いいね!してね♪

Twitter で

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です