$value) { if (intval($value) === -1) { unset($settings[$name]); } } $GLOBALS['siteorigin_settings'] = wp_parse_args( $settings, $GLOBALS['siteorigin_settings_defaults'] ); $GLOBALS['siteorigin_settings'] = apply_filters('siteorigin_settings_values', $GLOBALS['siteorigin_settings']); // Register all the actions for the settings page add_action( 'admin_menu', 'siteorigin_settings_admin_menu' ); add_action( 'admin_init', 'siteorigin_settings_admin_init', 8 ); add_action( 'siteorigin_adminbar', 'siteorigin_settings_adminbar' ); add_action( 'admin_enqueue_scripts', 'siteorigin_settings_enqueue_scripts' ); } add_action('after_setup_theme', 'siteorigin_settings_init', 5); /** * Initialize admin settings in the admin * * @action admin_init */ function siteorigin_settings_admin_init() { register_setting( 'theme_settings', $GLOBALS['siteorigin_settings_name'], 'siteorigin_settings_validate' ); if(get_theme_mod('version_activated', false) === false) { set_theme_mod('version_activated', SITEORIGIN_THEME_VERSION); } } /** * Set up the theme settings page. * * @action admin_menu */ function siteorigin_settings_admin_menu() { $theme = wp_get_theme(); $page = add_theme_page( sprintf(__( '%s Theme Settings', 'aviator' ), $theme->get('Name') ), sprintf(__( 'Theme Settings', 'aviator' ), $theme->get('Name') ), 'edit_theme_options', 'theme_settings_page', 'siteorigin_settings_render' ); add_action( 'load-' . $page, 'siteorigin_settings_theme_help' ); } /** * Add the Edit Home Page item to the admin bar. * * @param WP_Admin_Bar $admin_bar * @return WP_Admin_Bar */ function siteorigin_settings_admin_bar_menu($admin_bar){ // Only display this until the theme settings have been saved for the first time if( get_option( get_template() . '_theme_settings', false ) !== false ) return $admin_bar; if( is_admin() ) { // Skip this on the settings page $screen = get_current_screen(); if( $screen->base == 'appearance_page_theme_settings_page' ) return $admin_bar; } if( current_user_can('edit_theme_options') && has_filter('siteorigin_settings_tour_content') ){ $admin_bar->add_node(array( 'id' => 'theme-settings-tour', 'title' => __('Theme Tour', 'aviator'), 'href' => admin_url('themes.php?page=theme_settings_page#tour') ) ); } return $admin_bar; } add_action('admin_bar_menu', 'siteorigin_settings_admin_bar_menu', 100); /** * Render the theme settings page */ function siteorigin_settings_render() { if( version_compare( get_bloginfo('version'), '3.4', '<' ) ) { ?>

array( 'hasPremium' => has_filter('siteorigin_premium_content'), 'premiumUrl' => admin_url('themes.php?page=premium_upgrade'), 'isPremium' => defined('SITEORIGIN_IS_PREMIUM'), 'name' => apply_filters('siteorigin_premium_theme_name', ucfirst( get_option( 'template' ) ) . ' ' . __( 'Premium', 'aviator' ) ), ), 'tour' => array( 'buttonText' => __('Theme Tour', 'aviator'), 'content' => apply_filters( 'siteorigin_settings_tour_content', array() ), ), ) ); if( wp_script_is( 'wp-color-picker', 'registered' ) ){ wp_enqueue_style( 'wp-color-picker' ); wp_enqueue_script( 'wp-color-picker' ); } else{ wp_enqueue_style( 'farbtastic' ); wp_enqueue_script( 'farbtastic' ); } // We need the media editors wp_enqueue_media(); // This is for the media uploader if ( function_exists( 'wp_enqueue_media' ) ) wp_enqueue_media(); } /** * Add the admin bar to the settings page * * @param $bar * @return object|null */ function siteorigin_settings_adminbar( $bar ) { $screen = get_current_screen(); if ( $screen->id == 'appearance_page_theme_settings_page' ) { $bar = (object) array( 'id' => $GLOBALS['siteorigin_settings_name'], 'message' => array( 'extras/settings/message' ) ); } return $bar; } /** * Add a settings section. * * @param $id * @param $name */ function siteorigin_settings_add_section( $id, $name ) { // This is to prevent issues when adding settings that will only be used in the preview. if( is_admin() ) { add_settings_section( $id, $name, '__return_false', 'theme_settings' ); } } /** * Add a setting * * @param string $section * @param string $id * @param string $type * @param string $title * @param array $args */ function siteorigin_settings_add_field( $section, $id, $type, $title = null, $args = array() ) { global $wp_settings_fields; if ( isset( $wp_settings_fields[ 'theme_settings' ][ $section ][ $id ] ) ) { if ( isset( $wp_settings_fields[ 'theme_settings' ][ $section ][ $id ][ 'args' ][ 'type' ] ) && $wp_settings_fields[ 'theme_settings' ][ $section ][ $id ][ 'args' ][ 'type' ] == 'teaser' ) { // Copy the args from the teaser field, then make sure we have the proper type set. $args = wp_parse_args( $args, $wp_settings_fields[ 'theme_settings' ][ $section ][ $id ][ 'args' ]); $args['type'] = $type; if ( empty( $title ) && !empty( $wp_settings_fields[ 'theme_settings' ][ $section ][ $id ][ 'title' ] ) ) { // Copy across the title field $title = $wp_settings_fields[ 'theme_settings' ][ $section ][ $id ][ 'title' ]; } // Replace the teaser field with the actual setting $wp_settings_fields[ 'theme_settings' ][ $section ][ $id ] = array( 'id' => $id, 'title' => $title, 'callback' => 'siteorigin_settings_field', 'args' => $args ); } else return; } // Skip fields that don't have a title if( empty($title) ) return; $args = wp_parse_args( $args, array( 'section' => $section, 'field' => $id, 'type' => $type, ) ); if( is_admin() ) { // Add the settings field if it's available (we're in the admin) add_settings_field( $id, $title, 'siteorigin_settings_field', 'theme_settings', $section, $args ); } else { global $siteorigin_theme_settings_preview; if( empty($siteorigin_theme_settings_preview) ) $siteorigin_theme_settings_preview = array(); } if ( is_admin() && $type == 'editor' && !empty($args['editor_style_formats']) ) { global $siteorigin_settings_editor_style_formats; $siteorigin_settings_editor_style_formats[$section . '_' . $id] = $args['editor_style_formats']; } } /** * Adds a field that might only be available in another version of the theme. * * @param $section * @param $id * @param $name * @param array $args */ function siteorigin_settings_add_teaser( $section, $id, $name, $args = array() ) { global $wp_settings_fields; if ( isset( $wp_settings_fields['theme_settings'][ $section ][ $id ] ) ) return; $args = wp_parse_args( $args, array( 'section' => $section, 'field' => $id, 'type' => 'teaser', ) ); if( is_admin() ) { add_settings_field( $id, $name, 'siteorigin_settings_field', 'theme_settings', $section, $args ); } } /** * Remove a setting. * * @param $section * @param $id */ function siteorigin_settings_remove_field( $section, $id ){ global $wp_settings_fields; unset( $wp_settings_fields[ 'theme_settings' ][$section][$id] ); } /** * Get the value of a setting, or the default value. * * @param string $name The setting name. * @param mixed $default The default setting. * * @return mixed */ function siteorigin_setting( $name , $default = null) { $value = null; if ( !is_null( $default ) && ( !is_bool( $GLOBALS[ 'siteorigin_settings' ][ $name ] ) && empty( $GLOBALS[ 'siteorigin_settings' ][ $name ] ) ) ) { return apply_filters( 'siteorigin_setting_'.$name, $default ); } if ( !isset( $GLOBALS[ 'siteorigin_settings' ][ $name ] ) ) $value = null; else $value = $GLOBALS[ 'siteorigin_settings' ][ $name ]; return apply_filters('siteorigin_setting_'.$name, $value); } /** * @param $name * @param null $default * * @return mixed */ function siteorigin_settings_get($name, $default = null){ return siteorigin_setting($name, $default); } /** * Sets and a theme setting. Will attempt to validate if in the admin. * * @param $name * @param $value */ function siteorigin_settings_set($name, $value) { global $siteorigin_settings; $theme_name = basename( get_template_directory() ); // Update settings in the database $settings = get_option( $theme_name . '_theme_settings', array() ); $settings[$name] = $value; update_option( $theme_name . '_theme_settings', $settings ); // Update the temporary value if( empty( $siteorigin_settings ) ) { $siteorigin_settings = array(); } $siteorigin_settings[$name] = $value; } /** * Render a settings field. * * @param $args */ function siteorigin_settings_field( $args ) { $field_name = $GLOBALS['siteorigin_settings_name'] . '[' . $args['section'] . '_' . $args['field'] . ']'; $field_id = $args['section'] . '_' . $args['field']; $current = isset( $GLOBALS['siteorigin_settings'][ $field_id ] ) ? $GLOBALS['siteorigin_settings'][ $field_id ] : null; ?>
/>
upgrade to WordPress 3.5 to use media fields', 'aviator'), admin_url('update-core.php')); break; } if(!empty($current)) { if(is_array($current)) { $src = $current; } else { $post = get_post($current); $src = wp_get_attachment_image_src($current, 'thumbnail'); if(empty($src)) $src = wp_get_attachment_image_src($current, 'thumbnail', true); } } else{ $src = array('', 0, 0); } $choose_title = empty($args['choose']) ? __('Choose Media', 'aviator') : $args['choose']; $update_button = empty($args['update']) ? __('Set Media', 'aviator') : $args['update']; ?>
/>
post_title) ?>
%s - Upgrade Now', 'aviator' ), apply_filters('siteorigin_premium_theme_name', ucfirst($theme) . ' ' . __( 'Premium', 'aviator' ) ) ) ?>
'page', 'numberposts' => 200, 'post_status' => empty($args['unpublished']) ? 'publish' : 'any', ) ); ?> $field_name, 'textarea_rows' => 8, ) ); wp_editor( $current, $field_id, $editor_settings ); break; case 'widget' : if(empty($args['widget_class'])) break; if( !class_exists($args['widget_class']) && !empty($args['bundle_widget']) && class_exists('SiteOrigin_Widgets_Bundle') ) { // If this is a widget bundle widget, and the class isn't available, then try activate it. SiteOrigin_Widgets_Bundle::single()->activate_widget($args['bundle_widget']); } if( !class_exists($args['widget_class']) ) { // Display the message prompting the user to install the widget plugin from WordPress.org ?>
Install %s now. ', 'aviator'), $install_url, $args['plugin_name']); } ?>
id = $field_id; $the_widget->number = $field_id; ob_start(); $the_widget->form( $current ); $form = ob_get_clean(); // Convert the widget field naming into ones that Settings will use $exp = preg_quote( $the_widget->get_field_name('____') ); $exp = str_replace('____', '(.*?)', $exp); $form = preg_replace( '/'.$exp.'/', 'siteorigin_settings_widget['.preg_quote($field_id).'][$1]', $form ); ?>
' . $args['description'] . '

'; } /** * Validate the settings values * * @param $values * @param $set_tab * * @return array */ function siteorigin_settings_validate( $values, $set_tab = true ) { if( is_admin() ) { global $wp_settings_fields; $theme_settings = !empty($wp_settings_fields['theme_settings']) ? $wp_settings_fields['theme_settings'] : array(); } else { global $siteorigin_theme_settings_preview; $theme_settings = !empty($siteorigin_theme_settings_preview) ? $siteorigin_theme_settings_preview : array(); } $theme_name = basename( get_template_directory() ); $current = get_option( $theme_name . '_theme_settings', array() ); if($set_tab) set_theme_mod( '_theme_settings_current_tab', isset( $_REQUEST['theme_settings_current_tab'] ) ? $_REQUEST['theme_settings_current_tab'] : 0 ); $changed = false; foreach ( $theme_settings as $section_id => $fields ) { foreach ( $fields as $field_id => $field ) { $name = $section_id . '_' . $field_id; if( !isset($values[$name]) ) { $values[$name] = false; continue; } if( !empty($field['args']['options']) ){ $field['args']['options'] = apply_filters('siteorigin_setting_options_'.$name, $field['args']['options']); } switch($field['args']['type']){ case 'text' : $values[ $name ] = sanitize_text_field($values[$name]); break; case 'checkbox' : // Only allow true or false values $values[ $name ] = !empty( $values[ $name ] ); break; case 'number' : // Only allow integers $values[ $name ] = isset( $values[ $name ] ) ? intval( $values[ $name ] ) : $GLOBALS['siteorigin_settings_defaults'][ $name ]; break; case 'media' : // Only allow valid attachment post ids if( $values[ $name ] != -1 ) { $attachment = get_post( $values[ $name ] ); if(empty($attachment) || $attachment->post_type != 'attachment') $values[ $name ] = ''; } break; case 'select': if( !empty($field['args']['options']) && is_array($field['args']['options']) ) { // Make sure the value is in the options. if( !isset($field['args']['options'][ $values[$name] ]) ) $values[$name] = ''; } break; case 'widget' : if( !class_exists($field['args']['widget_class']) ) { $values[ $name ] = !empty($values[ $name ]) ? unserialize( $values[ $name ] ) : false; } else if( !empty( $_POST['siteorigin_settings_widget'] ) && !empty($_POST['siteorigin_settings_widget'][$name]) ) { $widget_values = stripslashes_deep($_POST['siteorigin_settings_widget'][$name]); $the_widget = new $field['args']['widget_class'](); $values[ $name ] = $the_widget->update( $widget_values, !empty($current[$name]) ? $current[$name] : array() ); } else { $values[ $name ] = unserialize( $values[ $name ] ); } break; case 'editor': case 'text': $values[ $name ] = sanitize_text_field( $values[ $name ] ); break; } if ( !isset( $current[ $name ] ) || ( isset( $values[ $name ] ) && isset( $current[ $name ] ) && $values[ $name ] != $current[ $name ] ) ) { // Trigger an action that a field has changed do_action('siteorigin_settings_changed_field_changed', $name, isset($values[$name]) ? $values[$name] : null, isset($current[$name]) ? $current[$name] : null); do_action('siteorigin_settings_changed_field_changed_'.$name, isset($values[$name]) ? $values[$name] : null, isset($current[$name]) ? $current[$name] : null); $changed = true; } // See if this needs any special validation if ( !empty( $field['args']['validator'] ) && method_exists( 'SiteOrigin_Settings_Validator', $field['args']['validator'] ) ) { $values[ $name ] = call_user_func( array( 'SiteOrigin_Settings_Validator', $field['args']['validator'] ), $values[ $name ] ); } } } if ( $changed ) { do_action( 'siteorigin_settings_changed' ); set_theme_mod( 'siteorigin_settings_changed', true ); } return $values; } /** * Display a message when the settings have been changed */ function siteorigin_settings_change_message() { if ( get_theme_mod( 'siteorigin_settings_changed' ) ) { remove_theme_mod( 'siteorigin_settings_changed' ); ?>

theme documentation for help with these settings.", 'aviator' ), ucfirst($theme_name), 'http://siteorigin.com/theme/'.$theme_name.'/?action=docs' ); $screen->add_help_tab( array( 'id' => 'siteorigin_settings_help_tab', 'title' => __( 'Settings Help', 'aviator' ), 'content' => '

' . $text . '

', ) ); } /** * Gets all template layouts */ function siteorigin_settings_template_part_names($parts, $part_name){ $return = array(); $parent_parts = glob( get_template_directory().'/'.$parts.'*.php' ); $child_parts = glob( get_stylesheet_directory().'/'.$parts.'*.php' ); $files = array_unique( array_merge( !empty($parent_parts) ? $parent_parts : array(), !empty($child_parts) ? $child_parts : array() ) ); if( !empty($files) ) { foreach( $files as $file ) { $p = pathinfo($file); $filename = explode('-', $p['filename'], 2); $name = isset($filename[1]) ? $filename[1] : ''; $info = get_file_data($file, array( 'name' => $part_name, ) ); $return[$name] = $info['name']; } } ksort($return); return $return; } function siteorigin_settings_media_view_strings($strings, $post){ if( !empty($post) ) return $strings; if( !is_admin() || !function_exists('get_current_screen') ) return $strings; // Skip this on front end usage $screen = get_current_screen(); if(empty($screen->id) || $screen->id != 'appearance_page_theme_settings_page') return $strings; // Remove these strings, to remove the tabs // Luckily the JS gracefully handles these being unset unset($strings['createNewGallery']); unset($strings['createGalleryTitle']); unset($strings['insertFromUrlTitle']); $strings['insertIntoPost'] = __('Set Media File', 'aviator'); return $strings; } add_filter('media_view_strings', 'siteorigin_settings_media_view_strings', 10, 2); /** * Add editor formats for theme settings page */ function siteorigin_settings_add_editor_formats( $init_array ){ // This ensures that we're in the admin. Not adding this line can cause problems with some plugins if( !function_exists('get_current_screen') ) return $init_array; // Make sure we're on the theme settings page $screen = get_current_screen(); if( !empty($screen) && $screen->base == 'appearance_page_theme_settings_page' && !empty($init_array) ) { global $siteorigin_settings_editor_style_formats; if( isset( $siteorigin_settings_editor_style_formats[ $init_array['body_class'] ] ) ) { $init_array['style_formats'] = json_encode( $siteorigin_settings_editor_style_formats[ $init_array['body_class'] ] ); } } return $init_array; } add_filter('tiny_mce_before_init', 'siteorigin_settings_add_editor_formats'); function siteorigin_settings_add_editor_styles_button($buttons){ // This ensures that we're in the admin. Not adding this line can cause problems with some plugins if( !function_exists('get_current_screen') ) return $buttons; // Make sure we're on the theme settings page $screen = get_current_screen(); if( !empty($screen) && $screen->base == 'appearance_page_theme_settings_page' && is_array($buttons) ) { array_unshift($buttons, 'styleselect'); } return $buttons; } add_filter('mce_buttons_2', 'siteorigin_settings_add_editor_styles_button'); function siteorigin_settings_add_slider_options($options){ // Add all Meta Sliders if( class_exists('MetaSliderPlugin') ){ $sliders = get_posts(array( 'post_type' => 'ml-slider', 'numberposts' => 100, )); foreach($sliders as $slider) { $options['[metaslider id="'.$slider->ID.'"]'] = __('Meta Slider: ', 'aviator').$slider->post_title; } } // Add all the Revolution sliders if( function_exists('rev_slider_shortcode') ) { global $wpdb; $sliders = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}revslider_sliders ORDER BY title"); foreach($sliders as $slider) { $options['[rev_slider '.$slider->alias.']'] = __('Revolution Slider: ', 'aviator').$slider->title; } } // Add any LayerSlider Sliders if( function_exists('layerslider') ) { global $wpdb; $sliders = $wpdb->get_results("SELECT id,name FROM {$wpdb->prefix}layerslider ORDER BY name"); foreach($sliders as $slider) { $options['[layerslider id="'.$slider->id.'"]'] = __('LayerSlider: ', 'aviator').$slider->name; } } return $options; } /** * Settings validators. */ class SiteOrigin_Settings_Validator { /** * Extracts the twitter username from the string. * * @static * @param $twitter * @return bool|mixed|string */ static function twitter( $twitter ) { $twitter = trim( $twitter ); if ( empty( $twitter ) ) return false; if ( $twitter[ 0 ] == '@' ) return preg_replace( '/^@+/', '', $twitter ); $url = parse_url( $twitter ); // Check if this is a twitter URL if ( isset( $url['host'] ) && !in_array( $url['host'], array( 'twitter.com', 'www.twitter.com' ) ) ) return false; // Check if this is a fragment URL if ( isset( $url['fragment'] ) && $url['fragment'][ 0 ] == '!' ) return substr( $url['fragment'], 2 ); // And our very last attempt... take it that the username is on the end of the path if ( isset( $url['path'] ) ) { $parts = explode( '/', $url['path'] ); $username = array_pop( $parts ); return $username; } return false; } } /** * Initialize the theme settings preview. */ function siteorigin_settings_preview_init(){ if( !is_admin() && current_user_can('edit_theme_options') && !empty($_POST['siteorigin_settings_is_preview']) && !empty($_POST[basename( get_template_directory() ) . '_theme_settings']) && wp_verify_nonce($_POST['_wpnonce'], 'theme_settings-options') ) { // We're in a preview mode, so filter the settings and hide the admin bar add_filter('siteorigin_settings_values', 'siteorigin_settings_preview_values'); // Hide the admin bar - this is only involved when an administrator is previewing the theme settings (see previous IF statement). add_filter('show_admin_bar', '__return_false'); } } add_action('after_setup_theme', 'siteorigin_settings_preview_init', 4); // This must run before we initialize the settings /** * Filter SiteOrigin settings for the preview. * @param $values * @return array */ function siteorigin_settings_preview_values($values){ do_action('siteorigin_settings_init'); $post_values = siteorigin_settings_validate( stripslashes_deep( $_POST[basename( get_template_directory() ) . '_theme_settings'] ) , false ); return $post_values; }