質問: $line[7]; var_dump($HOGE1); //1つしか値が入っていない var_dump($HOGE2); //1つしか値が入っていない return $HOGE1 . $HOGE2 . $HOGE3; //これはWordPress上に表示されます。本来はこの後ifで他の行も表示したいです。 } unset($line); } add_shortcode('hoge_img', 'hoge_images'); ?> ``` ### 試したこと 単純にサーバー上に置いた場合とWordPressに仕込んだ場合のvar_dumpの比較。 var_dump($file);の結果 object(SplFileObject)[6366] private 'pathName' (SplFileInfo) => string 'sampledir/sample_list.csv' (length=23) private 'fileName' (SplFileInfo) => string 'sample_list.csv' (length=15) private 'openMode' => string 'r' (length=1) private 'delimiter' => string ',' (length=1) private 'enclosure' => string '"' (length=1) 変数の指定方法がまずいのかもしれないと、いろいろ試しましたが 原因が特定できませんでした。 PHPは過去独学で数年ぶりに触っているので、常識/お作法等に不備がありましたらすみません。 お手数ですがご指摘頂けますと幸いです。 ### 補足情報(言語/FW/ツール等のバージョンなど) 以下、開発環境です。(対象のWordPress環境に近いものを作成) CentOS 6(2.6.32-642.13.1.el6.x86_64) WordPress 4.5.6 PHP 5.6.30 rpm -qa |grep php php-devel-5.6.30-1.el6.remi.x86_64 php-opcache-5.6.30-1.el6.remi.x86_64 php-pecl-zip-1.13.5-1.el6.remi.5.6.x86_64 php-mysqlnd-5.6.30-1.el6.remi.x86_64 php-cli-5.6.30-1.el6.remi.x86_64 php-pdo-5.6.30-1.el6.remi.x86_64 php-5.6.30-1.el6.remi.x86_64 php-fpm-5.6.30-1.el6.remi.x86_64 php-pecl-jsonc-1.3.10-2.el6.remi.5.6.x86_64 php-pecl-jsonc-devel-1.3.10-2.el6.remi.5.6.x86_64 php-xml-5.6.30-1.el6.remi.x86_64 php-gd-5.6.30-1.el6.remi.x86_64 php-mbstring-5.6.30-1.el6.remi.x86_64 php-common-5.6.30-1.el6.remi.x86_64 php-pear-1.10.1-10.el6.remi.noarch php-process-5.6.30-1.el6.remi.x86_64 php-mcrypt-5.6.30-1.el6.remi.x86_64
回答: ``` function hoge_images() {//後々、ここに引数を入れてカテゴリ特定処理をするifで使いたい) global $file, $HOGE1, $HOGE2, $HOGE3, $HOGE4, $PHOGE5, $HOGE6, $HOGE7, $HOGE8; foreach($file as $key=>$line){ var_dump($file); //CSVが読み込まれている(結果を後半に貼ります) var_dump($line); //1行目だけが読み込まれている var_dump($key); // 0だけ入っている $HOGE1 = $line[0]; $HOGE2 = $line[1]; $HOGE3 = $line[2]; $HOGE4 = $line[3]; $HOGE5 = number_format($line[4]); $HOGE6 = $line[5]; $HOGE7 = $line[6]; $HOGE8 = $line[7]; var_dump($HOGE1); //1つしか値が入っていない var_dump($HOGE2); //1つしか値が入っていない // ここでreturnしているので、当然一行目しか出ません。 return $HOGE1 . $HOGE2 . $HOGE3; } unset($line); } ``` コード中にも書いてありますが、`foreach`のループ中でreturnしてしまっているので、当然一行目しか出ません。`var_dump`で1つしか入ってないのは当然です。(`$HOGE1`も`$HOGE2`も配列じゃありません) foreachループの中で文字列を作って、ループを抜けたあとに、returnでそれを返すようにしたらいいですね。 仕様が分からないので、なんともそれ以上答えようが無いですけど。