pageName = $args['page_name']; $this->settingsName = $args['field_name']; $this->sectionName = $this->settingsName . '_section'; $this->fieldLabel = isset($args['field_label']) ? stripslashes($args['field_label']) : ''; $this->extensions = isset($args['extensions']) ? $args['extensions'] : ''; $this->classAttribute = isset($args['class_attribute']) ? $args['class_attribute'] : ''; $this->description = isset($args['description']) ? $args['description'] : ''; $this->optionValue = get_option($this->settingsName); add_action('admin_enqueue_scripts', [$this, 'enqueueScriptsAndStyles']); add_action('admin_init', [$this, 'optionsSettingsInit']); } 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) { if (has_filter(Plugin::PREFIX_ . 'sanitize_option_' . $this->settingsName)) { return apply_filters(Plugin::PREFIX_ . 'sanitize_option_' . $this->settingsName, $value); } if (get_post_meta($value)['_wp_attachment_metadata'] || get_post_meta($value)['_wp_attached_file']) { return $value; } } private function mediaTypes() { $selectedExtensions = Collection::make(Collection::make($this->extensions)->get('types')) ->keys() ->all(); $list = Collection::make([ 'ico' => 'image/x-icon', 'gif' => 'image/gif', 'jpeg' => 'image/jpeg', 'png' => 'image/png', 'svg' => 'image/svg+xml' ]); $mediaTypesArray = $list->only($selectedExtensions) ->flip() ->keys() ->all(); return implode(', ', $mediaTypesArray); } public function enqueueScriptsAndStyles() { wp_enqueue_media(); wp_enqueue_script( Plugin::PREFIX . 'media-js', Plugin::assetsUrl() . 'js/' . Plugin::PREFIX . 'media.js', [], Plugin::VERSION, 'all' ); wp_enqueue_style( Plugin::PREFIX . 'media-css', Plugin::assetsUrl() . 'css/' . Plugin::PREFIX . 'media.css', true, Plugin::VERSION, 'all' ); } public function displayCallback() { // vardumper($GLOBALS['submenu']); printf('
', Plugin::PREFIX . 'media-wrapper'); printf( '
', Plugin::PREFIX . 'image-preview-wrapper hidden', Plugin::PREFIX . 'image-preview-box', wp_get_attachment_thumb_url($this->optionValue) ); printf( '
', Plugin::PREFIX . 'upload-image', 'button ' . Plugin::PREFIX . 'upload-image__button', __('Upload'), $this->mediaTypes() ); printf( '', $this->settingsName, $this->optionValue, Plugin::PREFIX . 'media-attachment' ); printf( '
%s
', Plugin::PREFIX . 'delete-image hidden', 'javascript:;', Plugin::PREFIX . 'delete-image__link', __('Delete') ); print('
'); print($this->description($this->description)); } }