- Extract Zibll CSF_Widget::params() common-field parity into inc/modules/widget-common.php (required by widgets-register.php to keep both files <1000 lines): subtitle, title_style(simple/big), title_highlight +color, title_link x3, title_link_style colors, sidebar_affix, show_type (all/only_pc/only_sm), show_id_type(show/hide), show_ids, animation_in, animation_repeat, layout_pin_pc/m, layout_bg(white/dark). Adds normalize_link/normalize_bg helpers, affix_attrs, common_wrapper_attr, render_title, animation_class. Back-compat normalizes legacy tokens (in_affix->sidebar_affix, pc/only_pc, include/exclude->show/hide). - Add src/AKSRT/Widgets/Traits/CommonWidgetFields.php trait (render_common_form_section + update_common_fields). - Wire all 57 widgets to use the trait; migrate the 16 hand-rolled in_affix implementations to shared sidebar_affix (fixes 6 latent bugs where in_affix was never persisted). SearchWidget intentionally skips the shared form section (its business show_type collides) but adopts the affix helper. - widget_display_callback parity verified via tmp assertion script. Refs .specs/plans/zibll-widgets-1to1.md Phase 2 (US1/US5) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
74 lines
2.2 KiB
PHP
74 lines
2.2 KiB
PHP
<?php
|
|
/**
|
|
* CommonWidgetFields trait — single seat-belt for shared widget form/update.
|
|
*
|
|
* Every AKSRT widget `use`s this trait so the Zibll common-field family
|
|
* (title block, display rules, affix, animation, layout bg) is declared and
|
|
* persisted in exactly one place: inc/modules/widget-common.php.
|
|
*
|
|
* Widgets keep only their business fields; the trait wires the shared section
|
|
* into form() and folds the shared keys into update().
|
|
*
|
|
* @package AKSRT\Widgets\Traits
|
|
*/
|
|
|
|
namespace AKSRT\Widgets\Traits;
|
|
|
|
defined('ABSPATH') || exit;
|
|
|
|
trait CommonWidgetFields {
|
|
|
|
/**
|
|
* Whether this widget should render the shared common-form section.
|
|
*
|
|
* Override and return false for pure-display widgets with no admin form.
|
|
* Default: true (every widget gets the shared block).
|
|
*
|
|
* @return bool
|
|
*/
|
|
protected function use_common_form(): bool {
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Render the shared common-form section at the end of a widget's form().
|
|
*
|
|
* Call from form(): render business fields, then `$this->render_common_form_section($instance);`.
|
|
*
|
|
* @param array<string,mixed> $instance Widget instance.
|
|
*/
|
|
protected function render_common_form_section(array $instance): void {
|
|
if (!$this->use_common_form()) {
|
|
return;
|
|
}
|
|
if (function_exists('aksrt_widget_render_common_form')) {
|
|
aksrt_widget_render_common_form($instance);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Merge shared common fields into a widget's update() result.
|
|
*
|
|
* Usage in update():
|
|
* return $this->update_common_fields($new_instance, $old_instance, [
|
|
* 'title' => sanitize_text_field(...),
|
|
* ...business fields...
|
|
* ]);
|
|
*
|
|
* @param array<string,mixed> $new_instance New submitted instance.
|
|
* @param array<string,mixed> $old_instance Previous instance.
|
|
* @param array<string,mixed> $business Sanitized business fields to keep.
|
|
* @return array<string,mixed>
|
|
*/
|
|
protected function update_common_fields(array $new_instance, array $old_instance, array $business = []): array {
|
|
if (!$this->use_common_form()) {
|
|
return $business;
|
|
}
|
|
if (function_exists('aksrt_widget_update_common')) {
|
|
$common = aksrt_widget_update_common($new_instance, $old_instance);
|
|
return array_merge($business, $common);
|
|
}
|
|
return $business;
|
|
}
|
|
}
|