theme-options.php (16107B)
1 <?php 2 3 add_action('customize_register', 'materialis_customize_register', 10, 1); 4 add_action('customize_register', 'materialis_customize_reorganize', PHP_INT_MAX, 1); 5 6 require_once get_template_directory() . "/inc/general-options.php"; 7 require_once get_template_directory() . "/inc/header-options.php"; 8 require_once get_template_directory() . "/inc/footer-options.php"; 9 require_once get_template_directory() . "/inc/blog-options.php"; 10 11 function materialis_add_options_group($options) 12 { 13 foreach ($options as $option => $args) { 14 do_action_ref_array($option . "_before", $args); 15 call_user_func_array($option, $args); 16 do_action_ref_array($option . "_after", $args); 17 } 18 } 19 20 function materialis_customize_register($wp_customize) 21 { 22 /** @var WP_Customize_Manager $wp_customize */ 23 $wp_customize->get_setting('background_color')->transport = 'refresh'; 24 25 materialis_customize_register_controls($wp_customize); 26 27 do_action('materialis_customize_register', $wp_customize); 28 } 29 30 function materialis_add_sections($wp_customize) 31 { 32 33 /** @var WP_Customize_Manager $wp_customize */ 34 $wp_customize->add_section('header_layout', array( 35 'title' => esc_html__('Front Page Header Designs', 'materialis'), 36 'priority' => 1, 37 )); 38 39 $wp_customize->add_panel('navigation_panel', 40 array( 41 'priority' => 2, 42 'capability' => 'edit_theme_options', 43 'theme_supports' => '', 44 'title' => esc_html__('Navigation', 'materialis'), 45 'description' => '', 46 ) 47 ); 48 49 $wp_customize->add_panel('header', 50 array( 51 'priority' => 2, 52 'capability' => 'edit_theme_options', 53 'theme_supports' => '', 54 'title' => esc_html__('Hero', 'materialis'), 55 'description' => '', 56 ) 57 ); 58 59 $wp_customize->add_section( 60 new \Materialis\FrontPageSection( 61 $wp_customize, 62 'page_content', 63 array( 64 'priority' => 2, 65 'title' => esc_html__('Front Page content', 'materialis'), 66 ) 67 ) 68 ); 69 70 $wp_customize->add_section('footer_settings', array( 71 'title' => esc_html__('Footer Settings', 'materialis'), 72 'priority' => 3, 73 )); 74 75 if (!apply_filters('materialis_is_companion_installed', false)) { 76 $wp_customize->add_section('layout_settings', array( 77 'title' => esc_html__('Layout', 'materialis'), 78 'priority' => 4, 79 )); 80 } 81 82 $wp_customize->add_panel('general_settings', array( 83 'title' => esc_html__('General Settings', 'materialis'), 84 'priority' => 5, 85 )); 86 $wp_customize->add_section('blog_settings', array( 87 'title' => esc_html__('Blog Settings', 'materialis'), 88 89 'priority' => 5, 90 )); 91 92 do_action('materialis_add_sections', $wp_customize); 93 94 $sections = array( 95 96 'header_background_chooser' => array( 97 'title' => esc_html__('Front Page Hero', 'materialis'), 98 'panel' => 'header', 99 ), 100 101 'header_content' => array( 102 'title' => esc_html__('Front Page Hero Content', 'materialis'), 103 'panel' => 'header', 104 ), 105 106 'header_image' => array( 107 'title' => esc_html__('Inner Pages Hero', 'materialis'), 108 'panel' => 'header', 109 ), 110 111 'page_settings' => array( 112 'title' => esc_html__('Page Settings', 'materialis'), 113 'panel' => 'general_settings', 114 ), 115 116 ); 117 118 foreach ($sections as $name => $value) { 119 $wp_customize->add_section($name, $value); 120 } 121 122 } 123 124 function materialis_register_kirki_control_types($controls) 125 { 126 $controls['sectionseparator'] = '\\Materialis\\Kirki_Controls_Separator_Control'; 127 $controls['ope-info'] = '\\Materialis\\Info_Control'; 128 $controls['ope-info-pro'] = '\\Materialis\\Info_PRO_Control'; 129 $controls['web-gradients'] = "\\Materialis\\WebGradientsControl"; 130 $controls['sidebar-button-group'] = "\\Materialis\\SidebarGroupButtonControl"; 131 $controls['radio-html'] = '\\Materialis\\Kirki_Controls_Radio_HTML_Control'; 132 $controls['material-icons-icon-control'] = "\\Materialis\\MaterialIconsIconControl"; 133 $controls['gradient-control'] = "\\Materialis\\GradientControl"; 134 135 return $controls; 136 } 137 138 function materialis_customize_register_controls($wp_customize) 139 { 140 /** @var WP_Customize_Manager $wp_customize */ 141 $wp_customize->register_control_type('\\Materialis\\Kirki_Controls_Separator_Control'); 142 $wp_customize->register_control_type("\\Materialis\\WebGradientsControl"); 143 $wp_customize->register_control_type("\\Materialis\\SidebarGroupButtonControl"); 144 $wp_customize->register_control_type('\Materialis\Kirki_Controls_Radio_HTML_Control'); 145 $wp_customize->register_control_type('\\Materialis\MaterialIconsIconControl'); 146 $wp_customize->register_control_type('Materialis\\GradientControl'); 147 148 // Register our custom control with Kirki 149 add_filter('kirki/control_types', 'materialis_register_kirki_control_types'); 150 151 require_once get_template_directory() . "/customizer/customizer-controls.php"; 152 require_once get_template_directory() . "/customizer/WebGradientsControl.php"; 153 require_once get_template_directory() . "/customizer/SidebarGroupButtonControl.php"; 154 require_once get_template_directory() . "/customizer/GradientControl.php"; 155 156 materialis_add_sections($wp_customize); 157 materialis_add_general_settings($wp_customize); 158 } 159 160 function materialis_add_general_settings($wp_customize) 161 { 162 163 /* logo max height */ 164 165 materialis_add_kirki_field(array( 166 'type' => 'number', 167 'label' => esc_html__('Logo Max Height (px)', 'materialis'), 168 'settings' => 'logo_max_height', 169 'section' => 'title_tagline', 170 'default' => 70, 171 'transport' => 'postMessage', 172 'priority' => 8, 173 )); 174 175 $wp_customize->add_setting('bold_logo', array( 176 'default' => true, 177 'sanitize_callback' => 'materialis_sanitize_boolean', 178 )); 179 $wp_customize->add_control('bold_logo', array( 180 'label' => esc_html__('Alternate text logo words', 'materialis'), 181 'section' => 'title_tagline', 182 'priority' => 9, 183 'type' => 'checkbox', 184 )); 185 186 $wp_customize->add_setting('logo_dark', array( 187 'default' => false, 188 'sanitize_callback' => 'absint', 189 )); 190 191 $custom_logo_args = get_theme_support('custom-logo'); 192 $wp_customize->add_control(new WP_Customize_Cropped_Image_Control($wp_customize, 'logo_dark', array( 193 'label' => esc_html__('Dark Logo', 'materialis'), 194 'section' => 'title_tagline', 195 'priority' => 9, 196 'height' => $custom_logo_args[0]['height'], 197 'width' => $custom_logo_args[0]['width'], 198 'flex_height' => $custom_logo_args[0]['flex-height'], 199 'flex_width' => $custom_logo_args[0]['flex-width'], 200 'button_labels' => array( 201 'select' => __('Select logo', 'materialis'), 202 'change' => __('Change logo', 'materialis'), 203 'remove' => __('Remove', 'materialis'), 204 'default' => __('Default', 'materialis'), 205 'placeholder' => __('No logo selected', 'materialis'), 206 'frame_title' => __('Select logo', 'materialis'), 207 'frame_button' => __('Choose logo', 'materialis'), 208 ), 209 ))); 210 211 // remove partial refresh to display the site name properly in customizer 212 $wp_customize->selective_refresh->remove_partial('custom_logo'); 213 $wp_customize->get_setting('custom_logo')->transport = 'refresh'; 214 } 215 216 function materialis_customize_reorganize($wp_customize) 217 { 218 $generalSettingsSections = array( 219 'title_tagline', 220 'colors', 221 'layout_settings', 222 'general_site_style', 223 'background_image', 224 'static_front_page', 225 'custom_css', 226 'user_custom_widgets_areas', 227 // 'blog_settings', 228 ); 229 230 $priority = 1; 231 foreach ($generalSettingsSections as $section_id) { 232 $section = $wp_customize->get_section($section_id); 233 234 if ($section) { 235 $section->panel = 'general_settings'; 236 $section->priority = $priority; 237 $priority++; 238 } 239 240 } 241 } 242 243 function materialis_customize_controls_enqueue_scripts() 244 { 245 246 $textDomain = materialis_get_text_domain(); 247 248 $cssUrl = get_template_directory_uri() . "/customizer/"; 249 $jsUrl = get_template_directory_uri() . "/customizer/js/"; 250 251 wp_enqueue_style('thickbox'); 252 wp_enqueue_script('thickbox'); 253 254 wp_enqueue_style($textDomain . '-webgradients', get_template_directory_uri() . '/assets/css/webgradients.css'); 255 256 if (apply_filters('materialis_load_bundled_version', true)) { 257 wp_enqueue_script($textDomain . '-customize', $jsUrl . "/customize.bundle.min.js", array('jquery', 'customize-base', 'customize-controls', 'media-views'), true); 258 wp_enqueue_style($textDomain . '-customizer-base', $cssUrl . '/customizer.bundle.min.css'); 259 } else { 260 wp_enqueue_style($textDomain . '-customizer-base', $cssUrl . '/customizer.css'); 261 wp_enqueue_script($textDomain . '-customize', $jsUrl . "/customize.js", array('jquery', 'customize-base', 'customize-controls'), true); 262 } 263 264 $settings = array( 265 'stylesheetURL' => get_template_directory_uri(), 266 'templateURL' => get_template_directory_uri(), 267 'includesURL' => includes_url(), 268 'l10n' => array( 269 'closePanelLabel' => esc_attr__('Close Panel', 'materialis'), 270 'chooseImagesLabel' => esc_attr__('Choose Images', 'materialis'), 271 'chooseGradientLabel' => esc_attr__("Web Gradients", 'materialis'), 272 'chooseMDILabel' => esc_attr__("Material Icons", 'materialis'), 273 'selectGradient' => esc_attr__("Select Gradient", 'materialis'), 274 'deselect' => esc_attr__("Deselect", 'materialis'), 275 'changeImageLabel' => esc_attr__('Change image', 'materialis'), 276 ), 277 ); 278 279 wp_localize_script('customize-base', 'materialis_customize_settings', $settings); 280 } 281 282 add_action('customize_controls_enqueue_scripts', 'materialis_customize_controls_enqueue_scripts'); 283 284 function materialis_customize_preview_init() 285 { 286 $textDomain = materialis_get_text_domain(); 287 288 $jsUrl = get_template_directory_uri() . "/customizer/js/"; 289 wp_enqueue_script($textDomain . '-customize-preview', $jsUrl . "/customize-preview.js", array('jquery', 'customize-preview'), '', true); 290 } 291 292 add_action('customize_preview_init', 'materialis_customize_preview_init'); 293 294 295 function materialis_get_gradients_classes() 296 { 297 return apply_filters("materialis_webgradients_list", array( 298 "easter_blueberry", 299 "plum_plate", 300 "ripe_malinka", 301 "new_life", 302 "sunny_morning", 303 )); 304 } 305 306 function materialis_get_parsed_gradients() 307 { 308 return apply_filters("materialis_parsed_webgradients_list", array( 309 310 'easter_blueberry' => array( 311 'angle' => '180', 312 'colors' => array( 313 0 => array( 314 'color' => 'rgba(101,78,163, 0.8)', 315 'position' => '0%', 316 ), 317 1 => array( 318 'color' => 'rgba(191,105,253,0.8)', 319 'position' => '100%', 320 ), 321 ), 322 ), 323 324 'plum_plate' => array( 325 'angle' => '135', 326 'colors' => array( 327 0 => array( 328 'color' => 'rgba(102,126,234, 0.8)', 329 'position' => '0%', 330 ), 331 1 => array( 332 'color' => 'rgba(118,75,162,0.8)', 333 'position' => '100%', 334 ), 335 ), 336 ), 337 338 'ripe_malinka' => array( 339 'angle' => '120', 340 'colors' => array( 341 0 => array( 342 'color' => 'rgba(240,147,251,0.8)', 343 'position' => '0%', 344 ), 345 1 => array( 346 'color' => 'rgba(245,87,108,0.8)', 347 'position' => '100%', 348 ), 349 ), 350 ), 351 352 'new_life' => array( 353 'angle' => '90', 354 'colors' => array( 355 0 => array( 356 'color' => 'rgba(67,233,123,0.8)', 357 'position' => '0%', 358 ), 359 1 => array( 360 'color' => 'rgba(56,249,215,0.8)', 361 'position' => '100%', 362 ), 363 ), 364 ), 365 366 'sunny_morning' => array( 367 'angle' => '120', 368 'colors' => array( 369 0 => array( 370 'color' => 'rgba(246,211,101,0.8)', 371 'position' => '0%', 372 ), 373 1 => array( 374 'color' => 'rgba(253,160,133,0.8)', 375 'position' => '100%', 376 ), 377 ), 378 ), 379 380 )); 381 } 382 383 function materialis_wp_ajax_materialis_webgradients_list() 384 { 385 $result = array(); 386 $webgradients = materialis_get_gradients_classes(); 387 $parsed_gradients = materialis_get_parsed_gradients(); 388 389 foreach ($webgradients as $icon) { 390 $parsed = isset($parsed_gradients[$icon]) ? $parsed_gradients[$icon] : false; 391 $title = str_replace('_', ' ', $icon); 392 $result[] = array( 393 'id' => $icon, 394 'gradient' => $icon, 395 "title" => $title, 396 'mime' => "web-gradient/class", 397 'sizes' => null, 398 'parsed' => $parsed, 399 ); 400 } 401 402 403 $result = apply_filters("materialis_wp_ajax_webgradients_list", $result); 404 405 echo json_encode($result); 406 407 exit; 408 } 409 410 add_action('wp_ajax_materialis_webgradients_list', 'materialis_wp_ajax_materialis_webgradients_list'); 411 412 function materialis_wp_ajax_materialis_list_mdi() 413 { 414 415 $result = array(); 416 $icons = (require get_template_directory() . "/customizer/mdi-icons-list.php"); 417 foreach ($icons as $icon) { 418 $title = str_replace('-', ' ', str_replace('mdi-', '', $icon)); 419 $result[] = array( 420 'id' => $icon, 421 'mdi' => $icon, 422 "title" => $title, 423 'mime' => "fa-icon/font", 424 'sizes' => null, 425 ); 426 } 427 428 echo json_encode($result); 429 exit; 430 431 } 432 433 add_action('wp_ajax_materialis_list_mdi', 'materialis_wp_ajax_materialis_list_mdi'); 434 435 function materialis_body_class($classes) 436 { 437 $body_class = materialis_is_front_page(true) ? "materialis-front-page" : "materialis-inner-page"; 438 $body_class = array($body_class); 439 440 $classes = array_merge($classes, $body_class); 441 442 if (in_array('materialis-front-page', $classes)) { 443 $classes[] = 'materialis-content-padding'; 444 445 } 446 447 return $classes; 448 } 449 450 add_filter('body_class', 'materialis_body_class'); 451 452 453 // code from rest_sanitize_boolean 454 function materialis_sanitize_boolean($value) 455 { 456 // String values are translated to `true`; make sure 'false' is false. 457 if (is_string($value)) { 458 $value = strtolower($value); 459 if (in_array($value, array('false', '0'), true)) { 460 $value = false; 461 } 462 } 463 464 // Everything else will map nicely to boolean. 465 return (boolean)$value; 466 } 467 468 469 /** 470 * @param $control 471 * @param bool $print 472 * 473 * @return bool|string 474 */ 475 function materialis_customizer_focus_control_attr($control, $print = true) 476 { 477 if ( ! materialis_is_customize_preview()) { 478 return false; 479 } 480 481 $control = esc_attr($control); 482 $toPrint = "data-type=\"group\" data-focus-control='{$control}'"; 483 484 if ($print) { 485 echo $toPrint; 486 } 487 488 return $toPrint; 489 }