File: /home/mmickelson/martyknows.com/wp-content/themes/vertigo/inc/theme-options.php
<?php
/**
* Theme Options for Vertigo
*
* @package Vertigo
*/
/**
* Init plugin options to white list our options and add css for options page
*/
function vertigo_theme_options_init() {
register_setting( 'vertigo_options', 'vertigo_theme_options', 'vertigo_theme_options_validate' );
// Register our settings field group
add_settings_section(
'general', // Unique identifier for the settings section
'', // Section title (we don't want one)
'__return_false', // Section callback (we don't want anything)
'theme_options' // Menu slug, used to uniquely identify the page; see vertigo_theme_options_add_page()
);
add_settings_field( 'colorpicker', __( 'Accent Color', 'vertigo' ), 'vertigo_settings_field_colorpicker', 'theme_options', 'general' );
add_settings_field( 'font', __( 'Font', 'vertigo' ), 'vertigo_settings_field_font', 'theme_options', 'general' );
}
add_action( 'admin_init', 'vertigo_theme_options_init' );
/**
* Load up the menu page
*/
function vertigo_theme_options_add_page() {
add_theme_page( __( 'Theme Options', 'vertigo' ), __( 'Theme Options', 'vertigo' ), 'edit_theme_options', 'theme_options', 'vertigo_theme_options_render_page' );
}
add_action( 'admin_menu', 'vertigo_theme_options_add_page' );
/**
* Change the capability required to save the 'vertigo_options' options group.
*
* @see vertigo_theme_options_init() First parameter to register_setting() is the name of the options group.
* @see vertigo_theme_options_add_page() The edit_theme_options capability is used for viewing the page.
*
* @param string $capability The capability used for the page, which is manage_options by default.
* @return string The capability to actually use.
*/
function vertigo_option_page_capability( $capability ) {
return 'edit_theme_options';
}
add_filter( 'option_page_capability_vertigo_options', 'vertigo_option_page_capability' );
/**
* Add JS for theme options form
*/
function vertigo_enqueue_theme_options_scripts() {
wp_enqueue_style( 'vertigo-theme-options', get_template_directory_uri() . '/inc/theme-options.css', false, '1.0', 'all' );
wp_enqueue_script( 'vertigo-theme-options', get_template_directory_uri() . '/js/jscolor/jscolor.js' );
}
add_action( 'admin_print_scripts-appearance_page_theme_options', 'vertigo_enqueue_theme_options_scripts' );
/**
* Renders the colorpicker setting field.
*/
function vertigo_settings_field_colorpicker() {
$options = vertigo_get_theme_options();
?>
<input type="text" name="vertigo_theme_options[accent_color]" id="accent-color" value="<?php echo esc_attr( $options['accent_color'] ); ?>" class="color { pickerPosition:'right' }" />
<label class="description" for="accent-color"><?php _e( 'Change the accent color by entering a HEX color number. (ie: <code>EE3322</code>)', 'vertigo' ) ?></label>
<?php
}
/**
* Renders the font setting field.
*/
function vertigo_settings_field_font() {
$options = vertigo_get_theme_options();
?>
<label for="vertigo-font">
<input type="checkbox" name="vertigo_theme_options[vertigo_font]" id="vertigo-font" value="true" <?php checked( $options['vertigo_font'], 'true' ); ?> />
<?php _e( 'Enable Hitchcock custom font (Note: this font only supports basic Latin uppercase letters, numerals, and some punctuation.)', 'vertigo' ); ?>
<img src="<?php echo get_template_directory_uri(); ?>/inc/images/hitchcock.gif" alt="Hitchcock" id="hitchcock-sample"/>
</label>
<?php
}
/**
* Calculate default option values
*
* @return array
*/
function vertigo_default_options() {
$default_options = array(
'accent_color' => 'ee3322',
'vertigo_font' => ( '1' == get_option( 'lang_id' ) ) ? 'true' : 'false'
);
return apply_filters( 'vertigo_default_options', $default_options );
}
/**
* Renders the Theme Options administration screen.
*/
function vertigo_theme_options_render_page() {
?>
<div class="wrap">
<h2><?php printf( __( '%s Theme Options', 'vertigo' ), wp_get_theme() ); ?></h2>
<?php settings_errors(); ?>
<form method="post" action="options.php">
<?php
settings_fields( 'vertigo_options' );
do_settings_sections( 'theme_options' );
?>
<p class="submit">
<?php submit_button( null, 'primary', 'submit', false ); ?>
<?php submit_button( __( 'Reset Options', 'vertigo' ), 'secondary', 'vertigo_theme_options[reset]', false, array( 'id' => 'reset' ) ); ?>
</p>
</form>
</div>
<?php
}
/**
* Sanitize and validate form input
*
* @param array options
* @return array sanitized options
*/
function vertigo_theme_options_validate( $input ) {
$defaults = vertigo_default_options();
// Check accent color input format
// Valid = hexadecimal 3 or 6 digits
$accent_color = preg_replace( '/[^0-9a-fA-F]/', '', $input['accent_color'] );
if ( 6 == strlen( $accent_color ) || 3 == strlen( $accent_color ) )
$input['accent_color'] = $accent_color;
else
$input['accent_color'] = $defaults['accent_color'];
// Check that Vertigo font checkbox value is either true or false
if ( ! isset( $input['vertigo_font'] ) )
$input['vertigo_font'] = ( $input['vertigo_font'] == 'true' ? 'true' : 'false' );
// Reset to default options
if ( ! empty( $input['reset'] ) ) {
$defaults = vertigo_default_options();
foreach ( $input as $field => $value ) {
if ( isset( $defaults[$field] ) )
$input[$field] = $defaults[$field];
else
unset( $input[$field] );
}
}
return $input;
}