color_schemes_arr = array('al_pacino', 'blue_sky', 'dark_night', 'black_and_white', 'pinkman', 'space', 'grey_clouds', 'almond_milk', 'clear_white', 'sakura', 'mighty_slate', 'retro_orange'); } public function get_var($default_key, $default_value){ if(isset($this->default_vars["{$default_key}"])) return $this->default_vars["{$default_key}"]; else return $default_value; } public function load_defaults() { $scheme_vars = array(); $color_scheme = $this->get_current_color_scheme(); // load default color scheme settings require_once( get_template_directory() . "/inc/colors/default.php"); if(!in_array($color_scheme, $this->color_schemes_arr)){ $color_scheme = "blue_sky"; } // load selected colors scheme settings require_once( get_template_directory() . "/inc/colors/{$color_scheme}.php" ); // load custom variables you want to override require_once( get_template_directory() . '/extend/custom_scheme_vars.php' ); $this->default_vars = $scheme_vars; } public static function get_current_color_scheme() { if(isset($_SESSION['color_scheme'])){ $color_scheme = $_SESSION['color_scheme']; }else{ $color_scheme = get_field('color_scheme', 'option'); } return $color_scheme; } // ************************************************** // ************************************************** // ************************************************** // SETTING LESS CSS VARIABLES FROM THE ADMIN OPTIONS // ************************************************** // ************************************************** // ************************************************** function my_less_vars( $vars, $handle ) { $this->load_defaults(); $vars = $this->default_vars; $vars[ 'plutoFolderPath' ] = "'".get_template_directory_uri()."'"; $vars[ 'imagesPath' ] = "'".get_template_directory_uri()."/assets/images'"; $vars[ 'fontsPath' ] = "'".get_template_directory_uri()."/assets/fonts'"; $vars[ 'logoImageHeight' ] = $this->custom_or_default('logo_image_height', 'logoImageHeight', '40px'); $vars[ 'topMenuLogoImageHeight' ] = $this->custom_or_default('top_menu_logo_image_height', 'topMenuLogoImageHeight', '20px'); $vars[ 'fixedPostHeight' ] = '200px'; if (get_field('logo_type', 'option') == 'text'){ $vars[ 'logoFontSize' ] = $this->custom_or_default('logo_font_size', 'logoFontSize', '24px'); $vars[ 'logoPadding' ] = '8px'; }else{ $vars[ 'logoFontSize' ] = '24px'; $vars[ 'logoPadding' ] = '0px'; } if(get_field('no_limit_single_post_width', 'option') != true){ if(get_field('single_post_maximum_width', 'option')){ $vars[ 'singlePostMaxWidth' ] = $this->add_px(get_field('single_post_maximum_width', 'option')); }else{ $vars[ 'singlePostMaxWidth' ] = '900px'; } }else{ $vars[ 'singlePostMaxWidth' ] = 'auto'; } // COLUMNS // without sidebar menu left right $vars[ 'wosmlr_columns_992_1200' ] = $this->custom_or_default('wosmlr_columns_992_1200', 'wosmlr_columns_992_1200', 2); $vars[ 'wosmlr_columns_1200_1600' ] = $this->custom_or_default('wosmlr_columns_1200_1600', 'wosmlr_columns_1200_1600', 3); $vars[ 'wosmlr_columns_1600_1750' ] = $this->custom_or_default('wosmlr_columns_1600_1750', 'wosmlr_columns_1600_1750', 4); $vars[ 'wosmlr_columns_1750_5000' ] = $this->custom_or_default('wosmlr_columns_1750_5000', 'wosmlr_columns_1750_5000', 5); // without sidebar menu top $vars[ 'wosmt_columns_768_992' ] = $this->custom_or_default('wosmt_columns_768_992', 'wosmt_columns_768_992', 2); $vars[ 'wosmt_columns_992_1200' ] = $this->custom_or_default('wosmt_columns_992_1200', 'wosmt_columns_992_1200', 3); $vars[ 'wosmt_columns_1200_1300' ] = $this->custom_or_default('wosmt_columns_1200_1300', 'wosmt_columns_1200_1300', 3); $vars[ 'wosmt_columns_1300_1600' ] = $this->custom_or_default('wosmt_columns_1300_1600', 'wosmt_columns_1300_1600', 4); $vars[ 'wosmt_columns_1600_5000' ] = $this->custom_or_default('wosmt_columns_1600_5000', 'wosmt_columns_1600_5000', 5); // with sidebar menu left right $vars[ 'wsmlr_columns_992_1600' ] = $this->custom_or_default('wsmlr_columns_992_1600', 'wsmlr_columns_992_1600', 2); $vars[ 'wsmlr_columns_1600_1750' ] = $this->custom_or_default('wsmlr_columns_1600_1750', 'wsmlr_columns_1600_1750', 3); $vars[ 'wsmlr_columns_1750_5000' ] = $this->custom_or_default('wsmlr_columns_1750_5000', 'wsmlr_columns_1750_5000', 4); // with sidebar menu top $vars[ 'wsmt_columns_992_1300' ] = $this->custom_or_default('wsmt_columns_992_1300', 'wsmt_columns_992_1300', 2); $vars[ 'wsmt_columns_1300_1600' ] = $this->custom_or_default('wsmt_columns_1300_1600', 'wsmt_columns_1300_1600', 3); $vars[ 'wsmt_columns_1600_1880' ] = $this->custom_or_default('wsmt_columns_1600_1880', 'wsmt_columns_1600_1880', 4); $vars[ 'wsmt_columns_1880_5000' ] = $this->custom_or_default('wsmt_columns_1880_5000', 'wsmt_columns_1880_5000', 5); // FONTS $vars[ 'baseFontSize' ] = $this->add_px($this->custom_or_default('base_font_size' , 'baseFontSize')); $vars[ 'headingsBaseFontSize' ] = $this->add_px($this->custom_or_default('headings_base_font_size' , 'headingsBaseFontSize')); $vars[ 'mainMenuFontSize' ] = $this->add_px($this->custom_or_default('main_menu_font_size' , 'mainMenuFontSize')); $vars[ 'menuLogoFontSize' ] = $this->add_px($this->custom_or_default('logo_font_size' , 'menuLogoFontSize')); $vars[ 'baseFontFamily' ] = $this->custom_or_default('text_font_family' , 'baseFontFamily'); $vars[ 'baseFontWeight' ] = $this->custom_or_default('text_font_weight' , 'baseFontWeight'); $vars[ 'headingsFontFamily' ] = $this->custom_or_default('headings_font_family' , 'headingsFontFamily'); $vars[ 'headingsFontWeight' ] = $this->custom_or_default('headings_font_weight' , 'headingsFontWeight'); $vars[ 'menuFontFamily' ] = $this->custom_or_default('menu_font_family' , 'menuFontFamily'); $vars[ 'menuFontWeight' ] = $this->custom_or_default('menu_links_font_weight' , 'menuFontWeight'); // Check if "allow override of color scheme" is checked in admin if(get_field('enable_custom_colors', 'option') == true) { $vars[ 'ajaxLoaderImageName' ] = $this->custom_or_default('ajax_loader_image_name', 'ajaxLoaderImageName', 'loader-blue'); // BODY $vars[ 'bodyBackgroundImage' ] = $this->custom_or_default_image_url('body_background_image', 'bodyBackgroundImage', 'none'); $vars[ 'bodyBackgroundColor' ] = $this->custom_or_default('body_background_color' , 'bodyBackgroundColor'); if(get_field('body_background_color', 'option')){ if(get_field('body_background_style', 'option') == 'dark'){ $vars['bodyHeadingsColor'] = $this->my_mix($vars[ 'bodyBackgroundColor' ], '#fff', 30); $vars['bodyTextColor'] = $this->my_mix($vars[ 'bodyBackgroundColor' ], '#fff', 50); }else{ $vars['bodyHeadingsColor'] = $this->my_mix($vars[ 'bodyBackgroundColor' ], '#111', 30); $vars['bodyTextColor'] = $this->my_mix($vars[ 'bodyBackgroundColor' ], '#111', 50); } } // MENU $vars[ 'menuBackgroundImage' ] = $this->custom_or_default_image_url('menu_background_image' , 'menuBackgroundImage', 'none'); $vars[ 'menuBackgroundColor' ] = $this->custom_or_default('menu_background_color' , 'menuBackgroundColor'); $vars[ 'menuTopBackgroundImage' ] = $this->custom_or_default_image_url('menu_background_image' , 'menuTopBackgroundImage', 'none'); $vars[ 'menuTopBackgroundColor' ] = $this->custom_or_default('menu_background_color' , 'menuTopBackgroundColor'); if( get_field('menu_background_style', 'option') == 'light' ){ $vars[ 'menuShadow' ] = '0px 0px 8px 1px rgba(0,0,0,0.1), inset 0px 0px 2px 1px #fff'; $vars[ 'menuBorderColor' ] = $this->adjustBrightness( $vars[ 'menuBackgroundColor' ], -20); // MENU LIST $vars[ 'menuLinkColor' ] = '#111'; $vars[ 'menuLogoColor' ] = '#111'; $vars[ 'menuLinkColorActive' ] = $this->my_mix($vars[ 'menuBackgroundColor' ], '#111', 30); // MENU SERCH $vars[ 'menuSearchFieldBackground' ] = $this->adjustBrightness( $vars[ 'menuBackgroundColor' ], 20); $vars[ 'menuSearchFieldBorderColor' ] = $this->adjustBrightness( $vars[ 'menuBackgroundColor' ], -20); $vars[ 'menuSearchFieldShadow' ] = "1px 1px 2px 0px " . $this->adjustBrightness( $vars[ 'menuBackgroundColor' ], 20) . ", inset 0px 1px 1px 0px rgba(0,0,0,0.1)"; }else{ $vars[ 'menuShadow' ] = 'none'; $vars[ 'menuBorderColor' ] = 'none'; // MENU LIST $vars[ 'menuLinkColor' ] = $this->my_mix($vars[ 'menuBackgroundColor' ], '#fff', 35); $vars[ 'menuLogoColor' ] = $this->my_mix($vars[ 'menuBackgroundColor' ], '#fff', 15); $vars[ 'menuLinkColorActive' ] = $this->my_mix($vars[ 'menuBackgroundColor' ], '#fff', 10); // MENU SERCH $vars[ 'menuSearchFieldBackground' ] = $this->adjustBrightness( $vars[ 'menuBackgroundColor' ], -40); $vars[ 'menuSearchFieldColor' ] = '#fff'; $vars[ 'menuSearchFieldBorderColor' ] = $this->adjustBrightness( $vars[ 'menuBackgroundColor' ], 30); $vars[ 'menuSearchFieldShadow' ] = 'none'; } // MENU GRADIENT if( get_field('menu_background_color', 'option') ){ $vars['menuBackgroundGradientFrom'] = $vars[ 'menuBackgroundColor' ]; $vars['menuBackgroundGradientTo'] = $vars[ 'menuBackgroundColor' ]; $vars['menuTopBackgroundGradientFrom'] = $vars[ 'menuBackgroundColor' ]; $vars['menuTopBackgroundGradientTo'] = $vars[ 'menuBackgroundColor' ]; } // SUB TOP BAR $vars[ 'subBarBackgroundColor' ] = $this->custom_or_default('sub_bar_background_color' , 'subBarBackgroundColor'); $vars[ 'subBarBackgroundType' ] = $this->custom_or_default('sub_bar_background_type' , 'subBarBackgroundType'); // HIGHLIGHT ACCENTS if(get_field('top_body_highlight', 'option')){ $vars['menuTopHighlightBorder'] = '4px solid '.get_field('top_body_highlight', 'option'); $vars['contentTopHighlightBorder'] = '4px solid '.get_field('top_body_highlight', 'option'); }else{ $vars['menuTopHighlightBorder'] = 'none'; $vars['contentTopHighlightBorder'] = 'none'; } $vars['highlightStrokesBackground'] = $this->custom_or_default('hightlight_accents' , 'highlightStrokesBackground'); $vars['menuDividerBackgroundColor'] = $this->custom_or_default('hightlight_accents' , 'menuDividerBackgroundColor'); // SIDEBAR $vars[ 'sidebarBackgroundImage' ] = $this->custom_or_default_image_url('sidebar_background_image', 'sidebarBackgroundImage', 'none'); $vars[ 'sidebarBackgroundColor' ] = $this->custom_or_default('sidebar_background_color' , 'sidebarBackgroundColor'); if( get_field('sidebar_background_color', 'option') ){ $vars['sidebarBackgroundGradientFrom'] = $vars[ 'sidebarBackgroundColor' ]; $vars['sidebarBackgroundGradientTo'] = $vars[ 'sidebarBackgroundColor' ]; if( get_field('sidebar_background_style', 'option') == 'light' ){ $vars[ 'sidebarShadow' ] = 'inset 2px 0px 3px 0px rgba(0,0,0,0.08), -1px 0px 2px 0px '.$this->adjustBrightness( $vars[ 'sidebarBackgroundColor' ], 20); $vars[ 'sidebarBorder' ] = '1px solid '.$this->adjustBrightness( $vars[ 'sidebarBackgroundColor' ], -30); $vars[ 'sidebarHeadingsColor' ] = $this->my_mix($vars[ 'sidebarBackgroundColor' ], '#111', 30); $vars[ 'sidebarTextColor' ] = $this->my_mix($vars[ 'sidebarBackgroundColor' ], '#111', 50); }else{ $vars[ 'sidebarShadow' ] = 'none'; $vars[ 'sidebarBorder' ] = 'none'; $vars[ 'sidebarHeadingsColor' ] = $this->my_mix($vars[ 'sidebarBackgroundColor' ], '#fff', 30); $vars[ 'sidebarTextColor' ] = $this->my_mix($vars[ 'sidebarBackgroundColor' ], '#fff', 50); } } // POST $vars[ 'postBackground' ] = $this->custom_or_default('post_background', 'postBackground'); $vars[ 'postMetaBackground' ] = $this->custom_or_default('post_meta_background', 'postMetaBackground'); $vars[ 'postMetaHeartBackground' ] = $this->custom_or_default('post_meta_heart_background', 'postMetaHeartBackground'); $vars[ 'postMetaHeartColor' ] = $this->custom_or_default('post_meta_heart_color', 'postMetaHeartColor'); $vars[ 'postMetaHeartColorHover' ] = $this->custom_or_default('post_meta_heart_color_hover', 'postMetaHeartColorHover'); $vars[ 'postTitleColor' ] = $this->custom_or_default('post_title_color', 'postTitleColor'); $vars[ 'postContentColor' ] = $this->custom_or_default('post_content_color', 'postContentColor'); if( get_field('body_background_style', 'option') == 'light' ){ $vars[ 'postBorder' ] = '1px solid '. $this->adjustBrightness( $vars[ 'bodyBackgroundColor' ], -40 ); }else{ $vars[ 'postBorder' ] = 'none'; } $vars[ 'textColor' ] = $this->custom_or_default('text_color', 'textColor'); } return $vars; } public function FunctionName($value='') { # code... } // Convert RGBA color to 6 digit HEX public function my_rgba_to_hex($rgba_arr){ return "#".substr(parent::lib_rgbahex($rgba_arr), -6); } // Mix 2 colors public function my_mix($color1, $color2, $percent){ return $this->my_rgba_to_hex(parent::lib_mix(array("list", ",", array( array("raw_color", $color1), array("raw_color", $color2), array("number", $percent, "%"))))); } function adjustBrightness($hex, $steps) { $hex = str_replace('#','',$hex); // Steps should be between -255 and 255. Negative = darker, positive = lighter $steps = max(-255, min(255, $steps)); // Format the hex color string $hex = str_replace('#', '', $hex); if (strlen($hex) == 3) { $hex = str_repeat(substr($hex,0,1), 2).str_repeat(substr($hex,1,1), 2).str_repeat(substr($hex,2,1), 2); } // Get decimal values $r = hexdec(substr($hex,0,2)); $g = hexdec(substr($hex,2,2)); $b = hexdec(substr($hex,4,2)); // Adjust number of steps and keep it inside 0 to 255 $r = max(0,min(255,$r + $steps)); $g = max(0,min(255,$g + $steps)); $b = max(0,min(255,$b + $steps)); $r_hex = str_pad(dechex($r), 2, '0', STR_PAD_LEFT); $g_hex = str_pad(dechex($g), 2, '0', STR_PAD_LEFT); $b_hex = str_pad(dechex($b), 2, '0', STR_PAD_LEFT); return '#'.$r_hex.$g_hex.$b_hex; } function getContrastYIQ($hexcolor, $dark = 'black', $light = 'white'){ $r = hexdec(substr($hexcolor,0,2)); $g = hexdec(substr($hexcolor,2,2)); $b = hexdec(substr($hexcolor,4,2)); $yiq = (($r*299)+($g*587)+($b*114))/1000; return ($yiq >= 128) ? $dark : $light; } function add_px($value = '14') { $value = str_replace('px', '', $value); $value = $value.'px'; return $value; } function custom_or_default($custom_key, $default_key, $default_value = '#aaa'){ $option_value = get_field("{$custom_key}", 'option'); if(!empty($option_value)){ return $option_value; }else{ if(isset($this->default_vars["{$default_key}"])) return $this->default_vars["{$default_key}"]; else return $default_value; } } function custom_or_default_image_url($custom_key, $default_key, $default_value = 'none'){ $option_value = get_field("{$custom_key}", 'option'); if(!empty($option_value)){ return $this->wrap_in_url($option_value); }else{ if(isset($this->default_vars["{$default_key}"])) return $this->default_vars["{$default_key}"]; else return $default_value; } } public function wrap_in_url($value='none') { if($value == 'none'){ return 'none'; }else{ return 'url('.$value.')'; } } function custom_merged_or_default($custom_key, $default_key, $merge_string, $default_value = "4px solid #fff"){ $option_value = get_field("{$custom_key}", 'option'); if(!empty($option_value)){ return $merge_string.$option_value; }else{ if(isset($this->default_vars["{$default_key}"])) return $this->default_vars["{$default_key}"]; else return $default_value; } } function adjust_custom_or_use_default($custom_key, $default_key, $steps){ $option_value = get_field("{$custom_key}", 'option'); if(!empty($option_value)){ return $this->adjustBrightness($option_value, $steps); }else{ return $this->default_vars["{$default_key}"]; } } function adjust_mix_custom_or_use_default($custom_key, $default_key, $steps, $mix_color, $mix_value){ $option_value = get_field("{$custom_key}", 'option'); if(!empty($option_value)){ $adjusted_color = $this->adjustBrightness($option_value, $steps); $mixed_color = $this->my_mix($mix_color, $adjusted_color, $mix_value); return $mixed_color; }else{ return $this->default_vars["{$default_key}"]; } } } // Hook to the ACF and set a variable to recompile a less css if options have been saved function my_acf_save_post( $post_id ) { // stop function if not "options" page if( $post_id != "options" ) { return; } // Set a flag to recompile LESS on the next front end request. update_option( 'prefix_force_recompile', 'yes' ); } // run after ACF saves the $_POST['fields'] data add_action('acf/save_post', 'my_acf_save_post', 20); $my_less = new my_less; // pass variables into all .less files add_filter( 'less_vars', array($my_less, 'my_less_vars'), 10, 2 ); ?>