PHPでファイルの読み書きをする場合、file_get_contents関数
やfile_put_contents関数
などを利用したりしますが、 WordPressではこのようなPHPの標準関数を利用するのは非推奨となっているようです。 パーミッションさえあれば問題なく利用すること自体はできるのですが、WordPressで定められているテーマの品質に対するガイドラインに反した書き方となってしまうようです。実際にガイドラインに反しているかどうかは、 Theme Check(WordPressテーマレビューチームが開発しているプラグイン) などを利用して確認することができます。
WordPressで推奨されたファイル操作方法
WordPressでは、WP_FileSystemというファイル操作用のオブジェクトを使用して、ファイル操作することが推奨されています。
WP_FileSystemの使用手順
- Wordpressインストールディレクトリ/wp-admin/includes/file.phpの読み込み
- WP_Filesystemの初期化、$wp_filesystemオブジェクトの呼び出し
- $wp_filesystemオブジェクトのメソッドを利用してファイル操作
今回は、ファイルの読み込みと書き込みをget_contentsメソッドとput_contentsメソッドを使って行う方法を書いていこうと思います。
PHPの標準関数とWP_FileSystem、それぞれの記述方法
実際に、PHPの標準関数とWP_FileSystemをそれぞれ使ってファイル操作をする方法を記述していきます。
ファイルの読み込み
<?php
$path_name = '読み込むファイルのパス';
$sample_file = file_get_contents($path_name);
<?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);
}
ファイルの書き込み
<?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);
<?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を利用するようにした方がいいと思います。