Cloudfrontで負荷を軽減しようとしたが

WordPressは、メモリやCPUを非常に浪費するためCloudfrontCloudflareを使う方が多いと思います。
弊社でもCloudflareとCloudfrontの両方を使用していますが、Clouflareでは実現できないことが多くあったため(詳細はいづれ・・・)Cloudfrontで検証を行っていました。
そこで困ったことが1点発生して、Wordpressでログインして新規投稿をした際に、「ビジュアル」タブが出てこないことでした。

visual01

原因を探ってみた

デバックモードにしたり、エラーログを探ったりググッてみたところ。User-agentでWordpressがデスクトップかモバイルかを判断してモバイルだったらビジュアルタブを出さないってことになっているようです。その原因となっている設定が以下にあります。
wp-includes/general-template.phpに記載があります

function user_can_richedit() {
        global $wp_rich_edit, $is_gecko, $is_opera, $is_safari, $is_chrome, $is_IE;

        if ( !isset($wp_rich_edit) ) {
                $wp_rich_edit = false;

                if ( get_user_option( 'rich_editing' ) == 'true' || ! is_user_logged_in() ) { // default to 'true' for logged out users
                        if ( $is_safari ) {
                                $wp_rich_edit = ! wp_is_mobile() || ( preg_match( '!AppleWebKit/(\d+)!', $_SERVER['HTTP_USER_AGENT'], $match ) && intval( $match[1] ) >= 534 );
                        } elseif ( $is_gecko || $is_chrome || $is_IE || ( $is_opera && !wp_is_mobile() ) ) {
                                $wp_rich_edit = true;
                        }
                }
        }

        return apply_filters('user_can_richedit', $wp_rich_edit);
}

Cloudfrontだとなぜビジュアルが見れないか

CloudfrontのUser-agentはcloudfrontからのUser-Agentの書き換えに書いたのですが、全て”Amazon Cloufront”になってしまい。モバイルと判断されたようです。

ちなみにCloudflareの場合はUser-Agentは引き渡されるので正常にビジュアルタブが出てきます。

修正作業

ジャーどうすればよいかと言うと、Wordpressにフィルターをかけて、UAに依存せずに出せばよいかと。
テーマのfunction.phpを下記のように書き直しました。

function user_can_richedit_kumoyanet() {
	global $wp_rich_edit;
 
	if (get_user_option('rich_editing') == 'true' || !is_user_logged_in()) {
		$wp_rich_edit = true;
		return true;
	}
 
	$wp_rich_edit = false;
	return false;
}
add_filter('user_can_richedit', 'user_can_richedit_kumoyanet');

どうなった?

無事、ビジュアルモードが出ました。
visual02