Wordpressのカスタム投稿記事のURLを自由に変更する方法
追加したカスタム投稿記事は、管理画面のパーマリンクではURLを変更する事ができません。
カスタム投稿タイプの名称とは別に、追加時にslug名を変更する事で自由なディレクトリ名をつける事ができます。
末尾部分は、custom-post-type-permalinksプラグインで投稿idなどに変更する事ができます。
カスタム投稿記事のURLを変更したい
今回はWordpressのカスタム投稿記事のURLを自由にカスタマイズする方法です。
通常の投稿記事であれば、管理画面の設定からパーマリンクの欄でカスタマイズができます。
番号を入れたり日付を入れたりと、URLを自由に変更する事ができる訳です。
ただしこの設定は通常の投稿記事のみに適用され、自分で追加したカスタム投稿記事には反映されません。
そこでプラグインやfunctions.phpを使って、カスタム投稿記事のURLを変更してきます。
変更する部分
通常、カスタム投稿タイプを追加した場合、以下の様なURLになる事が多いです。
http://lpeg.info/カスタム投稿タイプ名/記事タイトル
末尾を投稿idに変更する
ますは末尾となる「記事タイトル」の部分を、投稿id(post_id)に変更します。
これによりid番号が表示される訳ですね。
タイトルや日付が付くよりも、投稿idの方がスマートと言えるでしょう。
カスタム投稿タイプ名も変更できる
さらに「カスタム投稿タイプ名」の部分も自由に変更できる様にします。
カスタム投稿の追加時に設定する「名称=ディレクトリ名」と考える必要は無いという事ですね。
後から変更しない様に
この設定はできるだけサイト開設前に済ませる様にしましょう。
もちろんこの設定をする事でいつでもURL変更はできますが、すでに元のURLが検索サイトにインデックスされていると厄介です。
SEOの面で不利になる
GoogleやYahooが認識しているページのURLを突然変更すると、ページが消えたと判断される場合があります。
URLが変わった事を検索サイト側に打診・認識しないと、検索順位が落ちる事になります。
すでに大量にカスタム投稿記事を入れている場合、いくらリダイレクトする方法があるとはいえリスクがありますよね。
できるだけ最初に変更しておきたいものです。
custom_type部分のURLを変更する
ではまず、カスタム投稿タイプ名(custom_type)のURLを変更していきます。
まずは大元となる、カスタム投稿タイプの追加例を紹介します。
カスタム投稿タイプを追加するコード
今回はfunctions.phpに記述しています。
もちろんCustom Post Type UI等のプラグインを使って追加をしても構いません。
functions.php内の記述例
// カスタム投稿タイプの追加 add_action( 'init', 'create_post_type' ); function create_post_type() { register_post_type( 'myblog', array( 'label' => 'ブログ', 'public' => true, 'has_archive' => true, 'show_in_rest' => true, 'menu_position' => 7, 'rewrite' => array('slug' => 'blog', 'with_front' => false), 'supports' => array( 'title', 'editor', 'thumbnail', 'revisions', ), ) ); }
custom_type部分を自由な名称に変える
ポイントは以下の部分です。
'rewrite' => array('slug' => 'blog', 'with_front' => false),
追加したカスタム投稿タイプの名称は「myblog」としているのですが、これを書き換え可能にする記述です。
スラッグ名を「blog」とする事によって、URL部分を/blog/にできる訳ですね。
これによりURLのディレクトリ名が以下の様にが変わります。
変更前
https://lpeg.info/カスタム投稿タイプ名/記事タイトル
変更後
https://lpeg.info/blog/記事タイトル
末尾を投稿idに変更する
次は末尾の部分を投稿idに変更する方法です。
custom-post-type-permalinksプラグイン
まずはプラグインを使った方法から紹介します。
使うプラグインは「custom-post-type-permalinks」です。
プラグインの新規追加画面でプラグイン名を検索し、インストール・有効化をしておいて下さい。
プラグインが使える様になったら、管理画面の設定からパーマリンクのページを開きましょう。
パーマリンクページ
画面下の方にカスタム投稿タイプ向けの欄があります。
custom_type欄は先程の設定が済んでいれば、myblogではなく「blog」になっているはずですので確認しましょう。
その上で末尾部分が「post_id」になっているはずです。
この状態で良ければ、一番下にある「変更を保存」ボタンを押します。
これで末尾部分に投稿idとなる数字が付くようになりました。
functions.phpを使った末尾変更
次はfunctions.phpに記述する方法です。
先程のcustom-post-type-permalinksプラグインが入っている場合は、バッティングしない様に有効化を解除する等しておいて下さい。
functions.phpの記述
// カスタム投稿のURLを「blog/post_id/」にする function myblog_post_type_link( $link, $post ){ if ( $post->post_type === 'myblog' ) { return home_url( '/blog/' . $post->ID . '/' ); } else { return $link; } } add_filter( 'post_type_link', 'myblog_post_type_link', 1, 2 ); // カスタム投稿URLのクエリによる名前解決 function myblog_rewrite_rules_array( $rules ) { $new_rewrite_rules = array( 'blog/([0-9]+)/?$' => 'index.php?post_type=blog&p=$matches[1]', ); return $new_rewrite_rules + $rules; } add_filter( 'rewrite_rules_array', 'myblog_rewrite_rules_array' );
この様に記述する事でも、カスタム投稿タイプ名や末尾部分を変更する事が可能です。
上記コードの赤文字部分で、ドメイン名/blog/post_id/を実現しています。
注意
ただこの方法を使った場合、カスタム投稿タイプの詳細ページが404エラーになる場合があります。
single-{カスタム投稿タイプ名}.phpが働かない場合があるのですね。
テーマや環境などにもよりますが「ページが見つかりません」と出る場合は、この記述は消しましょう。
そしてcustom-post-type-permalinksプラグインで、末尾を投稿idなどに変更する様にして下さい。