Last active
February 28, 2020 14:47
-
-
Save miya0001/f1b2cf490375d27efaa5d5656cad1290 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Plugin Name: _tarosky | |
* Plugin URI: https://tarosky.co.jp/ | |
* Description: Fixes the some problems with our environment. | |
* Author: Takayuki Miyauchi | |
* Version: nightly | |
* | |
* @package _tarosky | |
*/ | |
/** | |
* CF7など一部のプラグインは不用意に環境変数にアクセスするためWP-CLIでワーニングが出てしまう。 | |
* 以下はそれを回避するための記述。WP-CLI本体では予測が困難なのでこのように自力で最適化する必要がある。 | |
*/ | |
if ( defined( 'WP_CLI' ) && WP_CLI ) { | |
$host = parse_url( home_url(), PHP_URL_HOST ); | |
$port = parse_url( home_url(), PHP_URL_PORT ); | |
if ( empty( $_SERVER['HTTP_HOST'] ) ) { | |
if ( ! $port || 80 === $port ) { | |
$_SERVER['HTTP_HOST'] = $host; | |
} else { | |
$_SERVER['HTTP_HOST'] = $host . ':' . $port; | |
} | |
} | |
if ( empty( $_SERVER['SERVER_NAME'] ) ) { | |
$_SERVER['SERVER_NAME'] = $host; | |
} | |
} | |
/** | |
* 以下はリバースプロキシがあるときにリモートIPを正しく認識させるための記述。 | |
* 例えばAkismetは `$_SERVER['REMOTE_ADDR']` を元にスパム判定を行う機能があるが、リバプロがあるとそのままではリモートIP | |
* を正しく取得できないのでこの行をいれる。Akismetの中の人もこうしたほうがいいとコメントをもらった。 | |
* Nginx に `proxy_set_header Remote-Addr $remote_addr;` という記述が必要。 | |
*/ | |
if ( '127.0.0.1' === $_SERVER['REMOTE_ADDR'] && ! empty( $_SERVER['HTTP_REMOTE_ADDR'] ) ) { | |
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_REMOTE_ADDR']; | |
} | |
/** | |
* 以下はリバースプロキシによってコンテンツがキャッシュされていても JS で `wp-cron.php` を | |
* AJAX することで、強制的に wp-cron を発火させるための処理。 | |
* wp-cron が非同期になるのでそういう意味でもよい。サーバーの cron でやっているならそのほうがベター。 | |
*/ | |
add_action( "wp_print_footer_scripts", function(){ | |
$js = ' | |
<script type="text/javascript"> | |
(function($){ | |
$.get("%s"); | |
})(jQuery); | |
</script> | |
'; | |
echo sprintf($js, site_url('wp-cron.php')); | |
} ); | |
/** | |
* リバースプロキシによってコンテンツがキャッシュされているページで WordPress のコメントが有効になっている場合に、 | |
* 最後にコメントを書いた人のメールアドレス等が、Cookie 経由で投稿フォームに埋め込まれてリバースプロキシによって | |
* キャッシュされる不具合がとても多い。 | |
* これは、コメント投稿者の Cookie から取得した情報を空にしてコメントフォームに入らないようにするための処理。 | |
*/ | |
add_filter( "wp_get_current_commenter", function() { | |
return array( | |
'comment_author' => '', | |
'comment_author_email' => '', | |
'comment_author_url' => '', | |
); | |
}, 9999 ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
2つ目から4つ目はリバースプロキシだけでなく CDN がある場合にも有効。
ただし、2つ目は CDN によって記述が異なる。