"投稿"のパーマリンクだけカスタマイズ:/news/%post_id%にする

- WordPress -
2021.01.02
WordPress/ワードプレス

CPT UI等で作ったカスタム投稿タイプの記事ページのパーマリンクに影響を与えないように、デフォルトで存在する投稿の記事ページのパーマリンクだけをカスタマイズしたい...

と思ったのですが、ちょっと苦労したのでメモしておきます。

具体的に実現したかったことは以下で、「赤下線部をどう実現するか」というのが問題でした。

  • 投稿ページのパーマリンク:https://xx.com/news/%post_id%
    例) https://xxx.com/news/14
  • カスタム投稿ページのパーマリンク:https://xx.com/product/%post_id%
    例) https://xxx.com/product/23

これは単純に考えると、WordPress管理画面 > 設定 > パーマリンク設定 で以下のようにすれば解決!と思いがちですが、

投稿のパーマリンクだけ変更

こうすると上記例にあるカスタム投稿(product)ページのパーマリンクもつられて

https://xxx.com/news/product/23

となってしまってダメなのでした。

なんとしても、他のカスタム投稿タイプのパーマリンクには影響を与えずに修正したい。そんな時の方法です。

"投稿"ページのパーマリンクだけカスタマイズする

以下2ステップです。

  1. functions.phpにコードを追記
  2. 管理画面からパーマリンクの設定を変更

1. functions.phpにコードを追記

WordPressテーマフォルダ内のfunctions.phpの中に以下コードをコピペして、

  • 3行目、11行目の「xxx」部分を希望する文字列に書き換える
functions.php// 投稿ページのパーマリンクをカスタマイズ
function add_article_post_permalink( $permalink ) {
    $permalink = '/xxx' . $permalink;
    return $permalink;
}
add_filter( 'pre_post_link', 'add_article_post_permalink' );
 
function add_article_post_rewrite_rules( $post_rewrite ) {
    $return_rule = array();
    foreach ( $post_rewrite as $regex => $rewrite ) {
        $return_rule['xxx/' . $regex] = $rewrite;
    }
    return $return_rule;
}
add_filter( 'post_rewrite_rules', 'add_article_post_rewrite_rules' );

参考サイトSimple Colorさん:投稿の個別ページのみパーマリンクを変更する方法

このコードを保存した時点で、投稿のパーマリンクに以下のようなビフォーアフターが起きています。

投稿のパーマリンクだけ変更

BEFORE

投稿のパーマリンクだけカスタマイズ

AFTER

2. 管理画面からパーマリンクの設定を変更

あとはWordPress管理画面 > 設定 > パーマリンク設定 をいじるだけなのですが...

【注意】末尾を %post_id% にしたい時

正しく動作する設定は以下です。

投稿のパーマリンクだけカスタマイズ

「カスタム構造」を選択

これで、/news/%post_id%のパーマリンクが実現できました。

投稿のパーマリンクだけカスタマイズ

一方、パーマリンクが以下の形式では正常に動作しない点に注意しましょう。

投稿のパーマリンクだけカスタマイズ

「基本」だとおかしくなるのでNG

どうダメになるかというと、投稿記事の全てのパーマリンクが以下のようになってしまいました。僕はここで15分ほど「なんぞこれ!?」とハマりました。

投稿のパーマリンクだけカスタマイズ

URLにアクセスするとエラーになってしまい記事が表示されません。

/xxx/%postnameにしたい時

/news/about-our-close-hourのようにしたいときは以下のようにします。

投稿のパーマリンクだけカスタマイズ

「投稿名」を選択するだけ

最後に、カスタム投稿タイプのパーマリンクに影響を与えていないか確認

ここまで加えてきた変更は、すべてデフォルトで存在する"投稿"ページのパーマリンクにのみ影響があります。

最後にカスタム投稿タイプの記事ページのパーマリンクを確認して、問題なければ完了!

例)
https://xxx.com/product/23 が https://xxx.com/news/product/23 などになっていないこと

おまけ:カスタム投稿タイプのパーマリンクカスタマイズ

冒頭で、カスタム投稿タイプのパーマリンクを以下のようにしたいとサラッと書きましたが、

  • カスタム投稿"商品"ページのパーマリンク:https://xxx.com/product/%post_id%
    例) https://xxx.com/product/23

上記赤下線のようにカスタム投稿タイプのパーマリンク末尾を %post_id% に変えたい時なども別でカスタマイズが必要です。

Custom Post Type Permalinksというプラグインをインストール・有効化すると、パーマリンク設定変更ページに以下のような欄が出現します。

カスタム投稿タイプのパーマリンク

カスタム投稿タイプ1つずつのパーマリンクを柔軟に変更できるので、併せて知っておくと便利です。

↑TOP