I want to share my dev on a mashup with "WP Geo" plugin.
http://wordpress.org/extend/plugins/wp-geo/screenshots/
WP Geo allows to set a physical location for a post, fills 2 custom fields with latitude and longitude.
I needed to show a map, move a marker, fill latitude & longitude fields, in a GravityForms form.
A screenshot of my form : http://dl.dropbox.com/u/15052756/cap-255.png
Here how to do that :
1/ Add a GF field "Section break" and edit the CSS class option with "wpgeo"
2/ Add a GF field "custom field" and edit the custom field name with _wp_geo_latitude
3/ Add a GF field "custom field" and edit the custom field name with _wp_geo_longitude
4/ Install "WP Geo" plugin http://wordpress.org/extend/plugins/wp-geo/
5/ Put the custom code in your functions.php
add_filter("gform_pre_render", "gravityforms_wpgeo_mashup");
function gravityforms_wpgeo_mashup($form) {
//REPLACE 1 with your actual form id
$my_geo_form = 1;
if($form["id"] !=$my_geo_form)
return;
// find IDs of latitude&longitude custom fields
foreach($form["fields"] as &$field){
if($field["postCustomFieldName"]=="_wp_geo_longitude") $field_lng = $field["id"];
if($field["postCustomFieldName"]=="_wp_geo_latitude") $field_lat = $field["id"];
//print_r($field);
}
// show map only if latitude&longitude custom fields exist
if($field_lng && $field_lat ) :
// load "WP Geo" plugin
require_once( WP_PLUGIN_DIR . '/wp-geo/wp-geo.php' );
global $wpgeo;
$wpgeo = new WPGeo();
$zoom = 2;
$map = $wpgeo->mapScriptsInit( 20, 0,$zoom, true, false );
$map .='
<input type="hidden" name="wpgeo_map_settings_zoom" id="wpgeo_map_settings_zoom" value="" />
<input type="hidden" name="wpgeo_map_settings_type" id="wpgeo_map_settings_type" value="" />
<input type="hidden" name="wpgeo_map_settings_centre" id="wpgeo_map_settings_centre" value="" />
<input name="wp_geo_latitude" type="hidden" size="25" id="wp_geo_latitude" value="" />
<input name="wp_geo_longitude" type="hidden" size="25" id="wp_geo_longitude" value="" />
<script type="text/javascript">
<!--
jQuery(document).ready(function() {';
$map .='var my_geo_form= '.$my_geo_form.';';
$map .='var field_lng= '.$field_lng.';';
$map .='var field_lat= '.$field_lat.';';
$map .='
jQuery("#wp_geo_map").click(function(e) {
jQuery("#input_"+my_geo_form+"_"+field_lat).val(jQuery("#wp_geo_latitude").val());
jQuery("#input_"+my_geo_form+"_"+field_lng).val(jQuery("#wp_geo_longitude").val());
});
});
-->
</script>
<div id="wp_geo_map" style="width:auto; height:400px"></div>';
// find ID of section with cssClass "wpgeo" and put the map into description
foreach($form["fields"] as &$field){
if($field["cssClass"]=="wpgeo")$field["description"].=$map;
}
endif;
return $form;
}
6/ Edit the ID of your form, in the code
That's all !