『投稿』タイプの個別ページのパーマリンクに任意の文字列を追加する方法

69Thumb

タイトルだけだと内容が伝わりづらいかもしれません。
投稿記事のURLを『ドメイン/%postname%/』等にしている際に、『/%postname%/』の前に任意の文字列を追加する方法です。

その際に上手くいかなかった点があるので、メモしておきます。

タイトルの補足

まだ説明が足りないかもしれないので、補足。

投稿記事のURLに文字列を追加するというのは、このサイトだと『http://jukelog.com/%postname%/』という設定になっているところに『blog』という文字列を追加して『http://jukelog.com/blog/%postname%/』というURLにするということです。

単純にパーマリンク設定を『/blog/%postname%/』にすればいいかと思うかもしれませんが、そうするとカスタム投稿タイプがあった場合そのURLにも全部『blog』が追加されてしまいます

このサイトだとカスタム投稿タイプ『bookmarks』ページもあるので、『http://jukelog.com/blog/bookmarks/』になります。

(ちなみに『/blog/%postname%/』にしても固定ページのURLには影響しない。)

そういった際に投稿タイプの個別ページのURLにだけ文字列を追加する方法についてです。

こちらの記事を参考にさせてもらいました。
具体的な説明は参照記事の方でご確認ください。

下記コードをfunctions.phpに記述します。

2箇所で追加する文字列(ここでは『blog』)を指定しています。

function add_article_post_permalink( $permalink ) {
    $permalink = '/blog' . $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['blog/' . $regex] = $rewrite;
    }
    return $return_rule;
}
add_filter( 'post_rewrite_rules', 'add_article_post_rewrite_rules' );

注意点

上記コードを追記しただけでは、変更は反映されません。
functions.phpで『ファイルを更新』後、【設定】→【パーマリンク設定】も(何も変更していなくても)『変更を保存』をクリックします

これで、変更が反映されます。
(参照記事下部にも『リライトルールを更新』とあったんですが、最初読み飛ばしてしまってました。)

具体的なケースは忘れましたが、前にパーマリンク関係のプラグインでもこの過程を抜いたため、設定が反映されずつまづいた事がありました。
カスタム投稿タイプを新たに登録した場合も、パーマリンク設定を更新する必要がありますね。

パーマリンク関係の設定が上手く反映されない場合は、設定を保存し直すといいかもしれません。

また、これは直接今回の修正に関係ありませんが、URLを変更したら、Redirectionなどのプラグインで301リダイレクトの設定もした方がいいでしょう。