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