広告

WordPressでWP_FileSystemを使うとき

WEB
この記事は約3分で読めます。

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のパーミッションでいけるはずです。

パーミッション変更

参考