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';
?>
settings_key ? 'nav-tab-active' : '';
printf( '%3$s', $active, $setting->settings_key, $setting->settings_tab );
}
$tabs = apply_filters( 'apollo_settings_tabs', array() );
foreach ( $tabs as $settings_key => $settings_tab ) {
$active = $current_tab === $settings_key ? 'nav-tab-active' : '';
printf( '%3$s', $active, $settings_key, $settings_tab );
}
?>
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 );
}