WordPressインストールの最も重要なファイルの一つは構成ファイルです。これはルートディレクトリにあり、中にはWordPressを思い通りに動作させるための定数定義やPHPコマンドなどが含まれています。
wp-config.phpファイルには、データベース接続の情報、テーブルプレフィックス、特定のディレクトリへのパス、そして本記事で取り上げる特定の機能に関連する多くの設定などのデータが保存されます。

基本的なwp-config.phpファイル

WordPressを最初にインストールするときに、データベースの情報やテーブルのプレフィックスなどの必要な情報を入力するように求められます。ホスティング会社がWordPressをセットアップし、セットアップを手動で実行する必要はない場合もあります。ただし、5分間のインストールを手動で実行すると、wp-configに保存される最も重要なデータを入力するよう求められます。

インストールを実行すると、wp-configに保存されるデータを入力するよう求められる
インストールを実行すると、wp-configに保存されるデータを入力するよう求められる

基本的なwp-config.phpファイルは次のとおりです。

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'database_name_here');

/** MySQL database username */
define('DB_USER', 'username_here');

/** MySQL database password */
define('DB_PASSWORD', 'password_here');

/** MySQL hostname */
define('DB_HOST', 'localhost');

/** Database Charset to use in creating database tables.*/
define('DB_CHARSET', 'utf8');

/** The Database Collate type.Don't change this if in doubt.*/
define('DB_COLLATE', '');

define('AUTH_KEY',		'put your unique phrase here');
define('SECURE_AUTH_KEY',	'put your unique phrase here');
define('LOGGED_IN_KEY',		'put your unique phrase here');
define('NONCE_KEY',		'put your unique phrase here');
define('AUTH_SALT',		'put your unique phrase here');
define('SECURE_AUTH_SALT',	'put your unique phrase here');
define('LOGGED_IN_SALT',	'put your unique phrase here');
define('NONCE_SALT',		'put your unique phrase here');

$table_prefix  = 'wp_';

/* That's all, stop editing! Happy blogging.*/

このファイルは通常、セットアップを実行すると自動的に生成されますが、WordPressがインストールフォルダーに書き込む権限を持たない場合もあります。そういった場合では、手動で空のwp-config.phpファイルを作成し、wp-config-sample.phpの内容をコピーして貼り付け、定義済みのすべての定数に適切な値を設定します。完了したら、ファイルをルートフォルダーにアップロードし、WordPressを実行します。

注:定数の定義とPHPコマンドには、決して変更してはならない特定の順序があります。 また、次のコメント行の下に内容を追加しないでください。

/* That's all, stop editing! Happy blogging.*/

最初に、ホスティング会社から受信するデータベース定数の定義を入力します。

  • DB_NAME
  • DB_USER
  • DB_PASSWORD
  • DB_HOST
  • DB_CHARSET
  • DB_COLLATE

データベースの詳細に従う8つのセキュリティキーのおかげで、サイトのセキュリティが強化されます。インストールを実行すると、WordPressはセキュリティキーとソルトキーを自動的に生成しますが、任意の文字列を追加して変更することができます。セキュリティを高めるために、オンライン生成ツールを検討してください。

$table_prefix変数は、すべてのWordPressテーブルのプレフィックスを格納します。残念ながら、誰もがそのデフォルト値を知っており、これによりWordPressデータベースが脆弱性にさらされる可能性があります。一方、この問題は、セットアップの実行時に$table_prefixにカスタム値を設定することで簡単に解決できます。
稼働中のウェブサイトでテーブルプレフィックスを変更するには、データベースの複数クエリを実行してから、手動でwp-config.phpファイルを編集する必要があります。データベースにアクセスできない場合や、カスタムクエリを作成するための知識がない場合は、データベーステーブルとフィールド名を変更するChange Table Prefixなどのプラグインをインストールし、リスクなしで構成ファイルを更新できます。

:テーブルのプレフィックスをプラグインを使って変更する場合でも、WordPressファイルとデータベースをバックアップすることをお勧めします。

これまでのところ、本記事は基本構成のみをカバーしました。ただし、機能を有効にしたり、インストールをカスタマイズして保護したりするために定義できる多くの追加の定数もあります。

詳細な構成:ファイルシステムの編集

WordPressのファイルシステムは、ユーザーにもハッカーにもよく知られています。このため、特定のフォルダーを任意の場所に移動し、対応するURLとパスをwp-configファイルに設定することにより、組み込みのファイル構造を変更することを検討する価値があります。
コンテンツフォルダーを移動するのに、2つの定数を定義します。1つ目の定数は完全なディレクトリパスを設定します。

define( 'WP_CONTENT_DIR', dirname(__FILE__) .'/site/wp-content' );

2つ目の定数は新しいディレクトリURLを設定します。

define( 'WP_CONTENT_URL', 'http://example.com/site/wp-content' );

プラグインフォルダーのみを移動するには、次の定数を定義します。

define( 'WP_PLUGIN_DIR', dirname(__FILE__) .'/wp-content/mydir/plugins' );
define( 'WP_PLUGIN_URL', 'http://example.com/wp-content/mydir/plugins' );

同様に、アップロードフォルダーを移動するのに、新しいディレクトリパスを設定します。

define( 'UPLOADS', 'wp-content/mydir/uploads' );

注:すべてのパスはABSPATH基準としているため、先頭にスラッシュを含めないでください。

完了したら、フォルダーを配置してWordPressを再読み込みします。

組み込みファイル構造とカスタマイズされた構造の比較
組み込みファイル構造とカスタマイズされた構造の比較

/wp-content/themesフォルダーをwp-configファイルから移動することはできませんが、プラグインまたはテーマの機能ファイルのために新しいテーマディレクトリを作成することができます。

開発者向けの機能:デバッグモードとクエリの保存

開発者は、テーマとプラグインのデバッグに役立つエラーや警告をWordPressに表示させることができます。デバッグモードを有効にするには、次に示すように、WP_DEBUG値を「true」に設定します。

define( 'WP_DEBUG', true );

WP_DEBUGはデフォルトで「false」に設定されています。デバッグモードを無効にしたい場合は、定義を削除するか、値を「false」に変更します。
本番サイトで作業しているときは、デバッグモードを無効にする必要があります。エラーや警告メッセージは、ハッカーに貴重な情報を伝えてしまうため、サイトの閲覧者に決して表示しないでください。しかし、どうしてもデバッグする必要がある場合はどうでしょうか?
この場合では、エラーや警告メッセージを/wp-contentフォルダーにあるdebug.logファイルに保存するように設定できます。 この機能を有効にするには、次のコードをコピーしてwp-config.phpファイルに貼り付けます。

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );

この機能を動作させるには、まずデバッグモードを有効にします。次に、WP_DEBUG_LOGを「true」に設定してWordPressにメッセージをdebug.logファイルに保存させ、WP_DEBUG_DISPLAYを「false」に設定してユーザーの画面で非表示にします。最後に、エラーメッセージが画面に出力されないように、PHP変数display_errorsの値を「0」に設定します。wp-configがキャッシュから読み込まれることはありません。このため、php.ini設定を上書きするのに適しています。

注:これは、WordPressが画面に出力しないメッセージを登録するための便利な機能です。たとえば、publish_postアクションがトリガーされると、WordPressはデータを保存するスクリプトを読み込み、ユーザーを投稿編集ページにリダイレクトします。この場合、メッセージを登録することはできますが、画面に出力することはできません。

読み込まれるスクリプトやスタイルのバージョンを決定する、もう一つのデバッグ定数があります。非圧縮バージョンを読み込むのに、SCRIPT_DEBUGを「true」に設定します。

define( 'SCRIPT_DEBUG', true );

テーマまたはプラグインにデータベースから取得したデータが表示されている場合は、クエリの詳細を保存して後で確認することができます。SAVEQUERIES定数は、WordPressにクエリ情報を$wpdb->queries配列に強制的に保存させます。これらの詳細は、フッターテンプレートに次のコードを追加して出力されます。

if ( current_user_can( 'administrator' ) ) {
        global $wpdb;
        echo '<pre>';
        print_r( $wpdb->queries );
        echo '</pre>';
}

この機能の詳細な分析については、当社の「WordPressで効率的なクエリを作成する方法について」の記事をご参照ください。

ウェブサイトが成長していくと、投稿のリビジョン数を減らす必要が出てくる場合があります。デフォルトでは、WordPressはリビジョンを60秒ごとに自動的に保存します。次のようにwp-configでカスタム間隔を設定することにより、この値を変更できます。

define( 'AUTOSAVE_INTERVAL', 160 );

もちろん、自動保存の間隔を短くすることもできます。
編集した内容を保存するたびに、WordPressはpostsテーブルに新規行を追加するので、投稿や固定ページの以前のリビジョンをいつでも復元できます。これは、便利な機能ですが、サイトが大きくなると問題を引き起こす可能性があります。幸い、保存する投稿リビジョンの最大数を減らすか、機能をまったく無効にすることができます。
ポストリビジョンを無効にするには、次の定数を定義します。

define( 'WP_POST_REVISIONS', false );

リビジョンの最大数を制限するには、次の行を追加します。

define( 'WP_POST_REVISIONS', 10 );

デフォルトでは、WordPressはゴミ箱に入れられた投稿、固定ページ、添付ファイル、コメントなどを完全に削除するまえに30日間保存します。 この値を変更するのに、次の定数を使用します。

define( 'EMPTY_TRASH_DAYS', 10 );

値を「0」に設定すると、ごみ箱を完全に無効にすることもできますが、そうするとコンテンツを復元できなくなりますので、ご注意ください。

容されるメモリサイズ

次のようなメッセージが表示される場合があります。

WordPressの致命的なエラー:許容される○○バイトのメモリサイズを使い果たしました

メモリサイズは、サーバーの構成によって異なります。php.iniファイルにアクセスできない場合は、wp-configファイルでWP_MEMORY_LIMIT定数を設定することで、WordPressのみのメモリ制限を増やすことができます。デフォルトでは、WordPressは、単独のサイトの場合は40Mb、マルチサイトインストールの場合は64MBをPHPに割り当てようとします。もちろん、PHPに割り当てたメモリが40Mb(または64Mb)を超える場合、WordPressはその値に合わせます。
次の行でカスタム値を設定できます。

define( 'WP_MEMORY_LIMIT', '128M' );

必要に応じて、次のステートメントで最大メモリ制限を設定することもできます。

define( 'WP_MAX_MEMORY_LIMIT', '256M' );

自動更新

WordPressはバージョン3.7以降、セキュリティリリースの自動更新をサポートしています。これは、サイト管理者がウェブサイトを常に安全に保つための重要な機能です。
一方、次の定数を定義することで、すべての自動更新を無効にすることができます。

define( 'AUTOMATIC_UPDATER_DISABLED', true );

セキュリティ更新を無効にすることはお勧めできませんが、行うかどうかはあなた次第です。
デフォルトでは、自動更新はメジャーリリースでは機能しませんが、次のようにWP_AUTO_UPDATE_COREを定義すると、コアの自動更新を有効にすることができます。

# Disables all core updates:
define( 'WP_AUTO_UPDATE_CORE', false );

# Enables all core updates, including minor and major:
define( 'WP_AUTO_UPDATE_CORE', true );

デフォルト値はminorです。

define( 'WP_AUTO_UPDATE_CORE', 'minor' );

その他の定数を追加すると、自動更新(およびファイルの更新または変更など)が無効になります。DISALLOW_FILE_MODSを「true」に設定すると、テーマとプラグインのインストールと更新を含め、すべてのファイル編集が無効になります。このため、お勧めできません。

セキュリティ設定

wp-configファイルを使用して、サイトのセキュリティを強化できます。上記のファイル構造の変更に加えて、脆弱性を招く可能性のある機能をロックすることもできます。まず、管理パネルのファイルエディターを無効にすることができます。次の定数は、「外観」画面を非表示にします。

define( 'DISALLOW_FILE_EDIT', true );

注:この定数が「true」に設定されていると、適切に機能しないプラグインもありますので、ご注意ください。

disallow_file_edit
disallow_file_edit

管理画面での SSL 通信というセキュリティ機能もあります。SSL証明書を購入し、適切に構成されている場合は、WordPressに任意のログイン画面や管理セッションでSSLを介してデータを転送させることができます。次の定数を使用します。

define( 'FORCE_SSL_ADMIN', true );

管理画面での SSL 通信の詳細については、コーデックスをご参照ください。

次の2つの定数により、外部リクエストをブロックしたり、許可されたホストをリスト化したりできます。

define( 'WP_HTTP_BLOCK_EXTERNAL', true );
define( 'WP_ACCESSIBLE_HOSTS', 'example.com,*.anotherexample.com' );

上記の例では、最初に外部ホストからのすべてのアクセスを無効にしてから、許可されたホストのコンマで区切ったリストを作成しました(ワイルドカードは利用可能)。

その他の詳細設定

WP_CACHEを「true」に設定すると、wp-content/advanced-cache.phpスクリプトが含まれます。この定数は、永続的キャッシュプラグインがインストールされている場合にのみ機能します。

CUSTOM_USER_TABLE およびCUSTOM_USER_META_TABLE は、デフォルトのwp_usersやwp_usermetaテーブル以外のカスタムユーザーテーブルを設定するために使用されます。これらの定数は、サイトユーザーが1つのアカウントで複数のウェブサイトにアクセスできる便利な機能を有効にします。機能を使用するには、すべてのインストールで同じデータベースを使用する必要があります。

バージョン2.9以降、WordPressは自動データベース最適化をサポートしています。この機能のおかげで、WP_ALLOW_REPAIRをtrueに設定すると、WordPressは破損したデータベースを自動的に修復します。

WordPressは、画像を編集するたびに新しい画像のセットを作成します。画像を基に復元すると、生成されたすべてのセットはサーバーに残ります。この動作を上書きするには、IMAGE_EDIT_OVERWRITEを「true」に設定します。これにより、元の画像を復元すると、すべての編集内容がサーバーから削除されます。

wp-config.phpをロックする

さて、wp-config.phpが最も重要なWordPressファイルの一つであることがわかりました。必ず、ハッカーが見つからない場所に保存したほうがいいです。まず、wp-configをWordPressのルートフォルダーの1つ上のレベル(1レベルのみ)に移動できます。ただし、この手法は少し物議を醸すので、ファイルを保護するために他のソリューションを採用することをお勧めします。ウェブサイトがApache ウェブサーバーを使用している場合は、次のディレクティブを.htaccessファイルに追加します。

<files wp-config.php>
order allow,deny
deny from all
</files>

ウェブサイトがNginxを使用している場合は、構成ファイルに次のディレクティブを追加します。

location ~* wp-config.php { deny all; }

注:上記の手順は、セットアップが完了した後にのみ行ってください。

ウェブサイトを複数回移行したことがあるか、他人から購入した場合は、新しいWordPressセキュリティキーを作成することをお勧めします。セキュリティキーは、ユーザーのクッキーに保存されている情報の暗号化を改善するランダムな変数のことです。 WordPress 2.7以降、AUTH_KEYSECURE_AUTH_KEYLOGGED_IN_KEY NONCE_KEYの4つのキーが存在しています。

デフォルトでは、ランダムに生成されます。しかし、WordPressには新しいランダムキーを生成できる無料のツールがあります。次に、wp-config.phpファイルに保存されている現在のキーを更新するだけです。

WordPressセキュリティキー
WordPressセキュリティキー

WordPressのセキュリティキーの詳細については、こちらをご参照ください。

最後に、wp-config.phpファイルのアクセス許可が強化されていることを再確認してください。WordPressサイトのルートディレクトリのファイルは通常、「644」に設定されます。つまり、ファイルの所有者が読み取りおよび書き込みができますが、その他のユーザーも読み取りができす。 WordPressのドキュメントによると、他のユーザーがwp-config.phpファイルを読み取れないように、wp-config.phpファイルのファイルパーミッションを440または400に設定する必要があります。これはFTPクライアントを使用して簡単に変更できます。

wp-config.php のファイルパーミッション
wp-config.php のファイルパーミッション

まとめ

本記事では、wp-configファイルに定義できる多くのWordPress定数をご紹介しました。上記の定数の一部はよく使われており、中の関数は理解しやすいものです。そして、残りの定数は、WordPressとサイト管理の深い知識を必要とする詳細な機能を有効にします。

今回は最も一般的な機能を一覧にして、今後の記事で説明するつもりの詳細な機能は省略しました。記載されていない機能や定数について詳しく知りたい場合は、下のコメント欄でお気軽にご相談ください。詳しくご説明します。

Carlo Daniele Kinsta

ウェブデザインとフロントエンド開発をこよなく愛し、WordPress歴は10年以上。イタリアおよびヨーロッパの大学や教育機関とも共同研究を行う。WordPressに関する記事を何十件も執筆しており、イタリア国内外のウェブサイトや雑誌に掲載されている。詳しい仕事情報はXとLinkedInで公開中。