投稿や固定ページの日本語タイトルを自動的に英語のスラッグにする

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,
        ]);
    }
});

試してみるとわかると思いますが、英訳がおかしいですね。とりあえず半角英数にはなります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

初めてホームページを作成したのは1996年。
2000年よりフリーランスで主に中小企業、学校、各種公的団体、個人事業主のWordPressを活用したホームページ制作を行っています。WordPressテーマはそれぞれのクライアントに合わせて作成しています。
WordPressを活用したサイト運営のための情報発信をしていきます。

目次