*/ class Aitoce_Admin_Options { /** * Retrieve an option value or the entire option array. * * @param string $option_name The name of the option. * @param mixed $key Optional. The specific key within the option array to retrieve. * @param mixed $default Optional. The default value to return if not found. * @return mixed The option value or array. */ public function aitoce_get_option(string $option_name, $key = null, $default = '') { // Return either the entire option array or a single option value $options = get_option($option_name, []); if ($key === null) return $options ?? $default; else return $options[$key] ?? $default; } /** * Add a text input field to a settings section. * * @param string $id Field ID. * @param string $label Field label. * @param string $option_name Option group name. * @param string $option_slug Settings page slug. * @param string $option_section Section ID. * @param string $description Optional. Field description. */ public function aitoce_add_text_field(string $id, string $label, string $placeholder, string $option_name, string $option_slug, string $option_section, string $description = '') { add_settings_field( $id, $label, function () use ($id, $option_name, $placeholder, $label, $description) { $value = esc_attr($this->aitoce_get_option($option_name, $id)); printf( '
%s
', esc_attr($option_name), esc_attr($id), esc_attr($value), esc_attr($placeholder), esc_attr($label), wp_kses_post($description) ); }, esc_attr($option_slug), esc_attr($option_section) ); } /** * Add a textarea field to a settings section. * * @param string $id Field ID. * @param string $label Field label. * @param int $rows Number of rows for the textarea. * @param string $option_name Option group name. * @param string $option_slug Settings page slug. * @param string $option_section Section ID. * @param string $description Optional. Field description. */ public function aitoce_add_textarea_field(string $id, string $label, string $placeholder, int $rows, string $option_name, string $option_slug, string $option_section, string $description = '') { add_settings_field( $id, $label, function () use ($id, $option_name, $placeholder, $rows, $label, $description) { $value = $this->aitoce_get_option($option_name, $id); printf( '
%s
', esc_attr($option_name), esc_attr($id), esc_attr($rows), esc_attr($label), esc_attr($placeholder), esc_attr($value), wp_kses_post($description) ); }, esc_attr($option_slug), esc_attr($option_section) ); } /** * Add a checkbox field to a settings section. * * @param string $id Field ID. * @param string $label Field label. * @param string $option_name Option group name. * @param string $option_slug Settings page slug. * @param string $option_section Section ID. * @param string $description Optional. Field description. */ public function aitoce_add_checkbox_field(string $id, string $label, string $option_name, string $option_slug, string $option_section, string $description = '') { add_settings_field( $id, $label, function () use ($id, $option_name, $label, $description) { $checked = checked(1, (int) $this->aitoce_get_option($option_name, $id), false); printf( '
%s
', esc_attr($option_name), esc_attr($id), esc_attr($option_name), esc_attr($id), esc_attr($checked), wp_kses_post($description) ); }, esc_attr($option_slug), esc_attr($option_section) ); } /** * Add a select dropdown field to a settings section. * * @param string $id Field ID. * @param string $label Field label. * @param array $options Array of value => label pairs for the dropdown. * @param string $option_name Option group name. * @param string $option_slug Settings page slug. * @param string $option_section Section ID. * @param string $description Optional. Field description. */ public function aitoce_add_select_field(string $id, string $aria_label, array $options, string $option_name, string $option_slug, string $option_section, string $description = '', string $default = '') { add_settings_field( $id, $aria_label, function () use ($id, $option_name, $options, $aria_label, $description, $default) { $selected = esc_attr($this->aitoce_get_option($option_name, $id)); if(empty($selected) && !empty($default)){$selected = $default;} echo '
'; printf('

%s
', wp_kses_post($description) ); }, esc_attr($option_slug), esc_attr($option_section) ); } /** * Add a hidden field to a settings section. * * @param string $id Field ID. * @param string $value Field value. * @param string $option_name Option group name. * @param string $option_slug Settings page slug. * @param string $option_section Section ID. */ public function aitoce_add_hidden_field(string $id, string $value, string $option_name, string $option_slug, string $option_section) { add_settings_field( $id, '', function () use ($id, $option_name, $value) { printf( '', esc_attr($option_name), esc_attr($id), esc_attr($value), esc_attr($id) ); }, esc_attr($option_slug), esc_attr($option_section) ); } /** * Add a text input field to a settings section. * * @param string $id Field ID. * @param string $label Field label. * @param string $option_name Option group name. * @param string $option_slug Settings page slug. * @param string $option_section Section ID. * @param string $description Optional. Field description. */ public function aitoce_add_color_picker_field(string $id, string $label, string $default_color, string $option_name, string $option_slug, string $option_section, string $description = '') { add_settings_field( $id, $label, function () use ($id, $option_name, $label, $default_color, $description) { $value = esc_attr($this->aitoce_get_option($option_name, $id)); if (empty($value)) { $value = $default_color; } printf( '
%s
', esc_attr($option_name), esc_attr($id), esc_attr($value), esc_attr($label), esc_attr($default_color), wp_kses_post($description) ); }, esc_attr($option_slug), esc_attr($option_section) ); } /** * Get the current HTTP host as a referer string. * * @return string The sanitized HTTP host or a fallback message. */ public function aitoce_get_referer(): string { return !empty($_SERVER['HTTP_HOST']) ? sanitize_text_field(wp_unslash($_SERVER['HTTP_HOST'])) : esc_html__('Host name not found! Please contact your server support.', 'ai-tool-center'); } /** * Show an admin notice message in the WordPress dashboard. * * @param string $aitoce_message The message to display. * @param string $aitoce_type Notice type: 'success', 'error', 'warning', 'info'. */ public function aitoce_admin_notice(string $aitoce_message, string $aitoce_type = 'info'): void { echo '

' . wp_kses_post($aitoce_message) . '

'; } }