質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

2回答

5109閲覧

ACFで作成した関連タイプのフィールドにReally Simple CSV Importerでデータをいれるとエラーメッセージがでてしまう。(データはちゃんと格納されている)

kumiko

総合スコア48

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

1クリップ

投稿2017/02/27 03:59

編集2018/03/12 08:11

製造業です。
wordpressで購入実績のある部品やメーカーなどをマスタ管理するためのDBを作成しています。
今まで使っていたDBツールがなくなるため移設が目的です。

使用しているプラグインはAdvanced Custom Fieldsで必要な項目を作成し箱はできています。
データも多いのでReally Simple CSV Importerでデータを取り込んでいます。

今回やりたいことはAdvanced Custom Fieldsで作成した関連というタイプのフィールドにすでに登録されている記事へ関連記事をReally Simple CSV Importerで取り込みたいのです。

[具体的に言いますとメーカマスタを先に登録してしまって、部品マスタを登録させる際にメーカマスタからメーカを選択させたい。このとき関連フィールドの機能を活用したいのです]

Really Simple CSV Importerで普通に関連タイプで作成したカスタムフィールドの名前を入れて関連記事IDをいれてインポートすると下記のようなエラーが出ます

###エラーメッセージ

Warning: end() expects parameter 1 to be array, string given in C:\xampp\htdocs\webdb\wp-content\themes\fsvbasic\content.php on line 114

###試したこと
データ自体はカスタムフィールドの値として記事IDをいれることでちゃんと格納されていました。
1つでもカンマいれて2つ以上でも大丈夫でした。
ただしサイト上で入力したデータをみると関連フィールドの値が表示されるべき場所にエラーメッセージが出てしまっているのです。

とはいえこれを消すのは結構簡単で、編集画面に入るとちゃんと関連フィールドにはCSVでID読み込んだ記事が選択されている状態になっているので更新すれば消えます。
ただ、件数が5000件近くあり編集画面開いて更新、編集画面開いて更新、とぽちぽちやっていくには結構気が遠くなる作業です。
エラーを出さない方法、もしくは一気に更新?のような方法ご存知でしたらおねがいいたします。

###追記 関連フィールドをサイトで表示させているコード
(そもそもこのphpがエラーと言われているのでした。書かなきゃダメでしたね。)

<?php //関連(返り値は「Post Objects」) $kanren = get_field('kanren'); if($kanren){ ?> <?php foreach((array)$kanren as $value) { echo '<a href="'.get_the_permalink($value->ID).'">'.$value->post_title.'</a>'; if ($value !== end($kanren)) { echo ","; } } ?><?php }?>

** if ($value !== end($kanren)) {**
の行がエラー指摘されている
on line 114
です。

↓↓↓↓18.03.12追記↓↓↓↓↓

本件、最近またいろいろ方法を探していましたところ、元のCSVデータのほうを配列をシリアライズ化させるようなことをして格納していらっしゃる方がおられるようです。
自力で理解できないので誰かご存知の方がいるようであれば伺いたく…

http://enjoy-pcworks.com/infotech/wordpress/355

この記事のなかの
「2.データ整形を行うプラグインを作る」

というのはこの下の方に書かれたプログラムに任意の名前をつけてプラグインフォルダに格納して有効化…
なんてことすればReally Simple CSV Importerを動作させたときにかってに動くというようなことなのでしょうか…
すみませんご存知の方、お分かりになる方がいらっしゃいましたらご教授ねがいます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2017/02/27 09:05

質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
guest

回答2

0

関連記事タイトルを書き込むと

そこに入るデータはたぶん post_id の配列です。下記記事のようにカンマ区切りで入れて処理するか、記事中の $key で項目を特定してidを配列として入れてみては。

【Really Simple CSV Importerでカスタムフィールドに複数値を登録する方法 | 南紀熊野ウェブサービス(大阪、新宮市)】
http://company.nankikumano.jp/contents/tech_info/336/

こんな感じでどうでしょう。(テスト環境を作って試してくださいね)

PHP

1// functions.php 2add_filter('really_simple_csv_importer_save_meta', function( $meta, $post, $is_update ) { 3 foreach ($meta as $key => $value) { 4 if ( $key === '当該フィールド' ) { 5 // $meta[ $key ] = array( $_value ); // タイプミス 6 $meta[ $key ] = array( $value ); // 20170227 15:41修正 7 } 8 } 9 return $meta; 10}, 10, 3 ); // 未テスト

投稿2017/02/27 05:07

編集2017/02/27 06:41
kei344

総合スコア69398

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kumiko

2017/02/27 05:38

回答ありがとうございます。 いまもいろいろ試していたのですが関連記事のデータ自体はカスタムフィールドの値として記事IDをいれることでちゃんと格納されていました。1つでもカンマいれて2つ以上も格納されていました。 ただしインポート後サイト上で入力したデータをみると関連フィールドの値が表示されるべき場所にやはり上記のエラーメッセージが出てしまうのです…。 でもこのエラーメッセージを消すのは簡単で、編集画面に入るとちゃんと関連フィールドにはCSVでID読み込んだ記事が選択されている状態になっているので更新を推せば消えます。 ただ、件数が5000件近くあり編集画面開いて更新、編集画面開いて更新、とぽちぽちやっていくには結構気が遠くなる作業です。 質問がちょっと変わってしまってごめんなさい。 エラーを出さない方法、もしくは一気に更新?のような方法ご存知でしたらまたご回答おねがいいたします。
kei344

2017/02/27 05:49

それを回答してのですが・・・。 「a:1:{i:0;s:3:"842";} 」はシリアライズされた配列だと思います。配列としてデータを入れてしまえば問題ないはずなので、試してみてください。
kumiko

2017/02/27 06:34

ご回答ありがとうございます。 うーんすみません。初めて半年くらいの初心者です。 今後もちぐはぐなこと質問してしまうかもしれません…。 何卒よろしくお願いします 上記のコード試してみたところエラーメッセージは消えたのですがデータが格納されておりませんでした…。 CSV出力してみたところ様々なIDを入れても一律、 a:1:{i:0;N;} という値が格納されています。 正常なものは a:2:{i:0;s:3:"842";i:1;s:2:"33";} とか a:1:{i:0;s:4:"2608";} とかそういった値が入っております。
kei344

2017/02/27 06:40

すいませんタイプミスしていました。array( $_value ) を array( $value ) に直してみてもらえますか?
kumiko

2017/02/27 07:09

ご回答ありがとうございます。 度々すみません。データは格納されており、エラーメッセージもでません。 しかしながらやはり更新ポチしないとサイト上に表示がされません…。 以前ユーザータイプでカスタムフィールド作った時もユーザー名が出るべきところに Warning: Illegal string offset 'user_lastname' in C:\xampp\htdocs\website… というエラーがでて更新ポチすると消えて表示されるということがありました。 (その時は別の方法を考えてそのフィールドを使うのをやめてしまったのですが) 関係ないかもしれませんがなにかデータ入力時にトリガーがないとだめなフィールドタイプとかあるのかなぁなどと素人ながら考えております。
kei344

2017/02/27 16:59

登録されないということでしょうか。表示されないだけなら取得方法の問題の可能性も有ります。 追記分については end((array)$kanren) これでとりあえずエラーは出なくなると思います。
kumiko

2017/02/28 06:09

うーむ… Fatal error: Only variables can be passed by reference in C:\xampp\htdocs\webdb\wp-content\themes\fsvbasic\content.php on line 114 とでてしまい、ループ自体表示しなくなってしまいました。 最初に教えていただいたfunction.phpのコードを書いても書かなくてもおなじでした。 今とりあえず更新ボタンを一気に押すコードなど探してみたりしています。 wordpressの投稿一覧画面から標準機能としてできる一括編集、更新、ではエラー消えないです(T-T)
kei344

2017/02/28 07:33

・登録される値が管理画面からの登録と同じデータになる ・表示する この二つは問題を切り分けないといけません。間違ったデータが入っている物を表示する仕様で作っても意味が無いので、まず登録内容が正しくなるようにしてから表示については考えられてはいかがでしょうか。 また、回答欄のコードはReally Simple CSV Importerでの登録時に処理を追加する方法なので、表示とは直接関係ありません。
kumiko

2017/03/08 04:32

ありがとうございます。 すみません、他のプラグインなども試してみたりしてました。 他のプラグイン(CSV Importer)でも表示について同じ現象がおきました。登録内容はあっているのです。 すみません 前回教えていただいたのは if ($value !== end($kanren)) を if ($value !==end((array)$kanren)) に直すということでしょうか? これだとエラーでループしなくなってしまったのです…
kei344

2017/03/08 04:46

もういっそ if ($value !== end($kanren)) {} の部分を削除してしまえば表示されるのでは?
kumiko

2017/03/08 04:56

ありがとうございます エラーは消えました! 表示は…編集画面で更新すれば出てきます(^^;) ぽちぽち更新するにしてもエラーあるよりはないほうがいいからこれでいこうかな…と覚悟し始めています。
kei344

2017/03/08 05:05

Advanced Custom Fields 以外で登録してみるというのはどうでしょう。 【Custom Field Suite — WordPress Plugins】 https://ja.wordpress.org/plugins/custom-field-suite/ 【WordPress のカスタムフィールドを簡単・便利に使えるようになるプラグイン「Smart Custom Fields」作った。 – モンキーレンチ】 https://2inc.org/blog/2014/10/09/4426/ 【Really Simple CSV Importer が Smart Custom Fields に対応しました】 http://notnil-creative.com/blog/archives/3704 【Smart Custom Fields — WordPress Plugins】 https://ja.wordpress.org/plugins/smart-custom-fields/
kumiko

2017/03/09 07:32 編集

ありがとうございます。 今日新たな発見がありました。 同じコードをsingle.phpでかいたところ何もしなくても普通にリンクして表示されました! (問題の箇所はcontent.php) なんでかわからないけどとりあえずテキストならエラーがでないので今までのメーカー名分はテキストでよみこんで表示させておいて、新規は選択させるという方法をとります! (条件分岐でもしテキストのフィールドにメーカー名が入っていなかったらkanrenを表示するというようなことにしておきます。) とりあえず数千件の更新ポチポチはまぬがれそうです。
kumiko

2017/03/09 07:42

ごめんなさい 勘違いでした…(+_+)
kei344

2017/03/09 07:50

代替案として、 1. テキストフィールドを新たに作り、そこにカンマ区切りで記事IDを入れる 2. そこに入力があったら元のACFのフィールドより優先して処理する とか。
guest

0

自己解決

functions.php に以下のコードを書くことでACFでつくった関連フィールド"kanren"へのCSVでの読み込みができました。(ポチポチ更新の必要なし)

わー…5年前のお悩み。やっと解決した。5年前の私ー良かったねー。

/* ==========================================================================
csvインポート時の処理 ※コード中の"kanren"はACFで作成した関連フィールドです
========================================================================== */
function really_simple_csv_importer_all_update($post) {
// 記事ID取得
$_postID = $post->ID;

$_kanren = get_post_meta($_postID, 'kanren',true);
update_field( 'kanren', $_kanren, $_postID );

}
add_filter( 'really_simple_csv_importer_post_saved','really_simple_csv_importer_all_update', 5, 3 );

投稿2022/05/20 01:37

kumiko

総合スコア48

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問