Aller au contenu

Filtres & Hooks : exemples pratiques

WP-ImmoMakler fournit de nombreux filter hooks et action hooks WordPress qui vous permettent de personnaliser les sorties et le comportement de l’importateur depuis votre propre code. Tous les exemples de code appartiennent au fichier /wp-content/plugins/immomakler-child/functions.php de votre WP-ImmoMakler Child-Skin-Plugin.

Redirection après une demande de contact réussie

Section intitulée « Redirection après une demande de contact réussie »

Rediriger vers une page de confirmation personnalisée après l’envoi du formulaire de contact :

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>';
}

Déclencher des événements analytics lors de l’envoi du formulaire

Section intitulée « Déclencher des événements analytics lors de l’envoi du formulaire »

Pour le cas standard, WP-ImmoMakler → Réglages → Formulaire de contact propose l’option Événement Analytics lors de l’envoi du formulaire — aucun code personnalisé n’est donc nécessaire, voir Configurer le formulaire de contact. Les exemples suivants sont utiles si vous avez besoin de paramètres d’événement supplémentaires et personnalisés.

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>';
}

Pour que les champs meta personnalisés soient pris en compte dans les requêtes de recherche WP_Query :

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;
}

Configurer des champs de recherche basés sur des sliders pour la surface, le nombre de pièces et le prix :

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;
}

Indiquez pour la hauteur, si possible, au moins 1,5 fois la largeur (sans recadrage). Si la hauteur est inférieure à la largeur, pour les photos au format paysage, la hauteur limite l’image et celle-ci est générée plus étroite que prévu — à l’affichage, elle est alors agrandie et apparaît floue. Pour en savoir plus, consultez Traitement des images du bien immobilier.

Mettre à jour la date de modification lors des mises à jour de bien immobilier

Section intitulée « Mettre à jour la date de modification lors des mises à jour de bien immobilier »

Par défaut, la date de publication d’origine est conservée. Pour mettre à jour la date de modification à chaque mise à jour d’importation :

add_filter('immomakler_preserve_post_date_on_update', '__return_false');

Créer une entrée de pays étranger dans les taxonomies

Section intitulée « Créer une entrée de pays étranger dans les taxonomies »
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;
}

Enregistrer et remplir une taxonomie personnalisée

Section intitulée « Enregistrer et remplir une taxonomie personnalisée »

Exemple : créer une taxonomie de codes postaux et la remplir automatiquement lors de l’importation :

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');
}
}

Vérifier les critères de recherche d’une alerte de recherche

Section intitulée « Vérifier les critères de recherche d’une alerte de recherche »
PLUS

Avec le filtre immomakler_searchagents_validate_criteria, vous définissez vos propres règles sur les critères de recherche qu’une alerte de recherche peut contenir. WP-ImmoMakler applique le filtre avant qu’une alerte de recherche ne soit créée ou modifiée et avant l’envoi d’un e-mail. Si vous renvoyez un WP_Error, WP-ImmoMakler refuse l’alerte de recherche et affiche au prospect le message de l’erreur. Si vous renvoyez null, l’alerte de recherche est acceptée.

Le filtre reçoit trois paramètres :

ParamètreContenu
$errorLe résultat de la vérification intégrée : un WP_Error si une valeur minimale est supérieure à la valeur maximale correspondante, sinon null
$criteriaLes critères de recherche sous forme de tableau, par exemple [ 'vermarktungsart' => 'kauf', 'von-zimmer' => '3' ]. Les plages se trouvent sous les clés von-… et bis-…
$requestLes autres données du formulaire, par exemple email. Lors d’une modification depuis la liste de résultats, le tableau est vide

L’exemple suivant refuse les alertes de recherche demandant plus de 20 pièces au minimum. La vérification intégrée est conservée, car le filtre renvoie inchangé un $error existant :

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', 'Veuillez vérifier le nombre de pièces.' );
}
return $error;
}

Si votre filtre renvoie toujours null, vous désactivez aussi la vérification intégrée des plages contradictoires.

Vous trouverez un aperçu complet de tous les filter hooks et action hooks disponibles, regroupés par catégories, sous Filtres et Action-Hooks.