Irgendwie fand ich in den letzten Tagen die Antwortzeiten von Google Maps auf meiner Seite www.liberal06.de deutlich zu lang. Nur zur Anzeige von ein paar roten Punkten mehrere Sekunden Perfomance-Bremse – das sollte nicht sein. Hinter all dem steckt ein WordPress Plugin: geo-mashup-plugin. So net es auch ist, standardmäßig bringt es leider nur die die JS Version zur Einbindung der Google Maps mit. Also musste das Code-Skalpell herausgeholt werden und anstatt der Standardfunktion geomashup() das folgende eingebaut werden – z.B. in das Haupttemplate wenn man das, so wie ich auf der Startseite haben möchte:
// Construct the query
$fields = ‚ID, post_title, meta_value‘;
$tables = „$wpdb->postmeta pm INNER JOIN $wpdb->posts p ON pm.post_id = p.ID“;
$where = ‚meta_key=\’_geo_location\“ . ‚ AND post_status=\’publish\“ . ‚ AND length(meta_value)>1‘;
$tables .= “ JOIN $wpdb->term_relationships tr ON tr.object_id = p.ID
JOIN $wpdb->term_taxonomy tt ON tt.term_taxonomy_id = tr.term_taxonomy_id
AND tt.taxonomy=’category'“;
$query_string = „SELECT $fields FROM $tables WHERE $where ORDER BY post_date DESC“;
$all = ‚true‘;
$limit = 8; // hier kann man entweder das Limit selber setzen oder aus der Backend-Variable nehmen
if (!($minlat && $maxlat && $minlon && $maxlon) && !$limit) {
// result should contain all posts (possibly for a category)
$all = ‚false‘;
} else if (is_numeric($limit) && $limit>0) {
$limit = $wpdb->escape($limit);
$query_string .= “ LIMIT 0,$limit“;
}
$wpdb->query($query_string);
if ($wpdb->last_result)
{
$comma = “;
$posts = $wpdb->last_result;
foreach ($posts as $post)
{
list($lat,$lng) = split(‚,‘,$post->meta_value);
// zusammensetzen der Marker (rot)
$sMap .= $comma . $lat. „,“ . $lng . „,red“;
$comma = ‚|‘;
}
}
// und das Ganze ausgeben…
echo ‚‚;
Das wars schon. Nun wird das Ganze via StaticMap von Google Maps eingebunden. Wenn man nun noch im Header das Einbinden der GoogleMaps JS Dateien unterbindet spart man wieder eine Menge JavaScript…