CPT-Filter
Für eigene Datenquellen aus Custom Post Types (CPT) stellt das Plugin ab Version 1.5 zwei Filter zur Verfügung.
dev_null_openstreetmap_enum_map_items
Mit diesem Filter werden alle verfügbaren Kartenelement aufgelistet. Diese Liste entspricht der Auswahlliste im Kartenelement des Builders.
Die Callback-Funktion kann diese Liste mit Schlüssel-Wertepaaren entsprechend befüllen.
Im Schlüssel muss dabei die Information post_type : ID enthalten sein. Die Werte für post_type und ID müssen durch einen Doppelpunkt, ohne weiteres Trennzeichen gespeichert werden. Als Wert wird der Anzeigetext für die Auswahlliste zurückgegeben.
<?
// returns a list of all available pages
// shown in bricks map element
public function filter_callback_enum_map_items($items) {
$query = array(
'post_type' => array( 'page' ),
'nopaging' => true,
'orderby' => 'title',
'post_status' => 'published',
);
$posts = get_posts($query);
foreach($posts as $p) {
$items['page:' . $p->ID] = $p->post_title . ' [page]';
}
return $items;
}
add_filter(
'dev_null_openstreetmap_enum_map_items',
'filter_callback_enum_map_items',
10, 1);
?>
dev_null_openstreetmap_[post_type]_marker_data
Mit diesem Filter werden die für das Rendering notwendigen Daten gesammelt.
Der Filter erhält zwei Parameter:
- die zu ergänzende Liste. Die ergänzte Liste muss als Rückgabewert zurück gegeben werden
- ein Wert (string/array), der eine Liste mit IDs aus der Auswahlliste enthält
Folgende verpflichtende Informationen werden erwartet:
- title – der anzuzeigende Titel im Popup, sofern kein eigener Popup-Text angegeben wird
- lat – geografischer Breitengrad
- lng – geografischer Längengrad
- ico – der Slug eines Icons, oder leer für das Standardicon
- txt – der vollständige Text für das Popup
Optional für allfällige Erweiterungen
- p – das Post_Item aus der Abfrage
Rückgabewert:
- die ergänzte Liste
<?
// return geo-information for the markers
public function filter_callback_PAGE_marker_data($list, $items){
if(is_array($items) == false)
$items = explode(',', $items);
// sanitize the data for safety
$items = array_map('intval', $items);
if(count($items) == 0)
return $list;
$query = array(
'post_type' => [ 'page' ],
'post__in' => $items,
'nopaging' => true,
);
$posts = get_posts($query);
foreach($posts as $p) {
$i = [
'title' => $p->post_title,
'lat' => '48.2062771', // latitude
'lng' => '16.3650601', // longitude
'ico' => '', // slug/empty/false
'txt' => '', // popup text
'p' => $p,
];
// prevent duplicates - insert with ID as index
$list[$p->ID] = $i;
}
return $list;
}
add_filter ( 'dev_null_openstreetmap_page_marker_data',
'filter_callback_PAGE_marker_data',
10, 2);