get($name)); } public function menu() { if (!current_user_can(self::CAPABILITY)) return; add_options_page(sprintf(Plugin::__('%s Settings'), Plugin::get_title()), Plugin::get_title(), self::CAPABILITY, Plugin::get_id(), [$this, 'page']); } public function init() { register_setting(Plugin::get_id(), Plugin::get_id()); add_settings_section( 'default', Plugin::__('General'), [$this, 'section'], Plugin::get_id(), [ 'description' => Plugin::__('General settings for this plugin.'), ] ); add_settings_field( Plugin::get_id() . '_text', Plugin::__('Text'), [$this, 'field'], Plugin::get_id(), args: [ 'name' => 'text', 'placeholder' => Plugin::__('Insert some text here...'), 'description' => Plugin::__('An example field.'), ] ); } public function page() { if (!current_user_can(self::CAPABILITY)) return; // Show error/update messages settings_errors(Plugin::get_id()); ?>

'text', 'class' => 'regular-text', 'name' => sprintf( '%s[%s]', Plugin::get_id(), $args['name'] ), 'id' => $args['name'], 'value' => (string) $this->get($args['name']), ]; if ($args['readonly'] ?? false) $attributes['readonly'] = 'readonly'; if ($args['required'] ?? false) $attributes['required'] = 'required'; if (!empty($args['placeholder'] ?? '')) { $attributes['placeholder'] = $args['placeholder']; } if (!empty($args['description'] ?? '')) { $attributes['describedby'] = $args['name'] . '-description'; } if (isset($args['attributes']) && is_array($args['attributes'])) { $attributes = array_merge($attributes, $args['attributes']); } printf( '', implode( ' ', array_map( fn (string $name, string $value): string => sprintf( '%s="%s"', $name, esc_attr($value) ), array_keys($attributes), array_values($attributes) ) ) ); if (!empty($args['description'] ?? '')) { printf( '

%s

', esc_attr($args['name']), nl2br($args['description']) ); } } public function checkbox_field(array $args):void { extract($args); echo implode('
', array_map( fn (object $option):string => sprintf( '', esc_attr(Plugin::get_id()), esc_attr($name), esc_attr($option->name), checked($this->is_checked($name, $option->name), display: false), esc_html($option->label), esc_html($option->name) ), $options )); } public static function get_url():string { return admin_url('options-general.php?page=' . Plugin::get_id()); } } Settings::instance();