'array', 'sanitize_callback' => array( $this, 'sanitize_options' ), 'default' => $this->get_default_options(), ) ); add_settings_section( 'selectika_main_section', __( 'Script Injection', 'selectika' ), array( $this, 'render_section_callback' ), 'selectika', array( 'before_section' => '
', 'after_section' => '
', ) ); add_settings_field( 'injection_mode', __( 'Injection Mode', 'selectika' ), array( $this, 'render_injection_mode_field' ), 'selectika', 'selectika_main_section', array( 'label_for' => 'selectika_injection_mode' ) ); add_settings_field( 'default_retailer', __( 'Default Retailer ID', 'selectika' ), array( $this, 'render_retailer_field' ), 'selectika', 'selectika_main_section', array( 'label_for' => 'selectika_default_retailer' ) ); add_settings_field( 'default_lang', __( 'Default Language', 'selectika' ), array( $this, 'render_lang_field' ), 'selectika', 'selectika_main_section', array( 'label_for' => 'selectika_default_lang' ) ); add_settings_field( 'default_action', __( 'Default Action Type', 'selectika' ), array( $this, 'render_action_field' ), 'selectika', 'selectika_main_section', array( 'label_for' => 'selectika_default_action' ) ); add_settings_field( 'auto_inject_product', __( 'Auto-inject on Product Page', 'selectika' ), array( $this, 'render_auto_inject_product_field' ), 'selectika', 'selectika_main_section' ); add_settings_field( 'auto_inject_cart', __( 'Auto-inject on Cart', 'selectika' ), array( $this, 'render_auto_inject_cart_field' ), 'selectika', 'selectika_main_section' ); add_settings_field( 'auto_inject_checkout', __( 'Auto-inject on Checkout', 'selectika' ), array( $this, 'render_auto_inject_checkout_field' ), 'selectika', 'selectika_main_section' ); } /** * Sanitize options. * * @param array $input Raw input. * @return array */ public function sanitize_options( $input ) { if ( ! is_array( $input ) ) { return $this->get_default_options(); } $allowed_modes = array( 'components_only', 'product_pages', 'whole_site' ); $sanitized = array(); if ( isset( $input['injection_mode'] ) && in_array( $input['injection_mode'], $allowed_modes, true ) ) { $sanitized['injection_mode'] = $input['injection_mode']; } else { $sanitized['injection_mode'] = 'components_only'; } $sanitized['default_retailer'] = isset( $input['default_retailer'] ) ? sanitize_text_field( $input['default_retailer'] ) : ''; $sanitized['default_lang'] = isset( $input['default_lang'] ) ? sanitize_text_field( $input['default_lang'] ) : ''; $allowed_actions = array_keys( SELECTIKA_ACTION_TYPES ); $sanitized['default_action'] = isset( $input['default_action'] ) && in_array( $input['default_action'], $allowed_actions, true ) ? $input['default_action'] : 'sbi'; $sanitized['auto_inject_product'] = $this->sanitize_action_checkboxes( $input['auto_inject_product'] ?? array() ); $sanitized['auto_inject_cart'] = $this->sanitize_action_checkboxes( $input['auto_inject_cart'] ?? array() ); $sanitized['auto_inject_checkout'] = $this->sanitize_action_checkboxes( $input['auto_inject_checkout'] ?? array() ); return $sanitized; } /** * Sanitize action checkbox array. * * @param mixed $input Input. * @return array */ private function sanitize_action_checkboxes( $input ) { if ( ! is_array( $input ) ) { return array(); } $allowed = array_keys( SELECTIKA_ACTION_TYPES ); $result = array(); foreach ( $allowed as $action ) { if ( ! empty( $input[ $action ] ) ) { $result[ $action ] = 1; } } return $result; } /** * Get default options. * * @return array */ public function get_default_options() { return array( 'injection_mode' => 'components_only', 'default_retailer' => '', 'default_lang' => get_bloginfo( 'language' ), 'default_action' => 'sbi', 'auto_inject_product' => array(), 'auto_inject_cart' => array(), 'auto_inject_checkout' => array(), ); } /** * Render section callback. */ public function render_section_callback() { echo '

' . esc_html__( 'Configure how Selectika widgets are loaded on your site.', 'selectika' ) . '

'; } /** * Render injection mode field. */ public function render_injection_mode_field() { $options = get_option( self::OPTION_NAME, $this->get_default_options() ); $value = $options['injection_mode'] ?? 'components_only'; ?>

get_default_options() ); $value = $options['default_retailer'] ?? ''; $placeholder = ! empty( $_SERVER['HTTP_HOST'] ) ? sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) ) : ''; ?>

get_default_options() ); $value = $options['default_lang'] ?? get_bloginfo( 'language' ); ?>

get_default_options() ); $value = $options['default_action'] ?? 'sbi'; ?> render_action_checkboxes( 'auto_inject_product', __( 'Select actions to auto-inject on product pages:', 'selectika' ) ); } /** * Render auto-inject cart field. */ public function render_auto_inject_cart_field() { $this->render_action_checkboxes( 'auto_inject_cart', __( 'Select actions to auto-inject on cart page and mini-cart:', 'selectika' ) ); } /** * Render auto-inject checkout field. */ public function render_auto_inject_checkout_field() { $this->render_action_checkboxes( 'auto_inject_checkout', __( 'Select actions to auto-inject on checkout:', 'selectika' ) ); } /** * Render action checkboxes for auto-inject. * * @param string $key Option key. * @param string $label Section label. */ private function render_action_checkboxes( $key, $label ) { $options = get_option( self::OPTION_NAME, $this->get_default_options() ); $checked = $options[ $key ] ?? array(); ?>

$name ) : ?>
<?php esc_attr_e( 'Selectika', 'selectika' ); ?>

[selectika action="sbi" item="product-slug" retailer="myStore" lang="en-US"]
[selectika action="ctl"]