大阪から日本全国のご依頼に対応。WEBサイト制作ならアトリエ涼。

お知らせ/ブログ

※当サイトは、アフェリエイト広告を利用しています。

2024.03.04

制作メモ

【WordPress】投稿アーカイブを任意のスラッグ・名称にする方法

【WordPress】投稿アーカイブを任意のスラッグ・名称にする方法

記事一覧ページを作成する際、デフォルトのスラッグ「post」や名称「投稿」を変更したいことって多いですよね。
その際のやり方をご紹介する制作メモになります。

functions.phpに追加

functions.phpに関数を追加して、ファイルをアップロードします。
その後、「設定/パーマリンク」を開き、何も変更せず「変更を保存ボタン」を押して完了といった流れになります。

functions.php

// お知らせ設定
function post_has_archive($args, $post_type)
{
  if ('post' == $post_type) {
    $args['rewrite'] = true;
    $args['has_archive'] = 'news';
    $args['labels'] = array(
      'name' => 'お知らせ'
    );
  }
  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 = '/news' . $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['news/' . $regex] = $rewrite;
  }
  return $return_rule;
}
add_filter('post_rewrite_rules', 'add_article_post_rewrite_rules');

上記を使用していただければと思います。
詳細を説明していきますね。

記事一覧ページのURL・名称を変更

まず最初に、記事一覧ページのスラッグと名称を変更する記述を追加します。

// お知らせ設定
function post_has_archive($args, $post_type)
{
  if ('post' == $post_type) {
    $args['rewrite'] = true;
    $args['has_archive'] = 'news';
    $args['labels'] = array(
      'name' => 'お知らせ'
    );
  }
  return $args;
}
add_filter('register_post_type_args', 'post_has_archive', 10, 2);

スラッグを「news」、名称を「お知らせ」に変更する設定にしていますが、
任意のものに置き換えていただければと思います。
名称の変更の必要がなければ、$args[‘labels’]部分の項目は省いていただいて大丈夫です。

投稿詳細ページのパーマリンクを変更する

// お知らせ設定 パーマリンク変更
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 = '/news' . $permalink;
  return $permalink;
}
add_filter('pre_post_link', 'add_article_post_permalink');

先ほどの記述で投稿一覧ページのURLは「https://ドメイン/news/」となっていますが、
内部構造的に投稿詳細ページのURLは「https://ドメイン/記事のパーマリンク(スラッグ)/」のままとなっています。
詳細ページの親スラッグを追加したい場合、上記を記述します。
下の方の「$permalink = ‘/news’ . $permalink;」の「news」は任意のスラッグに変更してください。

リライトルールを変更する

// お知らせ設定 リライトルール変更
function add_article_post_rewrite_rules($post_rewrite)
{
  $return_rule = array();
  foreach ($post_rewrite as $regex => $rewrite) {
    $return_rule['news/' . $regex] = $rewrite;
  }
  return $return_rule;
}
add_filter('post_rewrite_rules', 'add_article_post_rewrite_rules');

さらに、リライトルールの記述を追加して、詳細ページのパーマリンクを変更したことを伝えます。
こちらも「$return_rule[‘news/’ . $regex] = $rewrite;」部分の「news」は任意のスラッグに変更してください。

その後、必ず「設定/パーマリンク」を開き、何も変更せず「変更を保存ボタン」を押してください。
この作業を行わないと反映されないので気をつけていただければと思います。
以上になります。少しでも参考になれば幸いです。