目次
目次

仕様変更Ver.2.14.1→3.0.0

リリースメモ
この記事は約23分で読めます。
記事内に広告が含まれています。
目次

【件名】sitemapショートコードのリンク名が投稿タイトルと異なる

現象

sitemapショートコード(投稿一覧)において、記事タイトルが「2026年4月」などの年月形式である場合、意図せず「2026-04」と変換されて表示されてしまう。

原因

投稿一覧の取得に wp_get_archives('type=alpha')が使用されている。

「アーカイブウィジェット」の表記を「yyyy-mm」形式に統一するためにget_archives_linkフィルターを用い、文字列を変換している。
このため、wp_get_archives使用しているショートコード側にも適用されてしまう。

対策

debug_backtrace利用して呼び出し元がWP_Widget_Archivesクラスであるかを判定し、アーカイブリンクの表示形式を「yyyy-mm」形式に変換する。

add_filter('get_archives_link', function ($html, $url, $text, $format, $before, $after, $selected) {
  $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
  $is_widget = false;

  foreach ($backtrace as $step) {
    if (isset($step['class']) && $step['class'] === 'WP_Widget_Archives') {
      $is_widget = true;
      break;
    }
  }

  // 呼び出し元が「アーカイブ」ウィジェットの場合
  if ($is_widget) {
    $html = preg_replace_callback('/(\d+)年(\d+)月/', function ($matches) {
      return $matches[1] . '-' . str_pad($matches[2], 2, '0', STR_PAD_LEFT);
    }, $html);
  }

  return $html;
}, 10, 7);

変更一覧

パスファイル名
/skin-made-in-heaven/lib/hook-wp.php
タイトルとURLをコピーしました