Wordpressのwp_config.phpを充実させようぜ

WPの記事はかなりネットに上がっているけど、wp_config.phpをカスタマイズしようぜ！的な内容の記事はあまり見かけないように思う。
なので今回私が行なっているwp_config.phpのカスタマイズを紹介します。

# そもそもの前提

```
require_once(ABSPATH . 'wp-settings.php');
```

の文の前に書いてください。

「編集が必要なのはここまでです ! WordPress でブログをお楽しみください。」

と書いてある場合は、その上に書いておけば間違い無いです。

# ローカル環境と本番環境のDB情報を、wp_configに共存させようぜ

ローカル環境のデータと本番環境のデータを書き換えてしまった時、
「あ、、、再設定しなくちゃ、、、」
とFTP情報を再確認する手間があると思うんだけど、そんなの手間だよね。
そんな時に

```
global $active_group; // 
$active_group = 'local';

if($active_group === 'local' ){
    ローカル環境のみでの設定
}else{
    本番環境のみでの設定
}
```
と分岐させると便利。

` global $関数 ` で「この関数はファイルのどこからでも変数を設定することができますよ」
という意味を持ち、その関数の中に値を入れれば、functionでも情報が共有されます。
'local'と入れておくとif文の` $active_group == 'local' `の内容を参照してくれて、
'local'以外(例えば'production')にしておけば、else以下の内容を参照されます。

本番・ローカル以外もある場合は、else if でさらに細かく分岐ができます。

# FTP画面を表示された場合、対応できるようにしよう

管理画面でFTPが要求されることがあります。
本来はこの場合、ファイル権限を変えるのが正規のやり方であるが、
毎回変更できるかわからない。
その次はFTPを入力するのが公式の手順であるが、FTP接続がうまくいかずに頭抱える場合も多いです。
その場合、

```
define(FS_METHOD,'direct');
```

という記述をされていれば、対応できる場合が多いです。

しかし、セキュリティ的に脆弱になりやすいので、**普段はコメントアウト**しておき、必要なときのみコメントアウトを外すのが理想の使い方のように思います。

## ユニークキーを設定してセキュリティを高めよう

ユニークキーは、セキュリティを高めるためにランダムな値をキャッシュしておく手法です。
要はログインしたことがあるユーザーかどうかを判断してくれるそう。
これを設定することによってユーザー側に影響が出ることはほぼ無いです。
なるべく設定はしておきたいです。

[ WPの公式の生成サービス ]( https://api.wordpress.org/secret-key/1.1/salt/  )があるので、ぜひつかって見て欲しい。

## ゴミ箱・リビジョンの制限をして、重くならないようにしよう

以外とバカにならないのがこの機能。
制限するとWPの速度が速くなるので、ぜひ設定してほしいです。

```
// ゴミ箱：0で無効、1以上で削除日数
   define('EMPTY_TRASH_DAYS', 30); // 0日
// リビジョン数を設定
   define('WP_POST_REVISIONS', 5);
```

# 自動保存機能を設定しよう

実は自動保存というシステムがある。
別タブを立ち上げて、戻ろうとした時にブラウザ全部を消しちゃったなんてこともあります。
この機能は好みに近いものがあるが、とりあえず設定しておいて損は無いと思います。

```
// 自動保存秒数
　　define( 'AUTOSAVE_INTERVAL', 160 ); // 秒数
```

# その他の設定

結構細かい設定なので、普段はコメントアウト指定ます。

## デバックモードの詳細を決めよう

```
// 開発用スクリプトに変更
   define( 'SCRIPT_DEBUG', true );
// エラーをディスプレイに出力するか
   @ini_set( 'display_errors', '1' );
   define('WP_DEBUG_DISPLAY', true);
// debug.logに出力
   define('WP_DEBUG_LOG', false);
```

エラーになった時の表示方法や、ログの出力を設定できます。
もしテストと本番とで分けたい時は、`if ( WP_DEBUG ) `　で本番とテストを分岐する方法と、上記で設定したglobal関数で分岐する方法があります。

# アップロードするファイルサイズ設定

All in one WP Migrate を利用すると必ず必要なこの設定。
反映される可能性がかなり低いが、取り合えず設定しておきます。

```
@ini_set( 'upload_max_filesize' , '128M' );
@ini_set( 'post_max_size', '128M');
@ini_set( 'memory_limit', '256M' );
@ini_set( 'max_execution_time', '300' );
@ini_set( 'max_input_time', '300' );
```


# サンプルコード

以上のことを踏まえた上で、追加編集したconfig.phpです。

```
<?php
/**
 * WordPress の基本設定
 *
 * @package WordPress
 */

global $active_group;
$active_group = 'local';

if($active_group == 'local' ){

    /** FTP対策 */
    // define('FS_METHOD', 'direct');

    /** デバックモードにするか */
    define('WP_DEBUG', false);
    
    /** MySQL DB名 */
    define('DB_NAME', 'xxx');

    /** MySQL データベースのユーザー名 */
    define('DB_USER', 'xxx');

    /** MySQL データベースのパスワード */
    define('DB_PASSWORD', 'xxx');

    /** MySQL のホスト名 */
    define('DB_HOST', 'xxx');

    /** データベースのテーブルを作成する際のデータベースの文字セット */
    define('DB_CHARSET', 'utf8mb4');

    /** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
    define('DB_COLLATE', '');

    /** WPの接頭語 */
    $table_prefix  = 'wp_';
    
    /** テーマ、プラグインの新規追加と更新、編集をさせない */
    define('DISALLOW_FILE_MODS',true);

}else{
    /** 省略 **/
}

/**#@+
 * 認証用ユニークキー
 */

  // https://api.wordpress.org/secret-key/1.1/salt/の内容をコピペ

/**
 * アップロードするファイルサイズ設定
 */

@ini_set( 'upload_max_filesize' , '128M' );
@ini_set( 'post_max_size', '128M');
@ini_set( 'memory_limit', '256M' );
@ini_set( 'max_execution_time', '300' );
@ini_set( 'max_input_time', '300' );

/**
 * サイト言語設定
 *
 */
    define ('WPLANG', 'ja');

/**
 * 投稿設定
 */
    // ゴミ箱：0で無効、1以上で削除日数
       define('EMPTY_TRASH_DAYS', 30 ); // 0日

    // WPリビジョン制限(falseの時は履歴を残さない)
       define('WP_POST_REVISIONS',5);

if ( WP_DEBUG ) {
    // 開発用スクリプトに変更
       define( 'SCRIPT_DEBUG', true );

    // エラーをディスプレイに出力するか
       @ini_set( 'display_errors', '1' );
       define('WP_DEBUG_DISPLAY', true);

    // debug.logに出力
       define('WP_DEBUG_LOG', false);

}else{
   /** 省略 **/
}

/* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */

/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
    define('ABSPATH', dirname(__FILE__) . '/');

/** Sets up WordPress vars and included files. */
require_once(ABSPATH . 'wp-settings.php');
```