WordPressで記事アーカイブURLに「blog」をつける・その2

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

なんと前回の方法ではアーカイブリストに「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を書き換える感じのようです。
これでうまく動くようになりました。

今回は以上です!