abc post-123 シンプルな日本語スラッ
グ修正プラグインを作った

WordPressで日本語ブログを運営していると、日本語タイトルの投稿で自動生成されるパーマリンクに日本語が含まれてしまいます。

「こんにちは世界」というタイトルだと、スラッグは %e3%81%93%e3%82%93%e3%81%ab%e3%81%a1%e3%81%af%e4%b8%96%e7%95%8c のような形になります。見栄えが悪く、URLが長くなり、SNSで共有するときに文字化けが起きることもあります。SEOの観点からも望ましくありません。

関連記事

1. プラグインコード

スラッグにマルチバイト文字のエンコードが含まれていた場合、自動的に「投稿タイプ-ID」形式に変換するプラグインを作りました。

<?php
/**
 * Plugin Name: 日本語スラッグ自動修正
 * Plugin URI: 
 * Description: 日本語スラッグが生成された場合、自動的に「投稿タイプ+ID」に変更します。
 * Version: 1.0.0
 * Author: Chiilabo
 * Author URI: https://chiilabo.jp/
 * License: GPL-2.0+
 * License URI: http://www.gnu.org/licenses/gpl-2.0.txt
 * Text Domain: japanese-slug-fix
 * Domain Path: /languages
 */

if (!defined('ABSPATH')) {
    exit;
}

function japanese_slug_fix_auto_post_slug($slug, $post_ID, $post_status, $post_type) {
    if (preg_match('/(%[0-9a-f]{2})+/', $slug)) {
        $slug = utf8_uri_encode($post_type) . '-' . $post_ID;
    }
    return $slug;
}
add_filter('wp_unique_post_slug', 'japanese_slug_fix_auto_post_slug', 10, 4);
Code language: HTML, XML (xml)

2. 仕組みと使い方

プラグインを japanese-slug-fix などの名前のフォルダに入れて、wp-content/plugins/ にアップロードし、管理画面から有効化するだけです。

wp_unique_post_slug フィルターフックを使って、生成されたスラッグに % 文字が含まれているかどうかを確認します。マルチバイト文字がエンコードされている場合にこのパターンが現れるので、検出されたら「投稿タイプ-ID」形式に置き換えます。「post-123」「page-45」のような形です。

コードが少ないのでサイトへの負荷が小さく、設定画面もありません。投稿タイプとIDを組み合わせた命名規則で、URLの一貫性が保たれます。

ただし、有効化しても既存投稿のスラッグは変わりません。新しく作成される投稿にのみ適用されます。既存投稿も変更したい場合は、各投稿を編集して保存し直す必要があります。