'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 ) : ?>
[selectika action="sbi" item="product-slug" retailer="myStore" lang="en-US"]
[selectika action="ctl"]