pageName = $args['page_name']; $this->settingsName = $args['field_name']; $this->sectionName = $this->settingsName . '_section'; $this->defaultValue = isset($args['default_value']) ? $args['default_value'] : ''; $this->fieldLabel = isset($args['field_label']) ? stripslashes($args['field_label']) : ''; $this->description = isset($args['description']) ? $args['description'] : ''; $this->classAttribute = isset($args['class_attribute']) ? $args['class_attribute'] : ''; $this->optionValue = get_option($this->settingsName); add_action('admin_init', [$this, 'optionsSettingsInit']); add_action('admin_enqueue_scripts', [$this, 'enqueueScriptsAndStyles']); } public function optionsSettingsInit() { register_setting( $this->pageName, $this->settingsName, [ 'type' => 'string', 'group' => $this->pageName, 'sanitize_callback' => [$this, 'optionCallback'] ] ); add_settings_section( $this->sectionName, '', '', $this->pageName ); add_settings_field( $this->settingsName, $this->fieldLabel, [$this, 'displayCallback'], $this->pageName, $this->sectionName, ['class' => $this->classAttribute] ); } public function optionCallback($value) { $validate = new Validation; return $validate->isColorHex($value) ? $value : ''; } public function enqueueScriptsAndStyles() { wp_enqueue_style('wp-color-picker'); wp_enqueue_script('wp-color-picker'); wp_enqueue_script( Plugin::PREFIX . 'color-picker-js', Plugin::assetsUrl() . Enqueue::idHash('js/' . Plugin::PREFIX . 'color-picker.js'), [], null, 'all' ); } public function displayCallback() { printf( '%s', $this->settingsName, $this->settingsName, $this->optionValue, Plugin::PREFIX . 'color-picker', $this->description($this->description) ); } }