WordPressで通常使用する「投稿」のURL(パーマリンク設定)は、ダッシュボードの「設定 > パーマリンク設定」で設定・変更が可能です。
しかし、カスタム投稿タイプのURLは、ダッシュボードからは設定・変更ができません。
「Custom Post Type Permalinks」というプラグインを使用すれば、手軽に変更もできるようですが、今回はプラグインを使わず、「register_post_type関数」で実装しましたので、その方法をご紹介します。
functions.phpに記述するコード
まずは、実際に使用したコードを記載しておきます。
※カスタム投稿タイプで「お知らせ(news)」と「日記(diary)」を作成し、それぞれに対応したタクソノミー(カテゴリー、タグ)を追加しています。
function init_func() { //カスタム投稿、カテゴリ、タグを追加 register_post_type('news', [ 'labels' => [ 'name' => 'お知らせ', ], 'public' => true, 'has_archive' => true, 'hierarchical' => false, 'rewrite' => array('with_front' => false), 'menu_position' => 5, 'menu_icon' => 'dashicons-welcome-write-blog', 'supports' => array('title', 'editor', 'thumbnail') ]); register_taxonomy('news-cat', 'news', [ 'label' => 'カテゴリー', 'hierarchical' => true, ]); register_taxonomy('news-tag', 'news', [ 'label' => 'タグ', 'hierarchical' => false, ]); } add_action('init', 'init_func'); /*カスタム投稿のパーマリンクをpostIDに*/ add_filter('post_type_link', 'generateCustomPostLink', 1, 2); add_filter('rewrite_rules_array', 'addRewriteRules'); function generateCustomPostLink($link, $post){ if($post->post_type === 'news'){ // 投稿IDに書き換えたパーマリンク文字列を返す return home_url('/news/'.$post->ID); } else { return $link; } } function addRewriteRules($rules){ // 書き換えたパーマリンクに対応したクエリルールを追加 $new_rule = array( 'news/([0-9]+)/?$' => 'index.php?post_type=mynews&p=$matches[1]' ); // ルール配列に結合 return $new_rule + $rules; }
カスタム投稿タイプのパーマリンク設定
カスタム投稿タイプのURLは、デフォルトでは、「ドメイン/【投稿タイプ名】/【投稿タイトル】」となります。
例)https://abc.com/news/タイトル
そこで、「register_post_type関数」を使用して、パーマリンクに投稿IDを設定するために、functions.phpに下記のコードを記述します。
add_filter('post_type_link', 'generateCustomPostLink', 1, 2); add_filter('rewrite_rules_array', 'addRewriteRules'); function generateCustomPostLink($link, $post){ if($post->post_type === 'news'){ // 投稿IDに書き換えたパーマリンク文字列を返す return home_url('/news/'.$post->ID); } else { return $link; } } function addRewriteRules($rules){ // 書き換えたパーマリンクに対応したクエリルールを追加 $new_rule = array( 'news/([0-9]+)/?$' => 'index.php?post_type=mynews&p=$matches[1]' ); // ルール配列に結合 return $new_rule + $rules; }
最後に、ダッシュボードのパーマリンクで、変更を保存しましょう。
※これを忘れると、functions.phpの記述が正しくても、上手く反映されないことがあります。
今回のパーマリンク設定を行うにあたって、参考にさせていただいたのは、下記の記事です。