【WordPress】Advanced Custom Fieldsで設定したGoogleマップ情報をReally Simple CSV Importerを使って一括登録する方法

【WordPress】Advanced Custom Fieldsで設定したGoogleマップ情報をReally Simple CSV Importerを使って一括登録する方法です。

フィールド名は「住所」として、functions.phpに以下のサンプルコードを追記してください。

Googleマップキーを取得して設定しないと動作しないのでご注意ください。

<?php

define("GOOGLE_MAP_KEY", "****************************************");

add_action('acf/init', function() {
    acf_update_setting('google_api_key', GOOGLE_MAP_KEY);
});

add_filter("really_simple_csv_importer_save_meta", function($meta, $post, $is_update) {

    if (isset($meta["住所"])) {
        $url = sprintf("https://maps.googleapis.com/maps/api/geocode/json?address=%s&key=%s", urlencode($meta["住所"]), GOOGLE_MAP_KEY);

        $context = stream_context_create([
            'http' => ['ignore_errors' => true]
        ]);
        $response = file_get_contents($url, false, $context);

        $pos = strpos($http_response_header[0], '200');
        if ($pos === false) {
            //緯度経度が取得できなかった場合は登録しない;
            return $meta;
        }

        $jsonData = json_decode($response, true);

        $lat = $jsonData["results"][0]["geometry"]["location"]["lat"];
        $lng = $jsonData["results"][0]["geometry"]["location"]["lng"];

        $meta["住所"] = [
            "address" => $meta["住所"],
            "lat" => $lat,
            "lng" => $lng
        ];
    }

    return $meta;
}, 10, 3);

あとはインポートするCSVファイルに「住所」項目を追加してあげればOKです。

1件のコメント

  1. はじめまして。

    サイトページからコピペでVBAのマクロをなんとなくで作る程度レベルのプログラミング初学者です。

    WordPressで不動産サイトを作成している中で、2万件に近い物件データを登録することになり、
    各物件の所在地を示すGoogleマップをカスタムフィールドで表示したく、
    方法を探していたところこちらの記事にたどり着きました。

    記載いただいているコードを参考に、『ACF』と『Really Simple CSV Importer』を活用してCSVにて住所を一括でインポートしてみました。

    実際に各住所情報がカスタムフィールドに入力された状態にはなりましたが、
    『入力窓に入力はされたけどもエンターが押されていない状態』になってしまいます。

    なので、マップを記事に表示反映させるためには管理画面の記事編集画面から、
    住所が入力されたマップ用のカスタムフィールド入力窓の箇所を見に行き、
    ひとつひとつをエンターを押して読み込ませたあと、更新ボタンを押さなければいけなくて、
    記載のコードですと、この状態が完結動作なのでしょうか?

    それとも、こちら側で何かしらのエラーが起きていて、本来ならばCSVでインポート後は
    上記の追加作業を行うことなく、問題なくサイト表示側でGoogleマップが表示されるものなのでしょうか?

    住所が入力された入力窓で『エンターを押す』→『記事を更新する』と問題なくサイト表示でGoogleマップは表示されます。

    //CSVインポートでGoogleマップを表示する設定
    define(“GOOGLE_MAP_KEY”, “GoogleマップのAPIキー”);

    add_action(‘acf/init’, function() {
    acf_update_setting(‘google_api_key’, GOOGLE_MAP_KEY);
    });

    add_filter(“really_simple_csv_importer_save_meta”, function($meta, $post, $is_update) {
    if (isset($meta[“ACFのフィールド名”])) {
    $url = sprintf(“https://maps.googleapis.com/maps/api/geocode/json?address=%s&key=%s”, urlencode($meta[“ACFのフィールド名”]), GOOGLE_MAP_KEY);

    $context = stream_context_create([
    'http' => ['ignore_errors' => true]
    ]);
    $response = file_get_contents($url, false, $context);

    $pos = strpos($http_response_header[0], '200');
    if ($pos === false) {
    //緯度経度が取得できなかった場合は登録しない;
    return $meta;
    }

    $jsonData = json_decode($response, true);

    $lat = $jsonData["results"][0]["geometry"]["location"]["lat"];
    $lng = $jsonData["results"][0]["geometry"]["location"]["lng"];

    $meta["ACFのフィールド名"] = [
    "address" => $meta["ACFのフィールド名"],
    "lat" => $lat,
    "lng" => $lng
    ];
    }

    return $meta;

    }, 10, 3);

    念の為『ACFのフィールド名』の箇所を『ACFのフィールドキー』に変更してみても解決できずでした。

    もし差し支えなければ、不具合箇所の指摘、もしくはCSVインポートでそのままGoogleマップが表示される方法を
    ご教示いただけないでしょうかm(_ _)m

    どうかよろしくお願いいたします。

お気軽にコメントをどうぞ

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください