WordPress のデフォルトタイムゾーンは、タイムゾーンの設定に関わらず常に UTC に設定されています。
そして、WordPress の日付および時刻に関する関数など一部の機能は、デフォルトタイムゾーンが UTC であることに依存しています。よって、プラグインやテーマにてデフォルトタイムゾーンを変更してはいけません。変更した場合は必ず元に戻すようにしてください。
WordPress にはローカルタイムに対応した date_i18n() や current_time() があります。PHP の date() や time() の代わりに使用することでデフォルトタイムゾーンを変更することなくローカルタイムで取得することができます。
date_default_timezone_set( wp_timezone_string() );
echo date( 'Y-m-d H:i:s' );
上記は、date_i18n() を使用して下記のようにすることで、正しいローカルタイムで取得することができます。
echo date_i18n( 'Y-m-d H:i:s' );
デフォルトタイムゾーンを変更した場合は、元に戻すようにします。
$default_timezone = date_default_timezone_get();
date_default_timezone_set( wp_timezone_string() );
echo date( 'Y-m-d H:i:s' );
date_default_timezone_set( $default_timezone );
本来は、デフォルトタイムゾーンの変更は必要ないのですが、困ったことにプラグインの中にはデフォルトタイムゾーンを変更したままにするものが存在するので、下記のようにせざるを得ないのが実状です。
$default_timezone = date_default_timezone_get();
date_default_timezone_set( 'UTC' );
echo date_i18n( 'Y-m-d H:i:s' );
date_default_timezone_set( $default_timezone );