WordPressを高速化するにあたり、style.cssをインラインで入れ込むために、WP_FileSystemを使うことにしました。
phpならfile_get_contentsが使えるけど、WordPressでは使わない方が良い
ファイルを呼び出すとき、phpならfile_get_contentsを使用します。
// style.cssファイルを読み込み $css = file_get_contents( get_stylesheet_directory() . '/style.css', true ); echo $css;
どうも、WordPressでfile_get_contentsを使ってしまうとセキュリティ的に好ましくないため非推奨となっているようです。
また、ファイルを書き出すときに使うfile_put_contentsも同様に、非推奨とのことです。
file_get_contentsの変わりにWP_FileSystemを使用する
WP_FileSystemを使うには、functions.phpに「WP_FileSystemを使うよ!」と宣言?する必要があります。
// WP_FileSystem呼び出し require_once( ABSPATH . 'wp-admin/includes/file.php' );
次に、php-html-css-js-minifier.phpを使った例です。
php-html-css-js-minifier.phpはgitからダウンロードできます。
オリジナル https://gist.github.com/tovic/d7b310dea3b33e4732c0
フォークもあるので、上手く動作しないときは、フォークのものを使うといいかもしれません。
//縮小化ライブラリの読み込み(ライブラリへのパスは各サイトの状態に合わせる) require_once( get_stylesheet_directory() . '/lib/php-html-css-js-minifier.php' ); function css_min_create() { $css_file = get_stylesheet_directory() . '/style.css'; $css_min_file = get_stylesheet_directory() . '/style.min.css'; if ( WP_Filesystem() ) { global $wp_filesystem; $css_min = $wp_filesystem->get_contents( $css_file ); // 縮小化 $css_min = minify_css( $css_min ); // 保存 $wp_filesystem->put_contents( $css_min_file, $css_min ); } } add_action( 'wp_enqueue_scripts', 'css_min_create' );
これで、縮小されたCSSができると思ったのですが・・・
パーミッションに注意
パーミッションで書き込みできない設定になっていると、出力されません。
サーバーの設定にもよりますが、707、705あたりで可能になると思います。
例)CentOS7で、fffディレクトリの所有者をapache、所有グループをapacheに変更するときのコマンド
chown -R apache.apache fff
こんな感じになっていれば、705のパーミッションでいけるはずです。
