add_sections(); $this->add_fields(); $this->set_defaults(); register_setting( $this->settings_key, $this->settings_key, array( $this, 'sanitize' ) ); if (self::settings_capability() != 'manage_options') { add_filter( 'option_page_capability_'. $this->settings_key, array( __CLASS__, 'settings_capability' ) ); } } public static function init_hooks() { add_action( 'admin_menu', array( __CLASS__, 'add_wc_submenu_options_page' ) ); add_action( 'admin_notices', array( __CLASS__, 'display_settings_errors' ) ); $page = isset($_GET['page']) ? sanitize_key($_GET['page']) : ''; $action = isset($_POST['action']) ? sanitize_key($_POST['action']) : ''; if ($page === 'apollo-invoices' || $action === 'update') { add_action( 'admin_init', array( __CLASS__, 'load_settings' ) ); } } public static function load_settings() { $settings[] = new Apollo_General_Settings(); self::$settings = apply_filters( 'apollo_settings', $settings ); } public static function add_wc_submenu_options_page() { add_submenu_page( 'woocommerce', __( 'Apollo', 'apollo-invoices' ), __( 'Apollo', 'apollo-invoices' ), self::settings_capability(), 'apollo-invoices', array( __CLASS__, 'display_options_page' ) ); } public static function settings_capability() { return apply_filters('apollo_settings_capability', 'manage_options'); } public static function display_options_page() { $current_tab = isset( $_GET['tab'] ) ? sanitize_key( $_GET['tab'] ) : 'apollo_general_settings'; ?>
sections as $id => $section ) { add_settings_section( $id, $section['title'], function() use ( $section ) { if ( isset( $section['description'] ) ) { echo $section['description']; } }, $this->settings_key ); } } public static function display_settings_notices( $settings_key ) { settings_errors( $settings_key ); } protected function add_fields() { foreach ( $this->fields as $field ) { add_settings_field( $field['name'], $field['title'], $field['callback'], $field['page'], $field['section'], $field ); }; } public function select_callback( $args ) { $options = get_option( $args['page'] ); $onchage = isset($args['onchange']) ? $args['onchange'] : ''; ?>
/>
fields; $defaults = array(); $defaults = wp_parse_args( $defaults, wp_list_pluck( $fields, 'default', 'name' ) ); return $defaults; } protected function set_defaults() { $options = get_option( $this->settings_key ); if ( $options === false ) { return add_option( $this->settings_key, $this->defaults ); } foreach ( $this->defaults as $key => $value ) { if ( ! isset( $options[ $key ] ) ) { continue; } $this->defaults[ $key ] = $options[ $key ]; } return update_option( $this->settings_key, $this->defaults ); } public abstract function sanitize( $input ); }