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.
Google Analytics (gtag.js)
Sección titulada «Google Analytics (gtag.js)»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>';}Google Tag Manager
Sección titulada «Google Tag Manager»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;}Definir campos de búsqueda avanzados
Sección titulada «Definir campos de búsqueda avanzados»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, ), );}Personalizar tamaños de imagen
Sección titulada «Personalizar tamaños de imagen»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');Crear tipos de inmueble personalizados
Sección titulada «Crear tipos de inmueble personalizados»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;}Crear tipos de uso personalizados
Sección titulada «Crear tipos de uso personalizados»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»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ámetro | Contenido |
|---|---|
$error | El 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 |
$criteria | Los criterios de búsqueda como array, por ejemplo [ 'vermarktungsart' => 'kauf', 'von-zimmer' => '3' ]. Los rangos se encuentran bajo las claves von-… y bis-… |
$request | El 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.
Referencia completa de hooks
Sección titulada «Referencia completa de hooks»Puede encontrar una visión completa de todos los filter hooks y action hooks disponibles, agrupados por categorías, en Filter- y Action-Hooks.
También puede interesarle
Sección titulada «También puede interesarle»- Filter- y Action-Hooks — referencia completa de todos los hooks, agrupados por categorías
- Personalizar de forma segura ante actualizaciones — el Child-Skin-Plugin como lugar seguro para código propio
- Personalizar plantillas — sobreescribir archivos de skin para cambios de diseño profundos
- Hooks del formulario de contacto — hooks relacionados con solicitudes y envíos de correo electrónico