PHP
WordPress

WordPressでファイル操作をする時は、PHPの標準関数を使うのは非推奨!?WP_FileSystemを使うようにしよう!

PHPでファイルの読み書きをする場合、file_get_contents関数file_put_contents関数などを利用したりしますが、WordPressではこのようなPHPの標準関数を利用するのは非推奨となっているようです。パーミッションさえあれば問題なく利用すること自体はできるのですが、WordPressで定められているテーマの品質に対するガイドラインに反した書き方となってしまうようです。実際にガイドラインに反しているかどうかは、Theme Check(WordPressテーマレビューチームが開発しているプラグイン)などを利用して確認することができます。

WordPressで推奨されたファイル操作方法

WordPressでは、WP_FileSystemというファイル操作用のオブジェクトを使用して、ファイル操作することが推奨されています。

WP_FileSystemの使用手順

  1. Wordpressインストールディレクトリ/wp-admin/includes/file.phpの読み込み
  2. WP_Filesystemの初期化、$wp_filesystemオブジェクトの呼び出し
  3. $wp_filesystemオブジェクトのメソッドを利用してファイル操作

今回は、ファイルの読み込みと書き込みをget_contentsメソッドとput_contentsメソッドを使って行う方法を書いていこうと思います。

PHPの標準関数とWP_FileSystem、それぞれの記述方法

実際に、PHPの標準関数とWP_FileSystemをそれぞれ使ってファイル操作をする方法を記述していきます。

ファイルの読み込み

file_get_countents関数を使用したファイルの読み込みの場合
<?php
$path_name = '読み込むファイルのパス';
$sample_file = file_get_contents($path_name);
WP_FileSystemを使用したファイルの読み込みの場合
<?php
//file.phpの読み込み(ABSPATHは、WordPressのインストールされたパス名を返す定数)
require_once(ABSPATH.'wp-admin/includes/file.php');

$path_name = '読み込むファイルのパス';
if(WP_Filesystem()){
    global $wp_filesystem;
    $sample_file = $wp_filesystem->get_contents($path_name);
}

ファイルの書き込み

file_put_countents関数を使用したファイルへの書き込みの場合
<?php
$path_name = '書き込むファイルのパス';

//新規ファイルを作成する場合
$new_file_text = "新規テキスト\n";
file_put_contents($path_name,$new_file_text);

//既存のファイルに追記する場合
$add_text = "追加テキスト\n";
//FILE_APPENDフラグはファイルの最後に追記することを意味します。
//LOCK_EXフラグは他の人が同時にファイルへの書き込みをできないようにすることを意味します。
file_put_contents($path_name, $add_text, FILE_APPEND | LOCK_EX);
WP_FileSystemを使用したファイルへの書き込みの場合
<?php
//file.phpの読み込み(ABSPATHは、WordPressのインストールされたパス名を返す定数)
require_once(ABSPATH.'wp-admin/includes/file.php');

$path_name = '書き込むファイルのパス';

//新規ファイルを作成する場合
if(WP_Filesystem()){
    global $wp_filesystem;
    $new_file_text = "新規テキスト\n";
    $wp_filesystem->put_contents($path_name,$new_file_text);
}

//既存のファイルに追記する場合
if(WP_Filesystem()){
    global $wp_filesystem;
    $sample_file = $wp_filesystem->get_contents($path_name);
    $sample_file .= "追加テキスト\n";
    $wp_filesystem->put_contents($path_name,$sample_file);
}

まとめ

PHPの標準関数とWP_FileSystemを比べると、若干WP_FileSystemを使った記述方法の方が長くなりますが、この記述をすることでWordPressのガイドラインに沿った形を実現することができます。なので、WordPressでファイル操作をしたい場合は、WP_FileSystemを利用するようにした方がいいと思います。