Passa al contenuto principale

Hook e filtri sync

Riferimento sviluppatori: per sviluppatori di temi e plugin.


Comportamento

  • Sync completa carica le unità remote dal provider attivo (fetchRemoteUnits), poi crea o aggiorna i post Unità con chiave bec_external_id + bec_provider_slug.
  • Sync pianificata usa WP-Cron (bec_run_scheduled_sync). L’intervallo è in Booking Engine → Sync & Import (bec_sync_interval_hours, default 6). Su siti a basso traffico il cron può partire solo alla richiesta successiva (comportamento WP standard).
  • Sync completa manuale (wp-admin) usa batch AJAX (wp_ajax_bec_sync_start_all, wp_ajax_bec_sync_step_all) con avanzamento per utente + run id (SyncProgressReporter / SyncManualBatchState).
  • Lock — le sync complete concorrenti sono coordinate dal transient bec_sync_running_lock:
    • TTL 7200 secondi (2 ore) per set_transient, rinnovato alla rientranza mentre il lavoro continua (SyncLock::refresh()).
    • Titolare c — lock acquisito dal cron WP (SyncLock::acquireCron).
    • Titolare m:{userId}:{runId} — sync manuale a batch (SyncLock::acquireManual), runId UUID lato client sanificato.
    • Il cron non ruba un lock manuale attivo. Il manuale può prevalere sul cron solo se bec_sync_manual_may_preempt_cron_lock restituisce true (default false).
    • Lo stesso utente che avvia un nuovo run manuale può liberare un lock obsoleto quando lo stato batch del run precedente non c’è più, o dopo bec_sync_manual_lock_abandon_seconds (default 1800 = 30 minuti) senza aggiornamenti batch.
    • SyncLock::forceReleaseAll() è usata da Clear sync lock in admin; in UI condizionata da bec_sync_allow_admin_clear_lock (default true).
  • Dopo ogni upsert riuscito la riga remota normalizzata è salvata in meta bec_sync_payload (ispettore unità; nascosta da REST di default).
  • Campi core: extractCoreUnitFields() mappa in meta canonici bec_core_* (vedi Campi canonici unità). Sovrascritti ogni sync salvo bec_sync_apply_core_unit_fields false.
  • Campi mappati opzionali: getUnitSyncFieldDefinitions() — salvo bec_sync_apply_mapped_unit_fields false.
  • Categorie unità: con tassonomia abilitata, dopo bec_after_unit_sync, UnitCategorySync upserta un termine e lo assegna tramite il descrittore filtrato bec_sync_unit_category.

Azioni

HookQuandoArgomenti
bec_before_unit_syncPrima di wp_insert_post / wp_update_post$post_id (0 se non ancora creato), $provider_slug, $remote_row
bec_after_unit_syncDopo aggiornamento meta$post_id, $provider_slug, $remote_row

Filtri — mapping sync core

FiltroScopo
bec_sync_remote_unitNormalizza ogni riga remota prima del mapping ($row, $provider_slug)
bec_sync_unit_titleTitolo post ($title, $row, $provider_slug)
bec_sync_unit_contentContenuto post ($content, $row, $provider_slug)
bec_sync_unit_post_dataArray post_data per insert/update ($post_data, $row, $provider_slug, $post_id_or_null)
bec_provider_remote_unitsLista finale sync Kross ($rows, 'kross', $decoded_response)
bec_sync_apply_core_unit_fieldsSalta scrittura meta bec_core_* (bool, $post_id, $provider_slug, $remote_row)
bec_core_unit_fieldsRegola array campi core prima del salvataggio ($data, $provider_slug, $remote_row)
bec_core_unit_localeLocale a due lettere per nome/descrizione ($two, $wp_locale, $remote_row)
bec_provider_amenities_from_rowLista servizi ($items, $remote_row, $provider_slug)
bec_kross_amenities_from_rawSolo Kross: servizi dal raw API ($items, $raw, $normalised_row)
bec_sync_unit_resolve_post_statusesStati post usati per trovare un’unità esistente per id esterno ($statuses, $external_id, $provider_slug) — default publish, draft, pending, future, private

Con bec_sync_enabled = false le unità sono saltate nella sync completa ma possono essere aggiornate da azione riga / bulk.


Filtri — lock e sync manuale (admin)

FiltroScopo
bec_sync_manual_lock_abandon_secondsSecondi di idle prima che un nuovo run dello stesso utente possa rilasciare il lock ($default, $user_id, $old_run_id)
bec_sync_manual_may_preempt_cron_lockConsenti sync manuale a eliminare lock c e sostituirlo (false, $user_id, $sanitized_run_id)
bec_sync_allow_admin_clear_lockMostra/consenti Clear sync lock (true)
bec_sync_manual_gallery_batch_sizeStep galleria per batch sync manuale (4, $user_id, $run_raw)

FiltroScopo
bec_sync_import_gallery_imagesSalta download gallery per questo upsert (true, $parent_post_id, $urls)
bec_sync_gallery_ignore_hashIgnora hash ordine/dedupe per questo passaggio (false, $parent_post_id, $urls, $order_hash)
bec_gallery_download_concurrencyLimite download paralleli (8, $parent_post_id, $urls)
bec_core_unit_gallery_before_saveLista ID allegati prima del salvataggio ($ids, $post_id)
bec_core_unit_gallery_remote_urlsLista piatta URL remoti prima dell’importer ($urls, $post_id, $value)

Filtri — categorie unità

FiltroScopo
bec_sync_unit_categorySostituisci/sopprimi descrittore categoria dopo normalizzazione riga ($descriptor, $row, $provider_slug, $post_id)
bec_unit_category_enabledEffettivo on/off registrazione tassonomia senza cambiare l’opzione salvata
bec_unit_category_rewrite_slugRegola slug rewrite derivato
bec_unit_category_taxonomy_argsArgomenti finali register_taxonomy ($args, 'bec_unit_category')

Kross (frammento payload → descrittore):

  • bec_kross_room_type_categories_payload
  • bec_kross_room_type_categories
  • bec_kross_room_type_category_from_row

Modulo di ricerca (front-end)

FiltroScopo
bec_search_form_actionSostituisce l’URL action del <form> quando SearchForm::render() non ha ricevuto un argomento action esplicito ($url, $context). Restituire stringa vuota per mantenere le regole integrate (archivio / singolare / home). Lo shortcode [bec_search] imposta action da redirect_url o dal fallback archivio — il filtro vale soprattutto per form resi da PHP.

Altri filtri UI (bec_search_form_fields, bec_search_form_preset, bec_search_guest_field_mode, ecc.) restano in SearchForm; vedi Shortcode bec_search.


Filtri — intervallo date e formattazione importi

FiltroScopo
bec_search_form_daterange_formatFormato PHP date_i18n() per la lettura footer calendario Enhanced ($format, $context)
bec_daterange_moment_format_presetsMappa preset (iso, short, medium, …) a stringhe formato Moment.js
bec_php_date_format_to_momentConverte un formato data PHP personalizzato in Moment.js ($moment, $phpFormat)
bec_search_form_popover_placementOverride posizione popover (auto, top, bottom) per ricerca Enhanced
bec_date_format_defaultsOpzioni formato predefinite per shortcode [bec_dates]
bec_shortcode_dates_format / bec_shortcode_dates_text / bec_shortcode_dates_htmlRegola output [bec_dates]
bec_money_format_defaultsOpzioni valuta/numero predefinite per [bec_quote] ($defaults, 'bec_quote')
bec_currency_symbolsMappa codici ISO valuta a simboli display
bec_format_moneyStringa importo formattata finale prima dell’output

Filtri — elenco unità ([bec_unit_filters])

FiltroScopo
bec_unit_filter_definitionsAggiunge/sostituisce definizioni campi filtro ($defs)
bec_unit_filters_preserve_query_keysChiavi GET extra da conservare al submit del form ($keys)
bec_unit_filter_query_appliedAction dopo applicazione filtri a WP_Query ($query, $request)
bec_available_units_countOverride conteggio [bec_available_units_count] ($count, $loopQuery)
bec_shortcode_available_units_count_htmlRegola HTML shortcode conteggio ($html, $count, $atts, $ctx)
bec_elementor_unit_filter_query_idsQuery id Loop Grid Elementor con logica filtri + disponibilità ($ids)

Le query principali archivio bec_unit sono filtrate via UnitFilterQueryHooks quando sono presenti parametri bec_filter_*.


FiltroScopo
bec_unit_url_structureStruttura URL effettiva singola unità (base, base_category, category_only)
bec_unit_category_url_structureStruttura URL archivio categoria (category_base, unit_base, bare)
bec_unit_permalink_primary_termSceglie termine categoria primario con più assegnazioni ($term, $candidates, $postId)
bec_unit_permalink_slug_conflicts_with_coreTratta uno slug come in conflitto con contenuti WP core ($conflicts, $slug)

Guida utente: Permalink e archivio.


REST personalizzata, blocchi, webhook

Il connector non registra una superficie register_rest_route propria per le API di prenotazione. Il CPT bec_unit usa la REST core dei post dove configurato; meta sensibili come bec_sync_payload restano fuori REST. Non ci sono register_block_typewebhook in ingresso — integrazione pull via sync e shortcode/hook front.

Endpoint solo admin: wp_ajax_* (poll avanzamento + step batch) e admin_post_* (salvataggio impostazioni, lock, sync unità, rinomina galleria, refresh motori Kross, ecc.).


Documentazione correlata