configuration_section() as $section) { register_setting($section['id'], $section['id'], array($this, 'sanitize_options')); } } public function permalink_flush(): void { flush_rewrite_rules(); } public function update_sanitize($new, $old, $option) { $all_fields = $this->configuration_data(); $field_infos = $all_fields[$option] ?? []; $remove_name = ['collapse_start', 'collapse_end']; if (sizeof($field_infos) > 0 && is_array($new)) { foreach ($field_infos as $field_info) { $name = $field_info['name'] ?? ''; if (!in_array($name, $remove_name)) { $type = $field_info['type'] ?? ''; if ($type == 'wp_editor') { $new[$name] = sanitize_text_field(htmlentities($new[$name])); } else { $new[$name] = sanitize_text_field($new[$name]); } } } } return sizeof($new) > 0 ? $new : $old; } public function load_configuration(): void { $allowed_tabs = []; $all_sections = $this->configuration_section(); foreach ($all_sections as $tab) { $tab_id = $tab['id'] ?? ''; if (!empty($tab_id)) { $allowed_tabs[] = preg_replace('/^abpet_/', '', $tab_id); } } $active_tab = 'configuration'; if (isset($_GET['_abpet_nonce']) && wp_verify_nonce(sanitize_text_field(wp_unslash($_GET['_abpet_nonce'])), 'abpet_url_action')) { $active_tab = isset($_GET['configuration']) ? sanitize_text_field(wp_unslash($_GET['configuration'])) : 'configuration'; } if (!in_array($active_tab, $allowed_tabs, true)) { $active_tab = 'configuration'; } $all_fields = $this->configuration_data(); $section_id = 'abpet_' . $active_tab; $fields = $all_fields[$section_id] ?? []; $current_section = []; ?>
configuration_data(); $fields = $all_fields[$section] ?? []; if (sizeof($fields) > 0) { foreach ($fields as $option) { $name = $option['name'] ?? ''; if (!empty($name) && $name == $section_key) { $option_value = $option['default'] ?? ''; } } } } return $option_value; } public function configuration_section(): array { $label = ABPET_Function::label(); $brand_icon = ABPET_Function::icon(); $configuration = apply_filters('abpet_configuration_after', array(array('id' => 'abpet_configuration', 'icon' => $brand_icon, 'menu' => $label))); $contact = apply_filters('abpet_contact_after', array( array('id' => 'abpet_on_off', 'icon' => 'fa-solid fa-toggle-on', 'menu' => __('ON/OFF', 'abp-event-ticket')), array('id' => 'abpet_slider', 'icon' => 'fas fa-photo-video', 'menu' => __('Slider', 'abp-event-ticket')), array('id' => 'abpet_contact', 'icon' => 'fas fa-id-card-alt', 'menu' => __('Contact Information', 'abp-event-ticket')), array('id' => 'abpet_css_var', 'icon' => 'fas fa-drafting-compass', 'menu' => __('CSS Property', 'abp-event-ticket')), )); return array_merge($configuration, $contact); } public function configuration_data() { return apply_filters('abpet_configuration_data_filter', array( 'abpet_configuration' => apply_filters('abpet_configuration_filter', array( array( 'name' => 'booked_status', 'label' => __('Booked Status', 'abp-event-ticket'), 'desc' => __('Select the specific order statuses that will automatically trigger inventory deduction or reserve a seat.', 'abp-event-ticket'), 'class' => 'full_width', 'type' => 'multi_check', 'default' => 'wc-processing,wc-completed', 'options' => in_array('woocommerce/woocommerce.php', get_option('active_plugins')) ? wc_get_order_statuses() : [] ), array( 'name' => 'label', 'label' => __('Label', 'abp-event-ticket'), 'desc' => __('Customize the display label for the plugin menu item in the admin dashboard side navigation.', 'abp-event-ticket'), 'type' => 'text', 'default' => __('Events', 'abp-event-ticket'), ), array( 'name' => 'slug', 'label' => __('Slug', 'abp-event-ticket'), 'desc' => sprintf( /* translators: %s: Permalinks settings page link layout */ __('Define the primary URL slug for rentals. Important: After changing this, you must flush your permalinks by visiting %s and clicking Save Changes.', 'abp-event-ticket'), '' . __('Settings → Permalinks', 'abp-event-ticket') . '' ), 'type' => 'text', 'default' => 'event-ticket' ), array( 'name' => 'icon', 'label' => __('Dashboard Menu Icon', 'abp-event-ticket'), 'desc' => sprintf( /* translators: %s: Dashicons library link */ __('Choose a custom admin menu icon. Please browse the %s, copy the desired icon class name, and paste it here.', 'abp-event-ticket'), '' . __('WordPress Dashicons Library', 'abp-event-ticket') . '' ), 'type' => 'text', 'default' => 'dashicons-tickets' ), array( 'name' => 'brand_icon', 'label' => __('Event Ticket Icon', 'abp-event-ticket'), 'desc' => __('Select a global FontAwesome vector icon / Emoji to act as the primary visual brand identity throughout the plugin panels.', 'abp-event-ticket'), 'type' => 'fontawesome', 'default' => '🏟️' ), array( 'name' => 'category_label', 'label' => __('Category Label', 'abp-event-ticket'), 'desc' => __('If you wish to modify the category label, you can do so here. ', 'abp-event-ticket'), 'type' => 'text', 'default' => ABPET_Function::category_label(), 'on_off_key' => 'category', ), array( 'name' => 'cat_slug', 'label' => __('Category Slug', 'abp-event-ticket'), 'desc' => sprintf( /* translators: %s: Permalinks settings page link layout */ __('Define the custom URL structure for category archives. Remember to update your rewrite rules under %s after any modifications.', 'abp-event-ticket'), '' . __('Settings → Permalinks', 'abp-event-ticket') . '' ), 'type' => 'text', 'default' => ABPET_Function::category_slug(), 'on_off_key' => 'category', ), array( 'name' => 'organizer_label', 'label' => __('Organizer Label', 'abp-event-ticket'), 'desc' => __('If you wish to modify the Organizer label, you can do so here. ', 'abp-event-ticket'), 'type' => 'text', 'default' => ABPET_Function::organizer_label(), 'on_off_key' => 'organizer', ), array( 'name' => 'org_slug', 'label' => __('Organizer Slug', 'abp-event-ticket'), 'desc' => sprintf( /* translators: %s: Permalinks settings page link layout */ __('Define the custom URL structure for Organizer archives. Remember to update your rewrite rules under %s after any modifications.', 'abp-event-ticket'), '' . __('Settings → Permalinks', 'abp-event-ticket') . '' ), 'type' => 'text', 'default' => ABPET_Function::organizer_slug(), 'on_off_key' => 'organizer', ), array( 'name' => 'brand_label', 'label' => __('Brand Label', 'abp-event-ticket'), 'desc' => __('If you wish to modify the Brand label, you can do so here. ', 'abp-event-ticket'), 'type' => 'text', 'default' => ABPET_Function::brand_label(), 'on_off_key' => 'brand', ), array( 'name' => 'brand_slug', 'label' => __('Brand Slug', 'abp-event-ticket'), 'desc' => sprintf( /* translators: %s: Permalinks settings page link layout */ __('Define the custom URL structure for Brand archives. Remember to update your rewrite rules under %s after any modifications.', 'abp-event-ticket'), '' . __('Settings → Permalinks', 'abp-event-ticket') . '' ), 'type' => 'text', 'default' => ABPET_Function::brand_slug(), 'on_off_key' => 'brand', ), array( 'name' => 'location_label', 'label' => __('Location Label', 'abp-event-ticket'), 'desc' => __('If you wish to modify the Location label, you can do so here. ', 'abp-event-ticket'), 'type' => 'text', 'default' => ABPET_Function::location_label(), ), array( 'name' => 'location_slug', 'label' => __('Location Slug', 'abp-event-ticket'), 'desc' => sprintf( /* translators: %s: Permalinks settings page link layout */ __('Define the custom URL structure for Location archives. Remember to update your rewrite rules under %s after any modifications.', 'abp-event-ticket'), '' . __('Settings → Permalinks', 'abp-event-ticket') . '' ), 'type' => 'text', 'default' => ABPET_Function::location_slug(), ), array( 'name' => 'google_map_key', 'label' => __('Google Maps API Key', 'abp-event-ticket'), 'desc' => sprintf( /* translators: %s: Google Maps Platform help link */ __('Paste your Google Maps JavaScript API key to enable the Google Location Map feature on the frontend. Get a key from the %s.', 'abp-event-ticket'), '' . __('Google Cloud Console', 'abp-event-ticket') . '' ), 'type' => 'text', 'default' => '', 'on_off_key' => 'google_map', ), )), 'abpet_on_off' => apply_filters('abpet_on_off_filter', array( array( 'name' => 'sku', 'label' => __('Post SKU', 'abp-event-ticket'), 'desc' => __('If you do not want to use the Post SKU ID feature, simply turn this switch OFF. Once disabled, the Post SKU field and related SKU options will be completely removed from the site, and no SKU ID will be required or generated for posts.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'post_icon', 'label' => __('Event Icon', 'abp-event-ticket'), 'desc' => __('If you do not want to use Post Icon simply turn this switch OFF. This will completely disable the Post Icon across the entire website, including all related , settings, and functionality. You can re-enable it at any time by turning the switch back ON.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'sub_title', 'label' => __('Event Sub Title', 'abp-event-ticket'), 'desc' => __('If you do not want to use the Post Sub Title , simply turn this switch OFF. Once disabled, the Post Sub Title field and related options will be completely removed from the site.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'post_des', 'label' => __('Event Description', 'abp-event-ticket'), 'desc' => __('If you do not want to use Post Description simply turn this switch OFF. This will completely disable the Post Description across the entire website, including all related , settings, and functionality. You can re-enable it at any time by turning the switch back ON.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'event_date_list', 'label' => __('Event Date and Time List', 'abp-event-ticket'), 'desc' => __('Show a clickable date and time list on event details pages when an event has more than one date.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'organizer', 'label' => ABPET_Function::organizer_label(), 'desc' => __('If you do not want to use Organizer , simply turn this switch OFF. Once disabled, Organizer Title field and related Organizer options will be completely removed from the site.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'display_capacity', 'label' => __('Capacity / Available Qty', 'abp-event-ticket'), 'desc' => __('If you do not want to display post capacity across the entire frontend of your site, turn this switch Off. When enabled, you can control the post capacity display individually for each Event.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'display_location', 'label' => __('Location', 'abp-event-ticket'), 'desc' => __('If you do not want to display Location across the entire frontend of your site, turn this switch Off.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'brand', 'label' => ABPET_Function::brand_label(), 'desc' => __('If you do not want to use the Brand Feature, simply turn this switch OFF. Once disabled, the Brand Feature field and related Brand Feature options will be completely removed from the site.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'feature', 'label' => ABPET_Function::feature_label(), 'desc' => __('If you do not want to use the Event Feature, simply turn this switch OFF. Once disabled, the Event Feature field and related Event Feature options will be completely removed from the site.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'location', 'label' => ABPET_Function::location_label(), 'desc' => __('If you do not want to use the Event location, simply turn this switch OFF. Once disabled, the Event location field and related Event location options will be completely removed from the site.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'google_map', 'label' => __('Google Location Map', 'abp-event-ticket'), 'desc' => __('Show a Google Map for each Location on the frontend. When this switch is OFF, no map will be displayed anywhere on the site even if locations have map data saved.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'category', 'label' => ABPET_Function::category_label(), 'desc' => __('If you do not want to use Category , simply turn this switch OFF. Once disabled, Category Title field and related Category options will be completely removed from the site.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'related', 'label' => __('Related Post', 'abp-event-ticket'), 'desc' => __('Turn this switch OFF to completely disable the Related Posts feature. Once disabled, Related Post items will no longer be displayed on any details page throughout the website. Turn it back ON at any time to show related content again.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'feature', 'label' => __('Features', 'abp-event-ticket'), 'desc' => __('If you do not want to use Features, simply turn this switch OFF. This will completely disable the Features across the entire website, including all related , settings, and functionality. You can re-enable it at any time by turning the switch back ON.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'ticket_type', 'label' => __('Multiple Ticket Type', 'abp-event-ticket'), 'desc' => __('If you do not want to use Multiple Ticket Type, simply turn this switch OFF. This will completely disable the Multiple Ticket Type feature across the entire website, including all related settings and functionality. You can re-enable it at any time by turning the switch back ON.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'sp', 'label' => __('Seat Plan', 'abp-event-ticket'), 'desc' => __('If you do not want to use the Seat Plan feature, simply turn this switch OFF. This will completely disable the Seat Plan feature for all Events across your website. If you only want to sell tickets without seat selection, you can use Ticket Types instead. You can re-enable the Seat Plan feature at any time by turning this switch back ON.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'min_max', 'label' => __('Min & Max qty', 'abp-event-ticket'), 'desc' => __('If you do not want to use the Min & Max feature, simply turn this switch OFF. This will completely disable the Event Min & Max feature for all Events across your website. You can re-enable the Event return feature at any time by turning this switch back ON.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'custom_attendee', 'label' => __('Attendee Form', 'abp-event-ticket'), 'desc' => __('Control the Attendee Form feature globally. Disable it to turn the feature off for all Events. Enable it to allow each Event to enable or disable the feature individually. You can re-enable this feature at any time by turning this switch back ON.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'same_attendee', 'label' => __('Same Attendee', 'abp-event-ticket'), 'desc' => __('Control the Same Attendee feature globally. Disable it to turn the feature off for all Events. Enable it to allow each Event to enable or disable the feature individually. You can re-enable this feature at any time by turning this switch back ON.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', 'collapse_data' => array('option' => 'abpet_on_off', 'key' => 'custom_attendee'), ), array( 'name' => 'additional_info', 'label' => __('Additional services', 'abp-event-ticket'), 'desc' => __('If you do not want to use Additional services, simply turn this switch OFF. This will completely disable the Additional services feature across the entire website, including all related , settings, and functionality. You can re-enable it at any time by turning the switch back ON.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'tc', 'label' => __('Term & Conditions', 'abp-event-ticket'), 'desc' => __('If you do not want to use the Term & Conditions Feature, simply turn this switch OFF. Once disabled, the Term & Conditions Feature field and related Term & Conditions Feature options will be completely removed from the site.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'faq', 'label' => __('FAQ', 'abp-event-ticket'), 'desc' => __('If you do not want to use the FAQs Feature, simply turn this switch OFF. Once disabled, the FAQ Feature field and related FAQ Feature options will be completely removed from the site.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'timeline', 'label' => __('Event Timeline', 'abp-event-ticket'), 'desc' => __('Show the Event Timeline section on event details pages. When this switch is OFF, no timeline will be displayed anywhere on the site even if events have timeline entries saved.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'speaker', 'label' => __('Event Speaker', 'abp-event-ticket'), 'desc' => __('Enable speaker profiles and event-speaker linking. When this switch is OFF, speaker features are completely hidden from the site.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'on', ), array( 'name' => 'remove_uninstall', 'label' => __('Remove All Data on Uninstall', 'abp-event-ticket'), 'desc' => __('When this switch is OFF (recommended), all ABP Event Ticket data is preserved when you uninstall the plugin. You can reinstall the plugin later and keep your existing events, orders, seat plans, and settings. When this switch is ON, all plugin data (events, taxonomy terms, seat plans, the orders table, and all options) is permanently deleted on uninstall.', 'abp-event-ticket'), 'type' => 'button_switch', 'default' => 'off', ), )), 'abpet_contact' => array( array( 'name' => 'name', 'label' => __('Company Name', 'abp-event-ticket'), 'desc' => __('Enter the official commercial or business name used for invoice branding.', 'abp-event-ticket'), 'type' => 'text', 'default' => '', 'placeholder' => __('e.g., Event Forge Ltd.', 'abp-event-ticket'), ), array( 'name' => 'address', 'label' => __('Address', 'abp-event-ticket'), 'desc' => __('Provide the full corporate physical location or street address to appear on booking logs.', 'abp-event-ticket'), 'type' => 'textarea', 'placeholder' => __('e.g., 450 Greene St, New York, NY 10003, USA', 'abp-event-ticket'), ), array( 'name' => 'phone', 'label' => __('Contact Number', 'abp-event-ticket'), 'desc' => __('Specify the primary telephone or corporate helpline number for client inquiries.', 'abp-event-ticket'), 'type' => 'text', 'default' => '', 'placeholder' => __('e.g., +1 (234) 567-8901', 'abp-event-ticket'), ), array( 'name' => 'email', 'label' => __('E-Mail', 'abp-event-ticket'), 'desc' => __('Input the standard commercial email address reserved for direct customer support correspondence.', 'abp-event-ticket'), 'type' => 'text', 'default' => '', 'placeholder' => __('support@example.com', 'abp-event-ticket'), ), ), 'abpet_slider' => array( array( 'name' => 'slider_style', 'label' => __('Slider Theme', 'abp-event-ticket'), 'desc' => __('Select the preferred frontend presentation layout style for display item multimedia asset sheets.', 'abp-event-ticket'), 'collapse' => 'yes', 'type' => 'radio', 'default' => 'slider', 'options' => array( 'slider' => __('Carousel Slider', 'abp-event-ticket'), 'gallery' => __('Gallery / Masonry', 'abp-event-ticket'), ), ), array( 'name' => 'image_column', 'label' => __('Images Per Row', 'abp-event-ticket'), 'desc' => __('Specify the total number of gallery thumbnails to render in a single horizontal grid line row layout.', 'abp-event-ticket'), 'type' => 'number', 'default' => '3', 'min' => '1', 'max' => '10', 'validation' => 'validation_number', 'collapse_radio' => array('option' => 'abpet_slider', 'key' => 'slider_style', 'value' => 'gallery'), ), array( 'name' => 'indicator_visible', 'label' => __('Image Indicator?', 'abp-event-ticket'), 'desc' => sprintf( /* translators: %1$s: HTML markup for OFF layout switch, %2$s: HTML markup for ON layout switch, %3$s: Default status indicator layout */ __('Manage pagination dot indicators on the slide viewport canvas. Toggle %1$s to hide or %2$s to display. (Default: %3$s)', 'abp-event-ticket'), ABPET_Layout::off(), ABPET_Layout::on(), ABPET_Layout::on() ), 'type' => 'button_switch', 'default' => 'on', 'collapse_radio' => array('option' => 'abpet_slider', 'key' => 'slider_style', 'value' => 'slider'), ), array( 'name' => 'indication_position', 'label' => __('Indicator Position', 'abp-event-ticket'), 'desc' => __('Choose the geometric layout alignment position anchor for the slide tracking dot interface elements.', 'abp-event-ticket'), 'type' => 'radio', 'default' => 'bottom', 'options' => array( 'top' => __('Top', 'abp-event-ticket'), 'right' => __('Right', 'abp-event-ticket'), 'bottom' => __('Bottom', 'abp-event-ticket'), 'left' => __('Left', 'abp-event-ticket') ), 'class' => 'full_width', 'collapse_radio' => array('option' => 'abpet_slider', 'key' => 'slider_style', 'value' => 'slider'), 'collapse_data' => array('option' => 'abpet_slider', 'key' => 'indicator_visible'), ), array( 'name' => 'visible_popup', 'label' => __('Visible Popup?', 'abp-event-ticket'), 'desc' => sprintf( /* translators: %1$s: HTML markup for OFF layout switch, %2$s: HTML markup for ON layout switch, %3$s: Default status Visible Popup layout */ __('Decide whether clicking on layout thumbnails triggers a full-screen image lightbox popup. Toggle %1$s to disable or %2$s to enable. (Default: %3$s)', 'abp-event-ticket'), ABPET_Layout::off(), ABPET_Layout::on(), ABPET_Layout::on(), ), 'type' => 'button_switch', 'default' => 'on' ), array( 'name' => 'popup_image_indicator', 'label' => __('Popup Image Indicator', 'abp-event-ticket'), 'desc' => sprintf( /* translators: %1$s: HTML markup for OFF Popup Image Indicator switch, %2$s: HTML markup for ON layout switch, %3$s: Default status Popup Image Indicator layout */ __('Control navigation pagination tracking assets inside the lightbox modal container view. Toggle %1$s to hide or %2$s to reveal. (Default: %3$s)', 'abp-event-ticket'), ABPET_Layout::off(), ABPET_Layout::on(), ABPET_Layout::on(), ), 'type' => 'button_switch', 'default' => 'on', 'collapse_data' => array('option' => 'abpet_slider', 'key' => 'visible_popup'), ), ), 'abpet_css_var' => array( array( 'name' => 'color_theme', 'label' => __('Base Color', 'abp-event-ticket'), 'desc' => __('Pick the primary corporate core signature theme color for accents, links, and buttons.', 'abp-event-ticket'), 'type' => 'color', 'default' => '#95951c' ), array( 'name' => 'color_theme_alternate', 'label' => __('Alternate Color', 'abp-event-ticket'), 'desc' => __('Define a secondary tone reserved mainly for high-contrast foreground text typography layers sitting over a Base Color background layout block.', 'abp-event-ticket'), 'type' => 'color', 'default' => '#fff' ), array( 'name' => 'color_default', 'label' => __('Default Color', 'abp-event-ticket'), 'desc' => __('Establish the primary body text typography canvas hexadecimal hex color code.', 'abp-event-ticket'), 'type' => 'color', 'default' => '#303030' ), array( 'name' => 'br_default', 'label' => __('Default Border Radius', 'abp-event-ticket'), 'desc' => __('Specify a global UI layout component corner sharpness curve boundary rounding threshold value in raw pixel units.', 'abp-event-ticket'), 'type' => 'number', 'default' => 5, 'validation' => 'validation_number' ), array( 'name' => 'fs_default', 'label' => __('Default Font Size', 'abp-event-ticket'), 'desc' => __('Set the default baseline layout font scale size applied to normal paragraph blocks across UI views.', 'abp-event-ticket'), 'type' => 'number', 'default' => '12', 'validation' => 'validation_number' ), array( 'name' => 'fs_label', 'label' => __('Label Font Size', 'abp-event-ticket'), 'desc' => __('Configure the responsive text scale sizing applied strictly to forms, field labels, and identifier descriptions.', 'abp-event-ticket'), 'type' => 'number', 'default' => '14', 'validation' => 'validation_number' ), array( 'name' => 'fs_h1', 'label' => __('Font Size H1', 'abp-event-ticket'), 'desc' => __('Enter the typographical scale size target for the primary page-level H1 header assets.', 'abp-event-ticket'), 'type' => 'number', 'default' => '30', 'validation' => 'validation_number' ), array( 'name' => 'fs_h2', 'label' => __('Font Size H2', 'abp-event-ticket'), 'desc' => __('Enter the typographical scale size target for subsection level H2 header assets.', 'abp-event-ticket'), 'type' => 'number', 'default' => '26', 'validation' => 'validation_number' ), array( 'name' => 'fs_h3', 'label' => __('Font Size H3', 'abp-event-ticket'), 'desc' => __('Enter the typographical scale size target for inner panel modular level H3 header assets.', 'abp-event-ticket'), 'type' => 'number', 'default' => '24', 'validation' => 'validation_number' ), array( 'name' => 'fs_h4', 'label' => __('Font Size H4', 'abp-event-ticket'), 'desc' => __('Enter the typographical scale size target for contextual metadata tracking level H4 header assets.', 'abp-event-ticket'), 'type' => 'number', 'default' => '20', 'validation' => 'validation_number' ), array( 'name' => 'fs_h5', 'label' => __('Font Size H5', 'abp-event-ticket'), 'desc' => __('Enter the typographical scale size target for inner card grid elements level H5 header assets.', 'abp-event-ticket'), 'type' => 'number', 'default' => '17', 'validation' => 'validation_number' ), array( 'name' => 'fs_h6', 'label' => __('Font Size H6', 'abp-event-ticket'), 'desc' => __('Enter the lowest micro-metadata element typographical scale sizing target for nested H6 headers.', 'abp-event-ticket'), 'type' => 'number', 'default' => '15', 'validation' => 'validation_number' ), array( 'name' => 'fs_button', 'label' => __('Button Font Size', 'abp-event-ticket'), 'desc' => __('Specify the responsive scaling text size applied directly to interactive call-to-action control items.', 'abp-event-ticket'), 'type' => 'number', 'default' => '13', 'validation' => 'validation_number' ), array( 'name' => 'color_button', 'label' => __('Button Text Color', 'abp-event-ticket'), 'desc' => __('Pick a default foreground color shade for interactive typography labels inside button boundaries.', 'abp-event-ticket'), 'type' => 'color', 'default' => '#FFF' ), array( 'name' => 'bg_button', 'label' => __('Button Background Color', 'abp-event-ticket'), 'desc' => __('Set the default fill backdrop hexadecimal color value for transactional action trigger containers.', 'abp-event-ticket'), 'type' => 'color', 'default' => '#222' ), array( 'name' => 'color_warning', 'label' => __('Warning Color', 'abp-event-ticket'), 'desc' => __('Define the system default color block layout rule reserved for error outputs, alerts, or pending notices.', 'abp-event-ticket'), 'type' => 'color', 'default' => '#E67C30' ), array( 'name' => 'bg_section', 'label' => __('Section Background Color', 'abp-event-ticket'), 'desc' => __('Determine the fallback structural base background color applied to global layout wrapper segment panels.', 'abp-event-ticket'), 'type' => 'color', 'default' => '#FAFCFE' ), ) )); } public static function description($option): void { $desc = $option['desc'] ?? ''; if ($desc) { ?>