人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Wordpressの投稿に、アドバンスカスタムフィ?ルドの中の「mapフィールド」を追加しています。
このmapフィールドは、住所を入力するだけで入力した住所にマ?カ?を立てることができ便利なのですが、csvファイルからの投稿を登録した場合、このmapフィールドに住所情報が入っていかず困っています。
(手入力で登録すれば問題ないのですが)
調べたところ、下記URLに答えが書かれていそうなのですが、ちょっと内容が難しくてわからず困っています。
https://ja.forums.wordpress.org/topic/134082?replies=5

上記URLペ?ジに書かれている事を噛み砕いて解説していただくか、ズバリな解決方法をご提示いただけませんでしょうか。
なにとぞよろしくお願いいたします。
ちなみに上記URLペ?ジの質問者「eiji3」は私です。

1463417211
●拡大する

●質問者: mocchi
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

質問者から

記載URLペ?ジの質問者さんと同じく、CSVファイルのインポ?トは「Really Simple CSV Importer」というプラグインを使っております。


1 ● a-kuma3
●1000ポイント ベストアンサー

こちらの方がズバリだと思います。

カスタマイズ例にあるコードで、44行目の 'field_54899effa7dbe' を、自分のところのフィールドタイプ:Google Map のフィールドキーに書き換えて、プラグインを有効にして CSV をインポートすれば良いんじゃないかと。

<?php
 ...
 $meta['field_54899effa7dbe'] = $gmap_field; // please change the field key to yours



追記です。

以下を修正しました。

まず、フィルターに指定するフィールドキーです。フィールド名ではありません。
カスタムフィールドで、表示オプションの Show Field Key を「はい」に設定します。
フィールドの項目に「フィールドキー」が表示されます。
「マップ住所」の行に表示されている field_573a04132b7dd を使います。

もう一点、フィールドタイプが「テキスト」の経度はフィールド名が lon 。
フィールドタイプが「Google Map」の方は、経度は lng です。
この差をフィルターで変換してあげる必要があります。

このふたつの修正を入れると、こうなります。

<?php
 ...
 public function convert_gmap($meta, $post, $is_update) {
 
 // serialize metadata
 $gmap_field = array();
 if (isset($meta['lat']) && isset($meta['lon'])){ // ★ lon
 $gmap_field['lat'] = $meta['lat'];
 $gmap_field['lng'] = $meta['lon']; // ★ lon → lng
 $gmap_field['address'] = $meta['address'];
// unset($meta['lat']); // ★ テキストタイプにも
// unset($meta['lng']); // 設定するので、削除しない
// unset($meta['address']);
 }
 $meta['field_573a04132b7dd'] = $gmap_field; // ★ field_573a04132b7dd
 
 return $meta;
 }

テキストタイプの項目から、Google Map タイプの項目を作るようにしたので、CSV の方は、住所を重複して持つ必要がありません。
なので、CSV は以下のように、末尾から三番目の googlemap を削除したものを使います。

post_title,post_status,post_type,post_category,address,Name,lat,lon
和食たたみ,publish,post,1,東京都世田谷区成城6丁目26-7,和食料理店,35.64398,139.596808

2016年5月18日 09:02 投稿のデータが、実際に取り込んだものになります。


本番のサイトでは、フィールドキーがテスト用サイトと異なっていると思います。
本番のサイトで使うときには、そこを注意してください。


mocchiさんのコメント
ご回答をいただきましてありがとうございます。いつもお世話になります。 ご提示いただいたURLペ?ジは内容といいコ?ドといい、そのままズバリな記載内容です。 ありがとうございます。 さっそくテストサイトにて、こちらのペ?ジに記載のコ?ドのフィ?ルドキ?部分を、'field_54899effa7dbe'から'googlemap'へ書き換えたのち、プラグインにして有効化しました。 そのあと、CSVファイルから実際に登録してみようとCSVファイルからデ?タをインポ?トしたのですが、やはりGoogleMapフィールドへの住所入力のみがうまくいきません。 それ以外のデ?タはうまく読み込め、新規投稿じたいはできているのですが、GoogleMapフィールドのみが空欄になってしまうのです(ここに住所を入れたいです)。 これは、CSVファイル側に問題があるのかもとも思いまして、CSVファイルの内容もここにアップさせてください。 GoogleMapフィールド部分への書き方がマズかったりするでしょうか。 以下がCSVファイルの中身で、後ろから3番目がGoogleMapフィールドへ入力したいデ?タ(住所)となっています(addressというカスタムフィ?ルドにも住所を入れているので見にくくてすいません)。 >|| post_title,post_status,post_type,post_category,address,Name,googlemap,lat,lon 和食たたみ,publish,post,1,東京都世田谷区成城6丁目26-7,和食料理店,東京都世田谷区成城6丁目26-7,35.64398,139.596808 ||<

a-kuma3さんのコメント
回答に追記しました。

mocchiさんのコメント
!! ありがとうございます、大変勉強になりました。 フィ?ルドキ?を学ぶことができました。ありがとうございました。 おかげさまでCSVファイルからGoogleMapフィールドを含んだデ?タをインポ?トできるようになり喜んでおります。 いつもいつもお世話さまです。 ズバリバッチリ解決しました。ベストアンサ?にさせていただき、これで質問を終了いたします。 本当にありがとうございました。 ちなみに以下のことは仕様でしょうか このGoogleMapフィールドに住所が入力されてないpostがひとつでもあったら、トップペ?ジにあるマップ表示がされなくなってしまいます。 そのGoogleMapフィールドに住所が入力されてないpostだけがマップに表示されないというのではなく、トップペ?ジのマップが表示されなくなってしまうのです。 (ただ、トップペ?ジにある絞り込みフォ?ムに住所を入れ、カテゴリ?選択で、GoogleMapフィールドに未入力のpostを除外するように絞り込みをすれば、マップは表示されます) GoogleMapフィールドに住所が入力されてないpostを削除すれば全体的な表示が元に戻るので、GoogleMapフィールドがカギなのだろうなと思っています。

a-kuma3さんのコメント
>> このGoogleMapフィールドに住所が入力されてないpostがひとつでもあったら、トップペ?ジにあるマップ表示がされなくなってしまいます。 << 今、テストサイトで「世田谷」を入れたときにマップが出ないのは、緯度、経度が入ってない、というよりも googlemap の項目自体がないから、php でエラーになっちゃってます。 「ジ?ンズショップLIver」の投稿は googlemap が空文字列で、最初の「和食たたみ」の方は空の配列が返ってきてます。 大雑把ですけど、こんな感じの処理を入れると住所が入ってない店舗の情報は飛ばして処理するようになります。 >|php| <?php $googlemap = get_field('googlemap'); if (! $googlemap) { // マップ住所が登録されていないこともある continue; } ?> ||< # もうちょっと手を加える必要があるなら、ループの処理自体 書き換えてしまいたいんだが <nobr><tt>:-)</tt></nobr>

mocchiさんのコメント
質問と回答のレベル差がすごすぎて色んな意味で泣きそうです(笑) ありがとうございます!本当に助かります!

a-kuma3さんのコメント
ちょっとだけ状況を確認するつもりだったのです。 原因だけ分かったら、質問が足されるのを待ってポイントをせしめてやれとか思ったのですが(ナンテネ) 動作環境があると、はかどります <tt>:-)</tt>

mocchiさんのコメント
またまた?(笑) しかしながら毎度あまりに質の高い回答をいただくものでポイントど-ぞど-ぞでした(笑)。 一連の質問にハイレベルな回答付きでおつきあいいただきまして誠にありがとうございました。

mocchiさんのコメント
現状では、csvから'googlemap'に住所を入力するには、緯度経度(lat、lon)が必須になっているようで、以下のように緯度経度を省いたcsvファイルでは'googlemap'に住所が入っていかないようなのです。 >|| post_title,post_status,post_type,post_category,address,Name 和食たたみ,publish,post,1,東京都世田谷区成城6丁目26-7,和食料理店 ||< できることでしたら、上記のように緯度経度を省いたcsvで住所を入力できませんでしょうか。 手入力と同じく、住所の入力のみでマ?カ?を表示できればいいなと思っておりまして、できることでしたら教えていただければありがたいです。 a-kuma3さんからのみご回答をいただければ満足でして、ポイントは直接送らせていただく形をとりたいと思っています。 お手すきの折があればよろしくお願いいたします。

a-kuma3さんのコメント
>> できることでしたら、上記のように緯度経度を省いたcsvで住所を入力できませんでしょうか。 手入力と同じく、住所の入力のみでマ?カ?を表示できればいいなと思っておりまして、できることでしたら教えていただければありがたいです。 << ちょっと、調べました。 まず、この回答で使った Really Simple CSV Importer のフィルターですが、緯度と経度が入っているときに Google Map タイプのフィールドに値を設定するようにしています。 そのチェックを外して、住所だけでも設定するように変更してみましたが、テーブルには値が入るものの、住所だけだとマップの表示はデフォルトのままです。 Advanced Custom Fields のソースを見てみると、以下のような判定があり緯度か経度が入っていないと取り込まれません。 advanced-custom-fields/core/fields/google-map.php >|php| <?php ... function update_value( $value, $post_id, $field ) { if( empty($value) || empty($value['lat']) || empty($value['lng']) ) { return false; } // return return $value; } ||< 記事の編集から住所を入力して検索をした場合の処理は、javascript でやっています。 前の質問で使った google.maps.Geocoder を利用しています。 advanced-custom-fields/js/input.js Geocoder は、Web API も用意されているので php から呼び出すことも可能だとは思いますが、 - それなりに重いはず。CSV をインポートするときに呼び出すのは、件数次第だけどちょっとためらわれる。 - javascript と同じように回数の制限があるはず。インポートの処理で待ちをかけるのは良くないと思う。 という懸案があります。 CSV で投稿(データ)をインポートするのは、Excel などで店舗情報を管理しているからだと思います。 管理用の Excel 上で VBA を使って緯度・経度を埋め込んで、そのデータをインポートする、というのはどうでしょうか。 以前、別の方の質問で、このような回答をしたことがあります。 http://q.hatena.ne.jp/1437189907#a1249969 Geocoding API は、Google Map と *結合して* 使えとあるので、厳密にはライセンス違反かな。 Yahoo! にも API はあります。 http://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/geocoder.html どちらにしても、利用回数制限はありますが、回数制限に達したら時間をおいて、また実行を繰り返せば良いでしょう。

mocchiさんのコメント
なるほど、ありがとうございます。 csvファイルからの入力は色んな問題をはらんでますね。 私も自分なりに色々と調べようとするのですが、有益な情報に辿り着くことができず助かりました。 別の方へされた回答のペ?ジの内容も素晴らしいですね。参考にさせていただきます。 また、ライセンスのことについても勉強になりました、ありがとうございます。 ポイント送信の反映に時間がかかったらごめんなさい。 いつもありがとうございます!

a-kuma3さんのコメント
ポイント届きました。 ありがたく頂戴いたします m(_ _)m
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ