はじめに
WordPressの子テーマに配置したCSVファイルを読み込み、JavaScript(jQuery)とPHPを活用してデータを取得・表示します。
この記事では、この方法について説明します。
実装手順
JavaScriptで実装する場合
以下にコード例を示します。
jQuery(function ($) {
// CSVファイルを取得して配列に変換
function csvToArray(filename) {
// XMLHttpRequestオブジェクトを生成して同期通信でファイルをリクエスト
let srt = new XMLHttpRequest();
srt.open("GET", filename, false);
try {
srt.send(null);
} catch (err) {
console.log(err);
return [];
}
// レスポンステキストを改行で分割
let csletr = [];
let lines = srt.responseText.split(/\r?\n/);
// 各行をカンマで分割して配列に格納
for (let i = 0; i < lines.length; i++) {
let cells = lines[i].split(',');
if (cells.filter(c => c.trim() !== '').length > 1) {
csletr.push(cells);
}
}
return csletr;
}
// CSVファイルを取得してコンソールに出力
let csvData = csvToArray('/wp-content/themes/cocoon-child-master/test.csv');
console.log(csvData);
});
補足
a1,b1
a2,b2
上記のCSVファイルを取得した場合、以下のように配列として格納されます。
[
["a1","b1"],
["a2","b2"]
]
PHPで実装する場合
PHPの関数を使用
以下にコード例を示します。
CSVファイルを1行ずつ取得する処理を実装します。
add_shortcode('my_test', function ($atts) {
// 子テーマのディレクトリを基準にCSVファイルのパスを取得
$csv_file_path = get_stylesheet_directory() . '/test.csv';
// CSVファイルが存在しない場合は終了
if (!file_exists($csv_file_path)) {
return '';
}
// CSV読み込みと空行スキップを設定
$file = new SplFileObject($csv_file_path);
$file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);
// データ格納用の配列を初期化
$data = [];
// CSVの各行を取得
foreach ($file as $line) {
// 2列以上ある行を連想配列として追加
if (is_array($line) && count($line) >= 2) {
$data[] = [
'a' => $line[0],
'b' => $line[1],
];
}
}
// 現時点では処理結果の出力を控えるため空文字を返却
return '';
});
WP_Filesystemを使用
直接PHPのfile_get_contents()やfopen()といった関数を用いてファイル操作を行うと、サーバーの設定やファイル権限の違いにより動作が不安定になったり、権限不足でエラーが発生する可能性があります。
そのため、WordPressでは環境差異を吸収し、より安全にファイル操作を行うために、WP_Filesystemクラスの使用が推奨されています。
以下に上記コードの修正を示します。
add_shortcode('my_test', function ($atts) {
// WP_Filesystemを初期化
global $wp_filesystem;
// ファイルシステムが初期化されていない場合はインクルードして初期化を実行
if (empty($wp_filesystem)) {
require_once ABSPATH . 'wp-admin/includes/file.php';
WP_Filesystem();
}
// CSVファイルのパスを取得
$csv_file_path = get_stylesheet_directory() . '/test.csv';
// CSVファイルの存在を確認
if (!$wp_filesystem->exists($csv_file_path)) {
return '';
}
// CSVファイルの内容を取得
$csv_content = $wp_filesystem->get_contents($csv_file_path);
// 行ごとに分割して空行と前後の空白を除去
$lines = array_filter(array_map('trim', explode("\n", $csv_content)));
// データ格納用の配列を初期化
$data = [];
// 各行をCSVとしてパース
foreach ($lines as $line) {
$fields = str_getcsv($line);
// 2列以上ある行を連想配列として追加
if (count($fields) >= 2) {
$data[] = [
'a' => $fields[0],
'b' => $fields[1],
];
}
}
return '';
});
さいごに
今回紹介した方法を使えば、WordPressの子テーマに配置したCSVファイルをJavaScript(jQuery)とPHPの両方で読み込むことが可能です。
用途に応じて適切な方法を選び、WordPressサイトにCSVデータを活用してください。

