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:有効になったか確かめる

  1. 「ツール」→「サイトヘルス」を開き直し、intl の警告が消えたことを確かめます。
  2. intl を使うプラグインで Fatal error が出ていた場合は、その画面を開き直して表示されることを確かめます。
  3. 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の再起動が必要です。最後にサイトヘルスで確認します。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲