
WordPressで投稿や固定ページのタイトルからスラッグ(パーマリンク)を自動的に英訳して設定する方法は、以下のようなカスタムコードで実現できます。
目次
タイトルを自動的に英訳する方法概要
- 投稿保存時(
save_post
アクション)にフック - 日本語タイトルを英語に翻訳(Google翻訳APIなど or ライブラリ)
- 翻訳した英語からスラッグ生成(ローマ字 + スラッグ形式)
- 自動的に
post_name
に反映
実装例:簡易英訳 → スラッグ変換
ここではAPIは使わず、簡易変換用にtransliterator_transliterate
(PHP拡張)が使えると仮定した例です。
PHPの intl 拡張の確認
PHPの intl 拡張(Transliterator クラス)が有効になっているか確認。
以下のコードを functions.php
やプラグインファイルに一時的に書いて、確認します。
add_action('admin_notices', function () {
if (class_exists('Transliterator')) {
echo '<div class="notice notice-success"><p>intl 拡張(Transliterator クラス)は有効です。</p></div>';
} else {
echo '<div class="notice notice-error"><p>intl 拡張(Transliterator クラス)は無効です。</p></div>';
}
});
WordPress管理画面にログインして確認すると、上部に通知が表示されます。
で、以下を記述してみます。
add_action('save_post', function ($post_id) {
// 自動保存、リビジョン、ゴミ箱はスキップ
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return;
if ( wp_is_post_revision($post_id) || get_post_status($post_id) === 'auto-draft' ) return;
$post = get_post($post_id);
if ( $post->post_type !== 'post' && $post->post_type !== 'page' ) return;
// すでにスラッグが設定されていれば何もしない
if ( ! empty($post->post_name) ) return;
$title = $post->post_title;
// PHPのintl拡張を利用してローマ字化
if (class_exists('Transliterator')) {
$transliterator = Transliterator::create('Any-Latin; Latin-ASCII; [\u0100-\u7fff] remove; Lower()');
$slug = $transliterator->transliterate($title);
$slug = sanitize_title($slug);
// スラッグが重複しないようにチェック
$slug = wp_unique_post_slug($slug, $post_id, $post->post_status, $post->post_type, $post->post_parent);
// スラッグを更新
wp_update_post([
'ID' => $post_id,
'post_name' => $slug,
]);
}
});
試してみるとわかると思いますが、英訳がおかしいですね。とりあえず半角英数にはなります。