Kihagyás

Elementor repeater MEDIA control + condition gotcha#

A probléma#

Custom Elementor widget-ben gyakori minta: van egy type SELECT control (image/text/before stb.), és egy image MEDIA control aminél a megjelenés feltétel-bound:

$rep->add_control('type', [
    'type' => Controls_Manager::SELECT,
    'options' => ['image' => '...', 'text' => '...'],
    'default' => 'image',
]);
$rep->add_control('image', [
    'type' => Controls_Manager::MEDIA,
    'condition' => ['type' => 'image'],   // ← ez a gotcha
]);

Az Elementor a settings-be bármikor mentheti az image-értéket (pl. ha a user először type=image-et választott, képet feltöltött, majd type=text-re váltott — az image marad a DB-ben). DE a get_settings_for_display() és a render flow NEM adja vissza azokat a control-értékeket, amelyek condition-je nem teljesül a runtime-on.

Programmatikusan szintén: ha wp post meta update-tel beállítasz egy item-re image: {id: X, url: Y}-t de a type text-en marad, a render üres imageBox-ot ad ki mert a condition nem teljesül.

A tünet#

Egy foxxi-repeater item-en image_id=2290 szerepel a DB-ben, de a frontend HTML üres <div class="imageBox"></div>-t renderel. Más item-en (ahol type=image) ugyanezzel az image_id-vel működne.

A megoldás#

Programmatic data-update során mindig állítsd be a condition-mezőt is ami feltétele a render-nek:

$item['type']  = 'image';   // ← condition match!
$item['image'] = ['id' => $img_id, 'url' => wp_get_attachment_url($img_id)];

Hol találkoztunk vele#

02-Projects/foxxi Phase 6 + Phase 7:

  • /fogaszat/ "Miért a Foxxi Fogászati Centrum?" foxxi-repeater 4 elem közül 3-nak type=text volt → image üresen maradt
  • /araink-fogaszat/ "Fizetés és garancia" 3 elem ugyanígy
  • /szajhigienia-fogfeheries/ "Ragyogó mosoly" 2 fogfehérítési mód

Mindegyik esetben a type='image'-re javítás + image set kellett.

Hogyan ellenőrizd#

A widget register_controls() PHP-jét nézd meg minden condition kulcs után — a feltétel-mezőt mindig állítsd be a programmatic update során. Ha condition ['type' => ['image', 'video']] array, az item type-ja legyen az egyik érték.

Kapcsolódó#

  • 02-Projects/foxxi — itt élesben szembesültünk vele
  • Elementor docs: https://developers.elementor.com/docs/widgets/widget-controls/ (MEDIA control + conditional display)