2026年8月27日
2026年8月27日
WordPressで「intl が無効」と出るときの対処|PHPのintl拡張を確認して入れる手順
WordPressの「ツール」→「サイトヘルス」に、intl についての警告が出ることがあります。英語の原文は The optional module, intl, is not installed, or has been disabled. で、日本語の画面では「オプションのモジュール intl がインストールされていないか、無効化されています」という意味の表示になります。
intl(Internationalization extension)は、ICUというライブラリを使って、文字列の正規化、言語ごとの並べ替え、数値・日付・通貨の書式などを扱うPHPの拡張機能です。WordPress本体の必須モジュールではなく、サイトヘルスでは「推奨(オプション)」のモジュールとして確認されます。
この記事の内容は、WordPress 7.1 のソースコードと、Ubuntu 24.04・AlmaLinux 9 のパッケージで確認したものです(2026年11月時点)。
intl が無いと何が起きるか
WordPress本体への影響
WordPress本体は、intl の関数 normalizer_normalize() が使えるときに、投稿タイトルなどからスラッグを作る処理(remove_accents())の前で、文字をUnicodeの「NFC」という形にそろえます(WordPress 6.1 以降)。
Macでコピーした文字列などでは、「ガ」が「カ」と濁点の2文字に分かれた形(NFD)になっていることがあります。手元の検証では、ガイド をNFDの形で入力したとき、スラッグは次のようになりました。
| intl | 作られたスラッグ(URLエンコードされた形) |
|---|---|
| 有効 | %e3%82%ac%e3%82%a4%e3%83%89(通常の「ガイド」と同じ) |
| 無効 | %e3%82%ab%e3%82%99%e3%82%a4%e3%83%88%e3%82%99(濁点が別の文字のまま) |
見た目は同じ文字でも、intl が無いと別のスラッグになることがあります。それ以外の本体の機能は、intl が無くても動きます。
プラグイン・テーマへの影響
影響が大きいのは、intl のクラスや関数を直接使うプラグインです。intl が無い環境でそれらが呼ばれると、次のような Fatal error で画面が止まります。
PHP Fatal error: Uncaught Error: Class "NumberFormatter" not found
PHP Fatal error: Uncaught Error: Call to undefined function idn_to_ascii()
自分のサイトのプラグインやテーマが intl を使っているかは、ファイルの中を検索すると見当がつきます。
cd /var/www/html/wp-content
grep -rlE "NumberFormatter|IntlDateFormatter|Normalizer::|normalizer_normalize|Collator|Transliterator|idn_to_ascii|grapheme_" plugins themes | head -50
(/var/www/html はWordPressの場所に置き換えます。)見つかったファイルの中には、class_exists() で intl の有無を確かめてから使っているものもあるので、該当があっても、それだけで止まるとは限りません。
手順1:WordPressから見たPHPで intl が有効か確かめる
ターミナルの php -m は、コマンドライン(CLI)用のPHPの結果です。Webサーバー用のPHP(PHP-FPMやApacheのモジュール)とは設定ファイルが別のことがあるので、まず管理画面で確かめます。
- 「ツール」→「サイトヘルス」の「ステータス」タブで、推奨モジュールが足りないという項目(英語の画面では
One or more recommended modules are missing)を開き、intl が挙がっているかを見ます。
CLI側の状態は次のコマンドで確かめます。
php -m | grep -i intl
wp eval 'var_dump( extension_loaded( "intl" ) );'
手順2:サーバーの種類ごとに入れる
Ubuntu / Debian
Ubuntu 24.04 では php8.3-intl というパッケージで入ります(php-intl は、標準のPHPのバージョンの intl を入れるためのパッケージです)。入れると自動で有効になります。
sudo apt update
sudo apt install php8.3-intl
# 無効にされていた場合は有効に戻す
sudo phpenmod intl
# PHP-FPM を使っている場合
sudo systemctl restart php8.3-fpm
# Apache の mod_php を使っている場合
sudo systemctl restart apache2
8.3 は php -v で確かめた、使っているPHPのバージョンに置き換えます。Nginxは静的なファイルを返すだけでPHPの拡張機能を読み込まないので、Nginxの再起動では反映されません。再起動するのはPHP-FPMです。
RHEL / AlmaLinux / Rocky Linux
sudo dnf install php-intl
sudo systemctl restart php-fpm
入れると /etc/php.d/20-intl.ini が作られ、有効になります。Remi などの別のリポジトリのPHPを使っている場合は、そのPHPに合ったパッケージ名(例: php83-php-intl)を使います。
Docker の公式 PHP イメージ
公式 php イメージには intl が入っていません。intl はICUライブラリが必要なので、開発用のパッケージを入れてから追加します(公式の wordpress イメージには最初から入っています)。
FROM php:8.3-apache
RUN apt-get update \
&& apt-get install -y --no-install-recommends libicu-dev \
&& docker-php-ext-install intl \
&& rm -rf /var/lib/apt/lists/*
Windows(IIS や XAMPP など)
Windows版のPHPには intl が同梱されています。php.ini の extension=intl の行の先頭にある ; を消して保存し、IISなら iisreset などでPHPのプロセスを起動し直し、XAMPPならApacheを再起動します。使っている php.ini の場所は php --ini か phpinfo() の「Loaded Configuration File」で確かめます。
共用レンタルサーバー
共用サーバーでは、利用者がPHPの拡張機能を入れることはできません。コントロールパネルにPHPの拡張機能を選ぶ画面があればそこで intl を選び、無ければサーバー会社に有効にできるか問い合わせます。
手順3:有効になったか確かめる
- 「ツール」→「サイトヘルス」を開き直し、intl の警告が消えたことを確かめます。
- intl を使うプラグインで Fatal error が出ていた場合は、その画面を開き直して表示されることを確かめます。
- WP-CLIを使う場合は、CLIでも intl が読み込まれているかを
php -mで確かめます。CLIとWebで別のPHPを使っていると、片方だけに入っていることがあります。
まとめ
- intl はWordPress本体の必須モジュールではありませんが、本体はスラッグを作るときの文字の正規化に使い、プラグインは数値・日付の書式やドメイン名の変換などに使います。
- intl を前提にしたプラグインは、intl が無いと
Class "NumberFormatter" not foundなどの Fatal error で止まります。 - Ubuntuは
php8.3-intl、AlmaLinuxはphp-intl、Dockerの公式PHPイメージはlibicu-devを入れてからdocker-php-ext-install intlで入れます。 - 反映にはPHP-FPMかApacheの再起動が必要です。最後にサイトヘルスで確認します。