はじめに
最近、Plugin Check というプラグインチームが作成したプラグインで自分のプラグインをチェックしているのですが、以下の様な警告が出てきます。
「json_encode を、wp_json_encode にしなさい」というのと、「fopen、fclose、fputcsv などの php のファイルシステムは使用せずに、WP_Filesystem を使用しなさい」というのが主です。
WP_Filesystem に関しては、テーマなどで、file_get_contents、file_put_contents などの代わりに使用するように推奨していたようですが、プラグインに関しても推奨するようになってきたのかという感じです。しかし、必ずしもすべてこの通りにしなければならないというものでもないようで、その辺りの事が、FAQ に書かれています。実際、上記の非推奨のものを使用していてトラブルになったおぼえはありません。
自分の場合には、CSV 出力関連ですが、WP_Filesystem には、fputcsv の代替えのものがありません。file_put_contents の代替えのものはあるのですがコードが煩雑になり遠回りになってしまいます。そこで、SplFileObject クラス を使用してみたところ、Plugin Check に怒られなく?なりました。
コード
$csvs は、CSV にするための配列とします。$csv_file は、フルパスを含むファイル名です。フィルターに関しては無くても動作しますが、Windows の Excel で直接開きたい場合には、必要です。
fputcsv を用いたコード
$f = fopen( $csv_file, 'w' );
stream_filter_prepend( $f, 'convert.iconv.utf-8/cp932//TRANSLIT' );
if ( $f ) {
foreach ( $csvs as $line ) {
fputcsv( $f, $line );
}
}
fclose( $f );
SplFileObject クラスを用いたコード
$filter = urlencode( 'convert.iconv.utf-8/cp932//TRANSLIT' );
$file = new SplFileObject( 'php://filter/write=' . $filter . '/resource=' . $csv_file, 'a' );
foreach ( $csvs as $line ) {
$file->fputcsv( $line );
}
$file = null;
コメントを残す