Ir al contenido

Filtros y hooks: ejemplos prácticos

WP-ImmoMakler proporciona numerosos filter hooks y action hooks de WordPress con los que usted puede personalizar las salidas y el comportamiento del importador desde su propio código. Todos los ejemplos de código pertenecen al archivo /wp-content/plugins/immomakler-child/functions.php de su WP-ImmoMakler Child-Skin-Plugin.

Redirección tras una solicitud de contacto exitosa

Sección titulada «Redirección tras una solicitud de contacto exitosa»

Redirigir a una página de confirmación propia tras enviar el formulario de contacto:

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

Activar eventos de analítica al enviar el formulario

Sección titulada «Activar eventos de analítica al enviar el formulario»

Para el caso estándar, WP-ImmoMakler → Ajustes → Formulario de contacto ofrece la opción Evento de Analytics al enviar el formulario — para eso no hace falta código propio, véase Configurar el formulario de contacto. Los siguientes ejemplos son útiles cuando necesita parámetros de evento adicionales y personalizados.

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

Hacer que los campos personalizados sean buscables

Sección titulada «Hacer que los campos personalizados sean buscables»

Para que los campos meta personalizados se tengan en cuenta en las consultas de búsqueda de 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;
}

Configurar campos de búsqueda basados en slider para superficie, número de habitaciones y precio:

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

Indique como altura, en la medida de lo posible, al menos 1,5 veces el ancho (sin recorte). Si la altura es menor que el ancho, en las fotos con formato apaisado la altura limita la imagen y esta se genera más estrecha de lo indicado; en la visualización se escala hacia arriba y se ve borrosa. Más información en Procesamiento de las imágenes de los inmuebles.

Actualizar la fecha de modificación al actualizar un inmueble

Sección titulada «Actualizar la fecha de modificación al actualizar un inmueble»

De forma predeterminada, se conserva la fecha de publicación original. Para actualizar la fecha de modificación en cada actualización de importación:

add_filter('immomakler_preserve_post_date_on_update', '__return_false');

Crear entrada de país extranjero en taxonomías

Sección titulada «Crear entrada de país extranjero en taxonomías»
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;
}

Registrar y rellenar una taxonomía personalizada

Sección titulada «Registrar y rellenar una taxonomía personalizada»

Ejemplo: crear una taxonomía de código postal y rellenarla automáticamente durante la importación:

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

Comprobar los criterios de búsqueda de una alerta de búsqueda

Sección titulada «Comprobar los criterios de búsqueda de una alerta de búsqueda»
PLUS

Con el filtro immomakler_searchagents_validate_criteria define sus propias reglas sobre los criterios de búsqueda que puede tener una alerta de búsqueda. WP-ImmoMakler aplica el filtro antes de crear o modificar una alerta de búsqueda y antes de enviar un correo electrónico. Si devuelve un WP_Error, WP-ImmoMakler rechaza la alerta de búsqueda y muestra al interesado el mensaje del error. Si devuelve null, la alerta de búsqueda se acepta.

El filtro recibe tres parámetros:

ParámetroContenido
$errorEl resultado de la comprobación integrada: un WP_Error si un valor mínimo es mayor que el valor máximo correspondiente, y null en caso contrario
$criteriaLos criterios de búsqueda como array, por ejemplo [ 'vermarktungsart' => 'kauf', 'von-zimmer' => '3' ]. Los rangos se encuentran bajo las claves von-… y bis-…
$requestEl resto de los datos del formulario, por ejemplo email. En una modificación desde la lista de resultados, el array está vacío

El siguiente ejemplo rechaza las alertas de búsqueda con un mínimo de más de 20 habitaciones. La comprobación integrada se mantiene, porque el filtro devuelve sin cambios un $error existente:

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', 'Por favor, revise el número de habitaciones.' );
}
return $error;
}

Si su filtro devuelve siempre null, también desactiva la comprobación integrada de rangos contradictorios.

Puede encontrar una visión completa de todos los filter hooks y action hooks disponibles, agrupados por categorías, en Filter- y Action-Hooks.