自作プラグイン 内に設置したJSONファイルを読み込み
ショートコードを使用することで特定画面にJSONファイルの中身を表示することが目的です。
つい2ヶ月前まで問題なかったのですが、久しぶりに見ると、エラーを吐いておりました。
debug.log などでログを確認してみると。
getProduct() から本来ならば配列を取得する予定だったのですが、 NULL になっておりました。
おそらく、WP_FIleSystem から JSONが読み込めていない状況になっておりました。
管理画面で表示するデータの編集機能があります。(格納したデータは foreach で表示 )
※データはもちろん表示されません。
WP_FIleSystem の使い方などが変更されたのでしょうか?
誤った使い方をしてるのであれば、ご指摘お願いします。
行った内容
- Wordpress ver 5.4.1 > ver 5.5.3 に更新
- getProduct() 内 $path_name を 'data/product.json'; に変更
- その他のプラグインを停止
- Xammpを立ててローカルで起動すると、動作しました。
- ロリポップサーバー内でも動作確認
ディレクトリ構造
plugin
|- data
| |- product.json
| |- product2.json
| |- product3.json
|- function.php
※パーミッションは、フォルダー(755) ファイル(644) で設定しております。
※フォルダ内には .htaccess は設置してません。
環境
- サーバー Apache/2.4.6 (CentOS)
- PHP 7.2.15
- Mac Catalina 10.15.7
- IDE PHPStorm
コード(実際の細かい処理は省略してます)
<?php // WP_Filesystem 読み込みの為 require_once(ABSPATH.'wp-admin/includes/file.php'); define( 'JSON_PATH',plugins_url().'/test/data/'); function getProduct(){ $path_name = JSON_PATH.'product.json'; if(WP_Filesystem()){ global $wp_filesystem; $products = $wp_filesystem->get_contents($path_name); $products = mb_convert_encoding($products, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); $products = json_decode($products,true); } return $products; } //取得したJSONファイルから、リスト構造に変更する処理 function productMake() { $datas = getProduct(); $html = "<ul>"; foreach($data as $data){ // 商品データからリスト(ul li)を生成 ] $html .= "</ul>"; return $html; } // 表示用 function testShow(){ ob_start(); productMake(); return ob_get_clean(); } //ショートコードを登録 add_shortcode( 'test', 'testShow' );
JSONの中身です
[ { "name": "テストA", "photo": "http://********", "explain_text": "テストです、テストです", "detail_link": "https://********", }, { "name": "テストB", "photo": "http://********", "explain_text": "テストです、テストです", "detail_link": "https://********", }, { "name": "テストB", "photo": "http://********", "explain_text": "テストです、テストです", "detail_link": "https://********", } ]
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/18 05:01
2020/11/18 05:24
2020/11/18 08:37
2020/11/18 09:24
2020/11/19 08:22
2020/11/19 13:34