Skip to content

Instantly share code, notes, and snippets.

@miya0001
Last active February 28, 2020 14:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save miya0001/f1b2cf490375d27efaa5d5656cad1290 to your computer and use it in GitHub Desktop.
Save miya0001/f1b2cf490375d27efaa5d5656cad1290 to your computer and use it in GitHub Desktop.
<?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 );
@miya0001
Copy link
Author

2つ目から4つ目はリバースプロキシだけでなく CDN がある場合にも有効。
ただし、2つ目は CDN によって記述が異なる。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment