WP_Filesystem_Base クラスの使い方|説明・引数・注意点

説明

WP_Filesystem_Base は、サーバー上のファイルを、権限を考慮して安全に読み書きするためのクラスです。WP_Filesystem() で初期化して使います。

基本構文

WP_Filesystem()

引数

  • get_contents( $file ):ファイルを読み込む
  • put_contents( $file, $data ):ファイルに書き込む
  • mkdir( $path ):ディレクトリを作る
  • delete( $path ):削除する

戻り値

グローバルの $wp_filesystem を使います。

使い方(サンプル)

global $wp_filesystem;
require_once ABSPATH . 'wp-admin/includes/file.php';
WP_Filesystem();
$text = $wp_filesystem->get_contents( $path );

注意点

  • FTP情報が必要になる環境があります。
  • 単純なファイル操作は、PHP標準関数で済むことも多いです。

実務での使いどころ

  • WordPressの方法で、ファイルの読み書き・作成・削除を、行うとき(global $wp_filesystem)。
  • サーバーのファイルの所有者や、権限の違いを、吸収して、扱うとき。

よくあるミスと対処

  • WP_Filesystem() で、初期化する前に、$wp_filesystem を使っている。null になる。
  • WP_Filesystem() が失敗(false)しても、$wp_filesystem は設定済みのままになる。接続できていないのに使うと、定数 FS_CHMOD_FILE が未定義で、エラーになる。WP_Filesystem() の戻り値で、判定する。
  • 管理画面の外(フロントやcron)で、必要なファイル(wp-admin/includes/file.php)を、読み込んでいない。
  • アップロードフォルダなど、単純なファイルの読み書きに、PHPの file_put_contents() で足りる場面でも、複雑にしている。
  • ファイルシステムの認証情報(FTPなど)が必要な環境を、考えていない。

NG例

global $wp_filesystem;
$wp_filesystem->put_contents( $path, $data ); // WP_Filesystem() で初期化していない

OK例

require_once ABSPATH . 'wp-admin/includes/file.php';
global $wp_filesystem;
if ( WP_Filesystem() ) {
	$wp_filesystem->put_contents( $path, $data, FS_CHMOD_FILE );
}
// false のときは、認証情報(request_filesystem_credentials)が必要な環境

使い分け早見表

やりたいこと 使うもの
WordPressの方法で、ファイルを扱う $wp_filesystem(WP_Filesystem_Base)
アップロードされたファイルを処理する wp_handle_upload()
単純なファイルの読み書き PHPの file_get_contents() など

関連項目

wp_upload_dir()、wp_handle_upload()

公式リファレンス:WP_Filesystem_Base | WordPress Developer Resources

コメント

タイトルとURLをコピーしました