diff --git a/includes/class-settings.php b/includes/class-settings.php index 04f8c14..9fa8e0e 100644 --- a/includes/class-settings.php +++ b/includes/class-settings.php @@ -133,8 +133,14 @@ class Settings { // Output settings page - public function render():void { + private function load_options():bool { + if (isset($this->options) && is_array($this->options)) return false; $this->options = get_option($this->get_option_group()); + return true; + } + + public function render():void { + $this->load_options(); echo '
'; printf('

%s

', esc_html($this->get_page_title())); echo '
'; @@ -161,6 +167,30 @@ class Settings { ]), admin_url(self::PARENT_SLUG)); } + // Field Accessors + public function get_field(string $name, string $default = ''):string { + $this->load_options(); + return $this->options[$name] ?? $default; + } + + public function set_field(string $name, string $value):bool { + $this->load_options(); + $this->options[$name] = sanitize_text_field($value); + return update_option($this->get_option_group(), $this->options); + } + + public static function get(string $name, string $default = ''):string { + return self::instance()->get_field($name, $default); + } + + public static function set(string $name, string $value):bool { + return self::instance()->set_field($name, $value); + } + + public static function exists(string $name):bool { + return !empty(self::get($name)); + } + } Settings::instance();