WordPressで記事アーカイブURLに「blog」をつける・その2
2024.10.04 09:00
2024.10.04 10:42

なんと前回の方法ではアーカイブリストに「blog」とつけられないことが判明しました。アーカイブの個別記事にはつくのですが、カスタム投稿で「blog」とすると、その設定とぶつかるようです。
しかし更に調べると、function.phpをいじることで
これに対応できるようでした!
こちらのFundemicさんの記事がめちゃくちゃ参考になったので
引用させて頂き、実際にやってみました。
https://fundemic.jp/blog/the-tohr-archive/
実際のコードはこんな感じ
/**
* archive.phpを有効にする
*/
function post_has_archive( $args, $post_type ) {
if ( 'post' == $post_type ) {
$args['rewrite'] = true;
$args['has_archive'] = 'blog'; // ここを変えたいスラッグ名にする
$args['label'] = 'ブログ記事'; // 管理画面の左メニューの表示
}
return $args;
}
add_filter( 'register_post_type_args', 'post_has_archive', 10, 2 );
/**
* アーカイブページURLをカスタマイズ
*/
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' );
こんな感じです。かなり長いですね。
パーマリンク側のURLを書き換える感じのようです。
これでうまく動くようになりました。
今回は以上です!