Zum Inhalt springen

Filter & Actions: Beispiele

WP-ImmoMakler stellt zahlreiche WordPress-Filter-Hooks und Action-Hooks bereit, mit denen Sie Ausgaben und Importer-Verhalten aus eigenem Code heraus anpassen können. Alle Code-Beispiele gehören in die Datei /wp-content/plugins/immomakler-child/functions.php Ihres WP-ImmoMakler Child-Skin-Plugins.

Nach dem Absenden des Kontaktformulars zur einer eigenen Bestätigungsseite weiterleiten:

add_filter('immomakler_contactform_mailsent', 'immomakler_mailsent', 10, 3);
function immomakler_mailsent($text, $requested_items, $values) {
$objektid = $requested_items[0];
return $text . '<script>location.href="/anfrage-gesendet/?id=' .
get_post_meta($objektid, 'objektnr_extern', true) . '";</script>';
}

Analytics-Events bei Formular-Einsendung auslösen

Abschnitt betitelt „Analytics-Events bei Formular-Einsendung auslösen“

Für den Standardfall gibt es unter WP-ImmoMakler → Einstellungen → Kontaktformular die Option “Analytics-Event bei Formular-Versand” – damit ist kein eigener Code nötig, siehe Kontaktformular konfigurieren. Die folgenden Beispiele eignen sich, wenn Sie zusätzliche, individuelle Event-Parameter benötigen.

add_filter('immomakler_contactform_mailsent',
'immomakler_contactform_mailsent_analytics_event', 10, 2);
function immomakler_contactform_mailsent_analytics_event($response, $requested_items) {
return $response . '<script>if (typeof gtag === "function") { gtag("event", "direktanfrage_versendet", { objekt_id: "' .
esc_js(get_post_meta($requested_items[0], 'objektnr_extern', true)) . '" }); }</script>';
}
add_filter('immomakler_contactform_mailsent',
'immomakler_contactform_mailsent_gtm_event', 10, 2);
function immomakler_contactform_mailsent_gtm_event($response, $requested_items) {
return $response . '<script>window.dataLayer = window.dataLayer || [];
window.dataLayer.push({ event: "form_submit_wp_immomakler",
objekt_id: "' . esc_js(get_post_meta($requested_items[0],
'objektnr_extern', true)) . '" });</script>';
}

Damit benutzerdefinierte Meta-Felder in WP_Query-Suchanfragen berücksichtigt werden:

add_filter('immomakler_searchable_postmeta_keys',
'custom_immomakler_searchable_postmeta_keys');
function custom_immomakler_searchable_postmeta_keys($immomakler_metakeys) {
$immomakler_metakeys[] =
'verwaltung_objekt-user_defined_simplefield-objekt_des_tages';
return $immomakler_metakeys;
}

Slider-basierte Suchfelder für Fläche, Zimmerzahl und Preis konfigurieren:

add_filter('immomakler_search_enabled_ranges',
'my_immomakler_search_ranges');
function my_immomakler_search_ranges($ranges) {
return array(
'immomakler_search_size' => array(
'label' => 'Fläche',
'slug' => 'qm',
'unit' => 'm²',
'decimals' => 0,
'meta_key' => 'flaeche',
'slider_step' => 5,
),
'immomakler_search_rooms' => array(
'label' => 'Anzahl Zimmer',
'slug' => 'zimmer',
'unit' => '',
'decimals' => 1,
'meta_key' => 'anzahl_zimmer',
'slider_step' => 0.5,
),
'immomakler_search_price_rent' => array(
'label' => 'Kaltmiete',
'slug' => 'kaltmiete',
'unit' => '€',
'decimals' => 0,
'meta_key' => 'kaltmiete',
'slider_step' => 100,
),
'immomakler_search_price_buy' => array(
'label' => 'Kaufpreis',
'slug' => 'kaufpreis',
'unit' => '€',
'decimals' => 0,
'meta_key' => 'kaufpreis',
'slider_step' => 25000,
),
);
}
add_filter('immomakler_image_sizes', 'custom_immomakler_image_sizes');
function custom_immomakler_image_sizes($images_sizes) {
$images_sizes['immomakler-archive-thumb'] = [
'width' => 350, 'height' => 250, 'crop' => false,
];
$images_sizes['immomakler-archive-thumb-big'] = [
'width' => 475, 'height' => 300, 'crop' => true,
];
$images_sizes['immomakler-archive-big'] = [
'width' => 900, 'height' => 600, 'crop' => ['center', 'top'],
];
return $images_sizes;
}

Geben Sie als Höhe möglichst mindestens das 1,5-fache der Breite an (ohne Zuschnitt). Ist die Höhe kleiner als die Breite, begrenzt bei querformatigen Fotos die Höhe das Bild und es wird schmaler erzeugt als angegeben – in der Darstellung wird es dann unscharf hochskaliert. Näheres unter Immobilienbilder & Verarbeitung.

Standardmäßig bleibt das ursprüngliche Veröffentlichungsdatum erhalten. Um das Änderungsdatum bei jedem Import-Update zu aktualisieren:

add_filter('immomakler_preserve_post_date_on_update', '__return_false');
add_filter('immomakler_mark_foreign_countries', '__return_true');
add_filter('immomakler_object_terms_types',
'custom_immomakler_object_terms_types', 10, 2);
function custom_immomakler_object_terms_types($object_types, $openimmo_data) {
if ($openimmo_data['gewerbe']) {
$object_types[] = 'Gewerbe';
}
if ($openimmo_data['verwaltung_objekt-user_defined_simplefield-xyz'] == 'PREMIUM') {
$object_types[] = 'Premiumimmobilie';
}
return $object_types;
}
add_filter('immomakler_object_terms_nutzungsart',
'custom_immomakler_object_terms_nutzungsart', 10, 2);
function custom_immomakler_object_terms_nutzungsart($object_nutzungsart, $openimmo_data) {
if ($openimmo_data['verwaltung_objekt-user_defined_simplefield-xyz'] == 'PRIVAT') {
$object_nutzungsart[] = 'Privat';
}
if ($openimmo_data['verwaltung_objekt-user_defined_simplefield-xyz'] == 'INSTITUTIONELL') {
$object_nutzungsart[] = 'Institutionell';
}
return $object_nutzungsart;
}

Beispiel: eine Postleitzahl-Taxonomie anlegen und beim Import automatisch befüllen:

add_action('init', 'custom_immomakler_register_taxonomies');
function custom_immomakler_register_taxonomies() {
register_taxonomy('immomakler_search_plz', 'immomakler_object', array(
'labels' => array(
'name' => _x('Postleitzahlen', 'taxonomy general name'),
'singular_name' => _x('Postleitzahl', 'taxonomy singular name'),
'all_items' => _x('Alle Postleitzahlen', 'taxonomy choose all'),
),
'rewrite' => array(
'slug' => 'immobilien-plz',
'hierarchical' => false,
'with_front' => false,
),
'hierarchical' => false,
'query_var' => 'plz',
'public' => true,
'show_ui' => true,
));
}
add_action('immomakler_after_post_create', 'custom_immomakler_index', 10, 2);
function custom_immomakler_index($post_id, $openimmo_data) {
if (!empty($openimmo_data['plz'])) {
wp_set_object_terms($post_id, $openimmo_data['plz'], 'immomakler_search_plz');
}
}
PLUS

Mit dem Filter immomakler_searchagents_validate_criteria legen Sie eigene Regeln fest, welche Suchkriterien ein Suchauftrag haben darf. WP-ImmoMakler wendet den Filter an, bevor ein Suchauftrag angelegt oder geändert und bevor eine E-Mail verschickt wird. Geben Sie ein WP_Error zurück, lehnt WP-ImmoMakler den Suchauftrag ab und zeigt dem Interessenten die Meldung des Fehlers an. Geben Sie null zurück, wird der Suchauftrag angenommen.

Der Filter erhält drei Parameter:

ParameterInhalt
$errorDas Ergebnis der eingebauten Prüfung: ein WP_Error, wenn ein Mindestwert größer als der zugehörige Höchstwert ist, sonst null
$criteriaDie Suchkriterien als Array, zum Beispiel [ 'vermarktungsart' => 'kauf', 'von-zimmer' => '3' ]. Bereiche stehen unter den Keys von-… und bis-…
$requestDie übrigen Angaben aus dem Formular, etwa email. Bei einer Änderung aus der Ergebnisliste ist das Array leer

Das folgende Beispiel lehnt Suchaufträge mit einer Mindestanzahl von mehr als 20 Zimmern ab. Die eingebaute Prüfung bleibt dabei erhalten, weil der Filter ein vorhandenes $error unverändert zurückgibt:

add_filter( 'immomakler_searchagents_validate_criteria', 'meine_suchauftrag_pruefung', 10, 3 );
function meine_suchauftrag_pruefung( $error, $criteria, $request ) {
if ( null === $error && isset( $criteria['von-zimmer'] ) && (float) $criteria['von-zimmer'] > 20 ) {
return new WP_Error( 'zu_viele_zimmer', 'Bitte prüfen Sie die Anzahl der Zimmer.' );
}
return $error;
}

Gibt Ihr Filter immer null zurück, schalten Sie damit auch die eingebaute Prüfung auf widersprüchliche Bereiche ab.

Eine vollständige, nach Kategorien gruppierte Übersicht aller verfügbaren Filter- und Action-Hooks finden Sie unter Filter- und Action-Hooks.