WordPressの「投稿」アーカイブページURLをカスタマイズする

当サイトは、有料WordPressテーマ(テンプレート)のTHE THOR(ザ・トール)を用いて制作しています。ブログサイトとしてももちろん運用していますが、事業用のサイトも兼ねて運用しているので、どうしても、デフォルトの「投稿」を任意の名称かつ、任意のURLに変更したかったのです。

特にTHE THORに限った話ではありませんが、WordPressのデフォルトの「投稿」を任意のURL・名称に変えるTIPSはあるにはあったのですが、ちょっとつまづいたところがあったので、備忘録として、投稿しておきます。

広告

目指したい形

まず、WordPressのアーカイブURLは、(テーマがTHE THORか、そうでないかによらず)デフォルトでは…

■TOPページ(アーカイブページを兼ねる)
https://○○○(ドメイン)

■投稿詳細ページ
https://○○○(ドメイン)/記事パーマリンク(スラッグ)/

に、なっています。
これを、以下のように変えたい。

■投稿アーカイブページ
https://○○○(ドメイン)/blog/

■投稿詳細ページ
https://○○○(ドメイン)/blog/記事パーマリンク(スラッグ)/

「投稿」のアーカイブURLをつくる

デフォルトで用意されている「投稿(post_type=’post’)」は、初期状態では、TOPページとは別の、独立したアーカイブURLが存在しません。
ので、まずこれを有効にします。テーマのfunctions.phpにこんな感じで書きます。

function post_has_archive( $args, $post_type ) {

if ( 'post' == $post_type ) {
 $args['rewrite'] = true;
 $args['has_archive'] = 'blog'; //任意のスラッグ名 ←アーカイブページを有効に
 $args['label'] = 'TECHブログ'; //管理画面左ナビに「投稿」の代わりに表示される
 }
 return $args;

}
add_filter( 'register_post_type_args', 'post_has_archive', 10, 2 );

これを書いて保存すると、とりあえず
https://○○○(ドメイン)/blog/
が、「投稿」のアーカイブページになります。

ただし、内部構造的には、まだ投稿詳細ページのURLは
https://○○○(ドメイン)/記事パーマリンク(スラッグ)/
のままです。

「投稿」の内部構造を変える

次に、先ほど作成した「投稿」のアーカイブページURLに、内部構造を合わせていきます。
続いて、functions.phpに下記を追記します。

add_filter( 'post_type_archive_link', function( $link, $post_type ) {
 if ( 'post' === $post_type ) {
 $post_type_object = get_post_type_object( 'post' );
 $slug = $post_type_object->has_archive;
 $link = get_home_url( null, '/' . $slug . '/' );
 }
 return $link;
}, 10, 2 );

function add_article_post_permalink( $permalink ) {

$permalink = '/blog' . $permalink; //「blog」は任意のものに変えて下さい。
 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; //「blog」は任意のものに変えて下さい。
 }

return $return_rule;
}
add_filter( 'post_rewrite_rules', 'add_article_post_rewrite_rules' );

これを追記して保存したら、管理画面の「設定」>「パーマリンク設定」を開き、特に何も変更せずにページの一番下にある「変更を保存」をクリックします。

以上で、内部構造が
https://○○○(ドメイン)/blog/の配下に変更されます。

ちなみに、この内部構造の変更は管理画面の「外観」>「メニュー」で作成された「投稿タイプアーカイブ」やパンくずリストにも引き継がれます。内部構造を変更しないと、グローバルナビゲーションやパンくずリストのURLが以前のままです。

まとめ

最終的に、functions.phpへの記載は下記のようになりました。

function post_has_archive( $args, $post_type ) {

if ( 'post' == $post_type ) {
 $args['rewrite'] = true;
 $args['has_archive'] = 'blog'; //任意のスラッグ名 ←アーカイブページを有効に
 $args['label'] = 'TECHブログ'; //管理画面左ナビに「投稿」の代わりに表示される
 }
 return $args;

}
add_filter( 'register_post_type_args', 'post_has_archive', 10, 2 );

add_filter( 'post_type_archive_link', function( $link, $post_type ) {
 if ( 'post' === $post_type ) {
 $post_type_object = get_post_type_object( 'post' );
 $slug = $post_type_object->has_archive;
 $link = get_home_url( null, '/' . $slug . '/' );
 }
 return $link;
}, 10, 2 );

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' );

ここまでご覧くださった方、ありがとうございました。

お問い合わせ

記事の感想・不明点・リクエストやWEBサイト制作の困りごとなど、お気軽にお寄せ下さい。

お問い合わせ

広告
Fundemicの最新情報

Fundemicの最新情報

FundemicのFacebookページでは、
制作実績とTECHブログの最新情報を掲載しております。

CTR IMG