date. 2013/2/26

category. WordPress

WordPressのカスタムフィールドの値を使用してカスタムフィールドに値を登録する方法です。

今回は、カスタムフィールドに住所の値を登録すると緯度経度の情報をカスタムフィールドに登録するようなものを作成します。

WordPressのカスタムフィールドの住所から緯度経度を登録するためには、

  1. WordPressのカスタムフィールドから住所を取得
  2. 取得した値(住所)からカスタムフィールドに登録
  3. WordPressのカスタムフィールドに登録

と、いうような流れになります。

WordPressのカスタムフィールドから住所を取得

WordPressのカスタムフィールドから住所を取得する方法です。

今回は、保存した際に自動的に緯度経度を登録していきたいので、保存のタイミングでカスタムフィールドから値を取得します。

WordPressのタイミングとして、フックというものがあります。このフックに引っ掛けて関数を動作させます。

今回の候補のフックとして、『edit_post』『save_post』『wp_insert_post』がありますが、住所のカスタムフィールドの登録後が今回の動作タイミングなので、『wp_insert_post』を使用します。

function replace_post_address($id) {
    $post = get_post($id);
    // post_typeを判定(post, page, カスタム投稿)
    if( $post->post_type == 'post' ){
	    $custom_fields = get_post_custom($id);
	    $custom_field_address = $custom_fields['address'];
	    // print_r($custom_field_address);
    }
}
add_action( 'wp_insert_post', 'replace_post_address' );

と、するとカスタムフィールド(address)が取得出来ます。

取得した値(住所)からカスタムフィールドに登録

緯度経度情報を取得するにはGoolgeのAPIを利用します。

使用方法は非常に簡単で、『http://maps.google.com/maps/api/geocode/json?sensor=false&address=住所』で使用します。

返り値はJSONで取得します。

緯度経度情報登録

後は、取得した住所を変換し、カスタムフィールドに登録すれば完成です。

function replace_post_address($id) {
    $post = get_post($id);
    // post_typeを判定(post, page, カスタム投稿)
    if( $post->post_type == 'post' ){
	    $custom_fields = get_post_custom($id);
	    $custom_field_address = $custom_fields['address'];
	    $data = @file_get_contents('http://maps.google.com/maps/api/geocode/json?sensor=false&address='.urlencode($custom_field_address[0]));

		// カスタムフィールド(_lat)がセットされているか
    	if (isset($custom_fields['_lat'][0])) {
			update_post_meta($id, '_lat', $data->results[0]->geometry->viewport->northeast->lat);
    	} else {
    		add_post_meta($id, '_lat', $data->results[0]->geometry->viewport->northeast->lat, true);
    	}

    	if (isset($custom_fields['_lng'][0])) {
			update_post_meta($id, '_lng', $data->results[0]->geometry->viewport->northeast->lng);
    	} else {
    		add_post_meta($id, '_lng', $data->results[0]->geometry->viewport->northeast->lng, true);
    	}
    }
}
add_action( 'wp_insert_post', 'replace_post_address' );

とすれば、登録出来ます。

セキュリティ面などは適宜変えて下さい。

参考サイト

関連記事