functions.php (18154B)
1 <?php 2 3 /** @var \Materialis\Companion $this */ 4 require_once $this->themeDataPath("/updates.php"); 5 require_once $this->themeDataPath("/custom-style.php"); 6 require_once $this->themeDataPath("/options/overlap.php"); 7 require_once $this->themeDataPath("/shortcodes/latest-news.php"); 8 9 10 add_filter('materialis_can_show_demo_content', "__return_true"); 11 add_filter('materialis_show_inactive_plugin_infos', "__return_false"); 12 13 14 add_filter('materialis_full_width_page', function ($value) { 15 16 if (Materialis\Companion::instance()->isMaintainable()) { 17 $value = true; 18 } 19 20 return $value; 21 }); 22 23 add_filter('materialis_page_content_wrapper_class', function ($class) { 24 if (materialis_is_front_page() || apply_filters('materialis_full_width_page', false)) { 25 $class = array_diff($class, array('gridContainer')); 26 } 27 28 return $class; 29 }); 30 31 32 add_filter('materialis_page_content_class', function ($class) { 33 if (Materialis\Companion::instance()->isMaintainable()) { 34 $class[] = 'no-padding'; 35 $class = array_diff($class, array('gridContainer')); 36 } 37 38 return $class; 39 }); 40 41 function materialis_companion_get_post_thumbnail() 42 { 43 ob_start(); 44 the_post_thumbnail('post-thumbnail', array('class' => 'blog-postimg')); 45 $thumbnail = trim(ob_get_clean()); 46 47 if (empty($thumbnail)) { 48 if (is_customize_preview() || 1) { 49 return "<img src='https://placeholdit.imgix.net/~text?txtsize=38&bg=FF7F66&txtclr=FFFFFFe&w=400&h=250' class='blog-postimg'/>"; 50 } else { 51 return $thumbnail; 52 } 53 } 54 55 return $thumbnail; 56 } 57 58 59 function materialis_companion_blog_link() 60 { 61 if ('page' == get_option('show_on_front')) { 62 if (get_option('page_for_posts')) { 63 return esc_url(get_permalink(get_option('page_for_posts'))); 64 } else { 65 return esc_url(home_url('/?post_type=post')); 66 } 67 } else { 68 return esc_url(home_url('/')); 69 } 70 } 71 72 73 function materialis_companion_contact_form($attrs = array()) 74 { 75 $atts = shortcode_atts( 76 array( 77 'shortcode' => "", 78 ), 79 $attrs 80 ); 81 82 $contact_shortcode = ""; 83 if ($atts['shortcode']) { 84 $contact_shortcode = "[" . html_entity_decode(html_entity_decode($atts['shortcode'])) . "]"; 85 } 86 ob_start(); 87 88 if ($contact_shortcode !== "") { 89 echo do_shortcode($contact_shortcode); 90 } else { 91 echo '<p style="text-align:center;color:#ababab">' . __('Contact form will be displayed here. To activate it you have to set the "contact form shortcode" parameter in Customizer.', 92 'materialis-companion') . '</p>'; 93 } 94 95 $content = ob_get_contents(); 96 ob_end_clean(); 97 98 return $content; 99 } 100 101 add_shortcode('materialis_contact_form', 'materialis_companion_contact_form'); 102 103 104 add_filter('cloudpress\template\page_content', 105 function ($content) { 106 $content = str_replace('[materialis_blog_link]', materialis_companion_blog_link(), $content); 107 $content = str_replace('[tag_companion_uri]', \Materialis\Companion::instance()->themeDataURL(), $content); 108 109 return $content; 110 }); 111 112 113 add_filter('cloudpress\companion\cp_data', 114 function ($data, $companion) { 115 /** @var Materialis\Companion $companion */ 116 117 // $sectionsJSON = $companion->themeDataPath("/sections/sections.inc"); 118 $contentSections = $companion->loadConfig($companion->themeDataPath("/sections/sections.php")); 119 $data['data']['sections'] = $contentSections; 120 121 $showPro = apply_filters('materialis_show_info_pro_messages', true); 122 123 if ($showPro) { 124 $proSections = $companion->loadConfig($companion->themeDataPath("/sections/pro-only-sections.php")); 125 $data['data']['sections'] = array_merge($contentSections, $proSections); 126 } 127 128 129 if (apply_filters('materialis_show_custom_section', false)) { 130 $customSectionContentFile = $companion->themeDataPath("/assets/custom-section.html"); 131 $customSectionContent = file_get_contents($customSectionContentFile); 132 133 $data['data']['sections'][] = array( 134 "index" => 1, 135 "id" => "custom-section", 136 "elementId" => "custom-section", 137 "type" => "section-available", 138 "name" => "Custom Section", 139 "content" => $customSectionContent, 140 "thumb" => "\/\/onepageexpress.com\/default-assets\/previews\/custom-section.png", 141 "preview" => "\/\/onepageexpress.com\/default-assets\/previews\/custom-section.png", 142 "description" => "simple custom section", 143 "category" => "custom", 144 "prepend" => false, 145 "pro" => true, 146 ); 147 } 148 149 return $data; 150 }, 10, 2); 151 152 add_action('cloudpress\template\load_assets', 153 function ($companion) { 154 $ver = $companion->version; 155 156 if (apply_filters('materialis_load_bundled_version', true)) { 157 158 /** @var \Materialis\Companion $companion */ 159 wp_enqueue_script('companion-bundle', $companion->themeDataURL('/assets/js/companion.bundle.min.js'), array(), $ver, true); 160 wp_enqueue_style('companion-bundle', $companion->themeDataURL('/assets/css/companion.bundle.min.css'), array(), $ver); 161 162 return; 163 } 164 165 wp_enqueue_style($companion->getThemeSlug() . '-common-css', $companion->themeDataURL('/assets/css/common.css'), array($companion->getThemeSlug() . '-style'), $ver); 166 wp_enqueue_style('companion-page-css', $companion->themeDataURL('/sections/content.css'), array(), $ver); 167 // wp_enqueue_style('companion-cotent-swap-css', $companion->themeDataURL('/assets/css/HoverFX.css'), array(), $ver); 168 169 // wp_enqueue_script('companion-lib-hammer', $companion->themeDataURL('/assets/js/libs/hammer.js'), array(), $ver); 170 // wp_enqueue_script('companion-lib-modernizr', $companion->themeDataURL('/assets/js/libs/modernizr.js'), array(), $ver); 171 wp_register_script('companion-' . $companion->getThemeSlug(), null, array('jquery',), $ver); 172 173 if ( ! is_customize_preview()) { 174 wp_enqueue_script('companion-cotent-swap', $companion->themeDataURL('/assets/js/HoverFX.js'), array('companion-' . $companion->getThemeSlug()), $ver); 175 } 176 177 wp_enqueue_script('companion-countup', $companion->themeDataURL('/assets/js/countup.js'), array('companion-' . $companion->getThemeSlug()), $ver); 178 wp_enqueue_script('companion-progressbar', $companion->themeDataURL('/assets/js/progressbar.js'), array('companion-' . $companion->getThemeSlug()), $ver); 179 180 wp_enqueue_script('companion-scripts', $companion->themeDataURL('/sections/scripts.js'), array('companion-' . $companion->getThemeSlug(), $companion->getThemeSlug() . '-theme'), $ver, true); 181 }); 182 183 //add_action('cloudpress\customizer\preview_scripts', 184 // function ($customizer) { 185 // $ver = $customizer->companion()->version; 186 // wp_enqueue_script( 187 // $customizer->companion()->getThemeSlug() . "_preview-handle", $customizer->companion()->themeDataURL() . "/preview-handles.js", array('cp-customizer-preview'), $ver 188 // ); 189 // }); 190 191 192 //add_action('cloudpress\customizer\global_scripts', 193 // function ($customizer) { 194 // $ver = $customizer->companion()->version; 195 // wp_enqueue_script( 196 // $customizer->companion()->getThemeSlug() . "_companion_theme_customizer", 197 // $customizer->companion()->themeDataURL() . "/customizer.js", 198 // array('cp-customizer-base'), 199 // $ver, 200 // true 201 // ); 202 // }); 203 204 function materialis_companion_page_builder_get_css_value($value, $unit = false) 205 { 206 $noUnitValues = array('inherit', 'auto', 'initial'); 207 if ( ! in_array($value, $noUnitValues)) { 208 return $value . $unit; 209 } 210 211 return $value; 212 } 213 214 215 function materialis_companion_get_front_page_content($companion) 216 { 217 $defaultSections = array( 218 "overlappable-5-materialis", 219 "about-4", 220 "features-10-materialis", 221 "content-7-materialis", 222 "content-8-materialis", 223 "portfolio-1-materialis", 224 "testimonials-1-materialis", 225 "cta-1-materialis", 226 "team-8-materialis", 227 "latest-news-1-materialis", 228 "contact-1", 229 ); 230 231 $alreadyColoredSections = array("contact-1", "cta-blue-section"); 232 233 /** @var Materialis\Companion $companion */ 234 $availableSections = $companion->loadConfig($companion->themeDataPath("/sections/sections.php")); 235 236 $content = ""; 237 238 $colors = array('#ffffff', '#f5fafd'); 239 $colorIndex = 0; 240 241 foreach ($defaultSections as $ds) { 242 foreach ($availableSections as $as) { 243 if ($as['id'] == $ds) { 244 $_content = $as['content']; 245 246 if (in_array($ds, array("overlappable-5-materialis", "about-4"))) { 247 $colorIndex = 1; 248 } 249 250 if (strpos($_content, 'data-bg="transparent"') === false && ! in_array($ds, $alreadyColoredSections)) { 251 $_content = preg_replace('/\<div/', '<div style="background-color:' . $colors[$colorIndex] . '" ', $_content, 1); 252 $colorIndex = $colorIndex ? 0 : 1; 253 } else { 254 $colorIndex = 0; 255 } 256 257 $_content = preg_replace('/\<div/', '<div id="' . $as['elementId'] . '" ', $_content, 1); 258 259 //gutenberg compatibility 260 $_content = '<!-- wp:extendstudio/materialis -->' . $_content . '<!-- /wp:extendstudio/materialis -->'; 261 262 $content .= $_content; 263 break; 264 } 265 } 266 } 267 268 return $content; 269 } 270 271 add_filter('cloudpress\companion\front_page_content', 272 function ($content, $companion) { 273 $content = materialis_companion_get_front_page_content($companion); 274 275 return \Materialis\Companion::filterDefault($content); 276 }, 10, 2); 277 278 279 add_filter('cloudpress\customizer\control\content_sections\data', 280 function ($data) { 281 $categories = array( 282 'overlappable', 283 'about', 284 'features', 285 'content', 286 'cta', 287 'counters', 288 'FAQ', 289 'gallery', 290 'portfolio', 291 'pricing', 292 'promo', 293 'testimonials', 294 'clients', 295 'team', 296 'latest_news', 297 'contact', 298 'woocommerce', 299 ); 300 301 $result = array(); 302 303 foreach ($categories as $cat) { 304 if (isset($data[$cat])) { 305 $result[$cat] = $data[$cat]; 306 unset($data[$cat]); 307 } 308 } 309 310 $result = array_merge($result, $data); 311 312 return $result; 313 }); 314 315 add_filter('cloudpress\customizer\control\content_sections\category_label', 316 function ($label, $category) { 317 318 switch ($category) { 319 case 'latest_news': 320 $label = __("Latest News", 'materialis-companion'); 321 break; 322 323 case 'cta': 324 $label = __("Call to action", 'materialis-companion'); 325 break; 326 327 default: 328 $label = __($label, 'materialis-companion'); 329 break; 330 } 331 332 return $label; 333 }, 10, 2); 334 335 336 add_action('edit_form_after_title', 'materialis_companion_add_maintainable_filter'); 337 338 function materialis_companion_add_maintainable_filter($post) 339 { 340 $companion = \Materialis\Companion::instance(); 341 $maintainable = $companion->isMaintainable($post->ID); 342 343 add_editor_style(get_template_directory_uri() . "/style.css"); 344 add_editor_style(get_stylesheet_uri()); 345 346 add_editor_style($companion->themeDataURL('/assets/css/common.css')); 347 add_editor_style($companion->themeDataURL('/sections/content.css')); 348 // add_editor_style($companion->themeDataURL('/assets/css/HoverFX.css')); 349 add_editor_style(get_template_directory_uri() . '/assets/css/material-icons.min.css'); 350 351 352 if ($maintainable) { 353 add_filter('tiny_mce_before_init', 'materialis_companion_maintainable_pages_tinymce_init'); 354 } 355 } 356 357 add_filter('body_class', function ($classes) { 358 $companion = \Materialis\Companion::instance(); 359 $maintainable = $companion->isMaintainable(); 360 361 if ($maintainable) { 362 if (in_array('materialis-content-padding', $classes)) { 363 $classes = array_diff($classes, array('materialis-content-padding')); 364 } 365 366 $classes[] = 'materialis-content-no-padding '; 367 $classes[] = 'materialis-maintainable-in-customizer '; 368 } 369 370 return $classes; 371 372 }, PHP_INT_MAX); 373 374 375 function materialis_companion_maintainable_pages_tinymce_init($init) 376 { 377 $init['verify_html'] = false; 378 379 // convert newline characters to BR 380 $init['convert_newlines_to_brs'] = true; 381 382 // don't remove redundant BR 383 $init['remove_redundant_brs'] = false; 384 385 $init['remove_linebreaks'] = false; 386 387 $opts = '*[*]'; 388 $init['valid_elements'] = $opts; 389 $init['extended_valid_elements'] = $opts; 390 $init['forced_root_block'] = false; 391 $init['paste_as_text'] = true; 392 393 return $init; 394 } 395 396 397 //function materialis_companion_remove_page_attribute_support($post) 398 //{ 399 // $companion = \Materialis\Companion::instance(); 400 // if ($post && $companion->isFrontPage($post->ID)) { 401 //// remove_meta_box('pageparentdiv', 'page', 'side'); 402 // 403 // } 404 //} 405 // 406 //add_action('edit_form_after_editor', 'materialis_companion_remove_page_attribute_support'); 407 408 409 add_filter('materialis_header_presets', 'materialis_companion_header_presets_pro_info'); 410 411 function materialis_companion_header_presets_pro_info($presets) 412 { 413 414 415 if (apply_filters('materialis_show_info_pro_messages', true)) { 416 $companion = \Materialis\Companion::instance(); 417 418 $proPresets = $companion->themeDataPath("/pro-only-presets.php"); 419 if (file_exists($proPresets)) { 420 $proPresets = require_once($proPresets); 421 } else { 422 $proPresets = array(); 423 } 424 425 $presets = array_merge($presets, $proPresets); 426 427 } 428 429 return $presets; 430 } 431 432 add_action('cloudpress\customizer\add_assets', 'materialis_load_theme_customizer_scripts', 10, 3); 433 434 function materialis_load_theme_customizer_scripts($customizer, $jsUrl, $cssUrl) 435 { 436 $ver = $customizer->companion()->version; 437 wp_enqueue_script('cp-customizer-shortcodes-theme-data', $customizer->companion()->themeDataURL("/assets/customizer/customizer-shortcodes.js"), array('customizer-base'), $ver, true); 438 } 439 440 441 function materialis_get_custom_mods() 442 { 443 return array( 444 ".header-homepage .hero-title" => array( 445 'type' => 'data-theme', 446 'mod' => "header_title", 447 ), 448 449 ".header-homepage p.header-subtitle" => array( 450 'type' => 'data-theme', 451 'mod' => "header_subtitle", 452 ), 453 454 ".header-homepage p.header-subtitle2" => array( 455 'type' => 'data-theme', 456 'mod' => "header_subtitle2", 457 ), 458 459 "#footer-container.footer-7 .footer-description" => array( 460 'type' => 'data-theme', 461 'mod' => "footer_content_box_text", 462 ), 463 ".footer .footer-box-1 > p" => array( 464 'type' => 'data-theme', 465 'mod' => "footer_box1_content_text", 466 ), 467 ".footer .footer-box-2 > p" => array( 468 'type' => 'data-theme', 469 'mod' => "footer_box2_content_text", 470 ), 471 ".footer .footer-box-3 > p" => array( 472 'type' => 'data-theme', 473 'mod' => "footer_box3_content_text", 474 ), 475 476 ); 477 } 478 479 480 add_filter('cloudpress\customizer\global_data', 'materialis_add_dynamic_mods_customizer_data'); 481 function materialis_add_dynamic_mods_customizer_data($data) 482 { 483 $materialis_custom_mods = materialis_get_custom_mods(); 484 $data['mods'] = apply_filters('materialis_dynamic_mods', $materialis_custom_mods); 485 486 return $data; 487 } 488 489 add_action('cloudpress\companion\activated\materialis', function ($companion) { 490 /** @var \Materialis\Companion $companion */ 491 $companion->__createFrontPage(); 492 }); 493 494 495 add_action('cloudpress\companion\deactivated\materialis', function ($companion) { 496 /** @var \Materialis\Companion $companion */ 497 $companion->restoreFrontPage(); 498 }); 499 500 501 function materialis_get_sections_order($category) 502 { 503 $companion = \Materialis\Companion::instance(); 504 $config = $companion->loadConfig($companion->themeDataPath("/sections-order.php")); 505 506 return (isset($config[$category]) ? $config[$category] : array()); 507 508 } 509 510 add_filter('cloudpress\customizer\control\content_sections\category_data', function ($data, $category) { 511 512 $order = materialis_get_sections_order($category); 513 $to_order = array(); 514 515 if ( ! count($order)) { 516 return $data; 517 } 518 519 foreach ($order as $id) { 520 if (isset($to_order[$id]) && is_string($to_order['content'])) { 521 $to_order[] = $id; 522 } 523 } 524 525 return array_replace(array_flip($to_order), $data); 526 527 }, 10, 2); 528 529 530 add_filter("cloudpress\customizer\page_settings", function ($setting_ids) { 531 532 $setting_ids[] = "layout_section_settings_separator"; 533 $setting_ids[] = "layout_boxed_content_enabled"; 534 $setting_ids[] = "layout_boxed_content_background_color"; 535 $setting_ids[] = "layout_boxed_content_overlap_height"; 536 537 538 return $setting_ids; 539 });