settings_sections = $sections; } /** * Set settings fields * * @param array $fields settings fields array */ function set_fields( $fields ) { $this->settings_fields = $fields; } /** * Initialize and registers the settings sections and fileds to WordPress * * Usually this should be called at `admin_init` hook. * * This function gets the initiated settings sections and fields. Then * registers them to WordPress and ready for use. */ function admin_init() { //register settings sections foreach ($this->settings_sections as $section) { if ( false == get_option( $section['id'] ) ) { add_option( $section['id'] ); } add_settings_section( $section['id'], $section['title'], '__return_false', $section['id'] ); } //register settings fields foreach ($this->settings_fields as $section => $field) { foreach ($field as $option) { $args = array( 'id' => $option['name'], 'desc' => $option['desc'], 'name' => $option['label'], 'section' => $section, 'size' => isset( $option['size'] ) ? $option['size'] : null, 'options' => isset( $option['options'] ) ? $option['options'] : '', 'std' => isset( $option['default'] ) ? $option['default'] : '' ); add_settings_field( $section . '[' . $option['name'] . ']', $option['label'], array($this, 'callback_' . $option['type']), $section, $section, $args ); } } // creates our settings in the options table foreach ($this->settings_sections as $section) { register_setting( $section['id'], $section['id'] ); } } /** * Displays a text field for a settings field * * @param array $args settings field args */ function callback_text( $args ) { $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) ); $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular'; $html = sprintf( '', $size, $args['section'], $args['id'], $value ); $html .= sprintf( ' %s', $args['desc'] ); echo $html; } /** * Displays a number field for a settings field * * @param array $args settings field args */ function callback_number( $args ) { $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) ); $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'small'; $html = sprintf( '', $size, $args['section'], $args['id'], $value ); $html .= sprintf( ' %s', $args['desc'] ); echo $html; } /** * Displays a checkbox for a settings field * * @param array $args settings field args */ function callback_checkbox( $args ) { $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) ); $html = sprintf( '', $args['section'], $args['id'], $value, checked( $value, 'on', false ) ); $html .= sprintf( '', $args['section'], $args['id'], $args['desc'] ); echo $html; } /** * Displays a multicheckbox a settings field * * @param array $args settings field args */ function callback_multicheck( $args ) { $value = $this->get_option( $args['id'], $args['section'], $args['std'] ); $html = ''; foreach ($args['options'] as $key => $label) { $checked = isset( $value[$key] ) ? $value[$key] : '0'; $html .= sprintf( '', $args['section'], $args['id'], $key, checked( $checked, $key, false ) ); $html .= sprintf( '
', $args['section'], $args['id'], $label, $key ); } $html .= sprintf( ' %s', $args['desc'] ); echo $html; } /** * Displays a multicheckbox a settings field * * @param array $args settings field args */ function callback_radio( $args ) { $value = $this->get_option( $args['id'], $args['section'], $args['std'] ); $html = ''; foreach ($args['options'] as $key => $label) { $html .= sprintf( '', $args['section'], $args['id'], $key, checked( $value, $key, false ) ); $html .= sprintf( '
', $args['section'], $args['id'], $label, $key ); } $html .= sprintf( ' %s', $args['desc'] ); echo $html; } /** * Displays a selectbox for a settings field * * @param array $args settings field args */ function callback_select( $args ) { $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) ); $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular'; $html = sprintf( '' ); $html .= sprintf( ' %s', $args['desc'] ); echo $html; } /** * Displays a textarea for a settings field * * @param array $args settings field args */ function callback_textarea( $args ) { $value = esc_textarea( $this->get_option( $args['id'], $args['section'], $args['std'] ) ); $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular'; $html = sprintf( '', $size, $args['section'], $args['id'], $value ); $html .= sprintf( '
%s', $args['desc'] ); echo $html; } /** * Get the value of a settings field * * @param string $option settings field name * @param string $section the section name this field belongs to * @param string $default default text if it's not found * @return string */ function get_option( $option, $section, $default = '' ) { $options = get_option( $section ); if ( isset( $options[$option] ) ) { return $options[$option]; } return $default; } /** * Show navigations as tab * * Shows all the settings section labels as tab */ function show_navigation() { $html = ''; echo $html; } /** * Show the section settings forms * * This function displays every sections in a different form */ function show_forms() { ?>
settings_sections as $form) { ?>
script(); } /** * Tabbable JavaScript codes * * This code uses localstorage for displaying active tabs */ function script() { ?>