WordPressのスラッグ(URLの一部)には日本語をそのまま登録できますが、URLが文字化けするため、第三者に共有時や管理面でデメリットがあります。

新規タグを追加する際など、日本語スラッグのまま登録され、そのまま修正を忘れてしまうことも少なくありません。

そこで当記事では、日本語スラッグを検出し、管理画面にメッセージを表示する方法をご紹介します。

どの項目に日本語スラッグが使われているか一目瞭然で、漏れなく修正できるようになります。

WordPressテーマ「GLUE」
WordPressテーマ「GLUE」
無料で高機能なWordPressテーマが手に入る。

なぜ日本語スラッグは避けたほうがいいの?

WordPressではスラッグに日本語も使えますが、避けた方が無難な場面が多いです。

日本語で登録したURLは、ブラウザ上で%E3%81%82%E3%81%84のようにエンコードされた文字列に変換され、文字化けしたように見えるためです。

SNSやメールでのシェア時に見づらく、何のページか判別しづらくなります。また、URLをコピーする際にも不便を感じることがあるでしょう。

WordPressのスラッグの変更方法については、下記記事で解説しています。

日本語スラッグを検出・表示する方法

メッセージ表示例

メッセージ表示例

WordPressでは、スラッグに日本語が含まれているかをチェックして、管理画面にメッセージを表示することが可能です。クリックして編集画面に移動できます。

functions.phpに下記のコードをコピペすればOKです。

// 管理画面に日本語スラッグの投稿・タームを一覧表示
add_action('admin_notices', function () {
    // 管理画面かどうか&get_current_screen関数が使えるかをチェック
    if (!is_admin() || !function_exists('get_current_screen')) return;

    // 現在の画面情報を取得
    $s = get_current_screen(); 
    $out = []; // 対象リストの出力用配列

    // 投稿・ターム共通の検出処理をコールバック化
    $check = function ($label, $items, $get_link, $get_name, $get_slug) use (&$out) {
        foreach ($items as $item) {
            // スラッグに日本語(URLエンコードで%が含まれる)を検出
            if (strpos(urlencode($get_slug($item)), '%') !== false) {
                // 編集リンク付きでリストに追加
                $out[] = sprintf('<li><a href="%s">%s</a>(%s)</li>',
                    esc_url($get_link($item)),     // 編集画面へのリンク
                    esc_html($get_name($item)),    // 投稿・ターム名
                    esc_html($get_slug($item))     // スラッグ
                );
            }
        }
    };

    // 投稿一覧ページでの検出処理(投稿・固定ページ・カスタム投稿に対応)
    if ($s->base === 'edit') {
        $check('post',
            get_posts([
                'post_type'   => $s->post_type,
                'numberposts' => -1,
                'post_status' => 'any',
            ]),
            fn($p) => get_edit_post_link($p->ID),
            fn($p) => get_the_title($p),
            fn($p) => $p->post_name
        );
    }

    // ターム一覧ページでの検出処理(カテゴリー・タグ・カスタムタクソノミーに対応)
    if ($s->base === 'edit-tags') {
        $check('term',
            get_terms([
                'taxonomy'   => $s->taxonomy,
                'hide_empty' => false,
            ]),
            fn($t) => get_edit_term_link($t->term_id, $s->taxonomy),
            fn($t) => $t->name,
            fn($t) => $t->slug
        );
    }

    // 日本語スラッグが1件以上見つかった場合、メッセージとして表示
    if ($out) {
        echo '<div class="notice notice-warning"><p>日本語スラッグが検出されました:</p><ul>' . implode('', $out) . '</ul></div>';
    }
});
初心者の方は、テーマファイルを編集するのではなく、「Code Snippets」のようなプラグインを使って対応するのが安心です。

コードの仕様・概要

このコードは、管理画面内で日本語スラッグを検出し、メッセージとして表示する仕組みです。

  • 投稿・固定ページ・カスタム投稿に対応
  • カテゴリー・タグなどのタクソノミーにも対応
  • 該当する投稿・タームを一覧で表示し、各編集画面にリンク

日本語スラッグがある場合、メッセージに一覧表示されるので、修正作業がスムーズです。

補足・注意点

日本語スラッグの登録を制限するものではありません。以下の注意点もご確認ください。

既存の日本語スラッグはどうなる?

すでに登録されているスラッグに影響はありません。今回のコードは、一覧画面で「日本語スラッグが使われている項目」を検出し、編集画面へのリンク付きで注意を促すだけの仕組みです。

日本語スラッグを使い続けても問題ない?

たとえば「/会社概要」や「/お問い合わせ」のように、短く意味が明確な日本語スラッグは、あえて使っているケースもあります。ただし、この場合もURLがエンコード(変換)されるため、シェアや管理のしやすさを重視するなら英数字が無難です。

詳しくは、下記の記事も参考にしてみてください。

まとめ

WordPressで日本語スラッグを検出・一覧表示する方法をご紹介しました。

日本語スラッグはURLがエンコードされて文字化けのように見えるほか、コピー・共有時にも不便さが残ります。見落としや修正忘れも起こりやすいため、一覧画面でのメッセージ表示は有効な対策です。

functions.phpにコードをコピペするだけで使えるので、日本語スラッグを英数字に修正したいときのチェック用ツールとして、ぜひご活用ください。

WordPressテーマ「GLUE」
WordPressテーマ「GLUE」
無料で高機能なWordPressテーマが手に入る。