日本語タイトルのスラッグが長すぎる?WordPressで自動的にpost-IDへ統一する方法

WordPress

WordPressで記事を作ると、日本語タイトルのときだけスラッグが長くなり、
URLが分かりにくくて困った経験はありませんか?手動で直すのは手間がかかり、
公開後に変更するとリンク切れの心配もあります。

この記事では、保存時に自動的に「post-ID形式の短いスラッグ」に変換する方法を紹介します。
functions.phpに短いコードを追加するだけで使えるため、初めての方でも安心です。

🔍 要点サマリー

  • 日本語タイトルは自動生成スラッグが冗長になりやすい
  • post-IDに統一するとURLが短くなり、重複や文字化けを防げる
  • save_postフックで保存処理の最後にスラッグを書き換えられる
  • 導入後は数件の投稿をテストするだけで安全性を確認できる

❗ なぜスラッグ正規化が必要なのか

日本語タイトルを含む記事を保存すると、WordPressはタイトルをもとにスラッグを生成します。しかし、日本語はURLエンコードされるため、非常に長く扱いにくいURLになります。公開後にスラッグを変更すると外部リンクが無効になることもあるため、保存時に自動でpost-IDへ統一しておくと運用が安定します。post-IDは一意の数値のため、重複の心配がありません。

🛠 実装方法(functions.phpに追加)

次のコードを子テーマのfunctions.phpに追加すると、保存時にスラッグを自動的にpost-ID形式へ置き換えられます。

// 保存時にスラッグを post-ID に統一する
add_action('save_post', 'normalize_post_slug_to_id', 20, 3);

function normalize_post_slug_to_id($post_id, $post, $update) {
  // 自動保存・リビジョンは除外
  if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) return;

  // ゴミ箱や不正データ、post以外は対象外
  if (!isset($post) || $post->post_status === 'trash' || $post->post_type !== 'post') return;

  // 現在のスラッグと置き換え先
  $slug = (string) $post->post_name;
  $target_slug = 'post-' . $post_id;

  // 空スラッグ or 日本語スラッグのみ更新
  $needs_update = $slug === '' || preg_match('/[^a-z0-9\\-_]/u', $slug);
  if (!$needs_update || $slug === $target_slug) return;

  // 一時的にフック停止 → 無限ループ防止
  remove_action('save_post', 'normalize_post_slug_to_id', 20);
  wp_update_post(['ID' => $post_id, 'post_name' => $target_slug]);
  add_action('save_post', 'normalize_post_slug_to_id', 20, 3);
}

この処理は自動保存やリビジョンには影響せず、通常の投稿だけを対象にスラッグを正規化します。

⚙️ 正規化が行われる条件・除外条件

正規化されるケース

  • 投稿タイプがpost
  • スラッグが空、またはASCII以外の文字を含む
  • 通常の保存操作

正規化されないケース

  • 自動保存
  • リビジョン保存
  • ゴミ箱への移動
  • すでに英数字スラッグが指定されている場合

必要な場面だけ実行されるため、通常の編集作業を妨げることはありません。

🧪 導入後の最低限チェック

  1. 日本語タイトルで投稿 → スラッグがpost-ID形式になっているか
  2. 英数字タイトル → 意図したスラッグが保持されるか
  3. スラッグ空欄 → 正しく置き換わるか
  4. 旧URLにアクセス → 404にならないか(ブラウザで確認)

これだけで基本動作の確認は十分です。

⚠️ よくあるつまずき

無条件でwp_update_postを呼ぶと自動保存と衝突する可能性があるため、wp_is_post_autosaveとwp_is_post_revisionのチェックが重要です。固定ページやカスタム投稿タイプへの影響を避けるため、postのみ対象にする条件も効果的です。フックの優先度を20に設定しておくと、WordPress本体のスラッグ生成後に安全に書き換えが行われます。

📘 まとめ

日本語スラッグの冗長さは、運用時の負担やリンク管理の手間につながります。保存時に自動でpost-IDへ統一することで、短く扱いやすいURLになり、公開後のスラッグ変更によるリスクも減少します。functions.phpにコードを追加するだけで導入でき、数件の投稿テストだけで十分に検証できます。

WordPressの運用や投稿フローについて相談したい場合は、気軽にお問い合わせください。

✨ 小さなWebの悩みも、気軽に相談できる“あなたのWeb担当者”になります

「自分で触ったけれど不安が残る…」「専任の担当がいれば助かるのに…」
そんな時に、いつでもチャットで頼れる窓口としてサポートしています。

サイトやWordPressのちょっとした修正、デザインや導線の見直し、日々の運用相談、
SEO・集客改善、日常業務でのAI活用など、必要なことだけ無理なくご相談いただけます。

内容がまとまっていなくても大丈夫です。
今の状況や困りごとを教えていただければ、まず“何からやると良いか”を一緒に整理します。

時間や場所に縛られないチャット完結のやり取りで、
あなたのペースに寄り添って進めていきます。

👉 ココナラで相談してみる

タイトルとURLをコピーしました