first commit
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
<?php
|
||||
namespace ElementorPro\Modules\ThemeBuilder\Classes;
|
||||
|
||||
use ElementorPro\Modules\ThemeBuilder\Module;
|
||||
use ElementorPro\Modules\ThemeBuilder\ThemeSupport\GeneratePress_Theme_Support;
|
||||
use ElementorPro\Modules\ThemeBuilder\ThemeSupport\Safe_Mode_Theme_Support;
|
||||
|
||||
if ( ! defined( 'ABSPATH' ) ) {
|
||||
exit; // Exit if accessed directly
|
||||
}
|
||||
|
||||
class Theme_Support {
|
||||
|
||||
public function __construct() {
|
||||
add_action( 'init', [ $this, 'init' ] );
|
||||
}
|
||||
|
||||
public function init() {
|
||||
$theme = wp_get_theme();
|
||||
|
||||
switch ( $theme->get_template() ) {
|
||||
case 'generatepress':
|
||||
new GeneratePress_Theme_Support();
|
||||
break;
|
||||
case 'elementor-safe':
|
||||
new Safe_Mode_Theme_Support();
|
||||
break;
|
||||
}
|
||||
|
||||
add_action( 'elementor/theme/register_locations', [ $this, 'after_register_locations' ], 99 );
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Locations_Manager $location_manager
|
||||
*/
|
||||
public function after_register_locations( $location_manager ) {
|
||||
$core_locations = $location_manager->get_core_locations();
|
||||
$overwrite_header_location = false;
|
||||
$overwrite_footer_location = false;
|
||||
|
||||
foreach ( $core_locations as $location => $settings ) {
|
||||
if ( ! $location_manager->get_location( $location ) ) {
|
||||
if ( 'header' === $location ) {
|
||||
$overwrite_header_location = true;
|
||||
} elseif ( 'footer' === $location ) {
|
||||
$overwrite_footer_location = true;
|
||||
}
|
||||
$location_manager->register_core_location( $location, [
|
||||
'overwrite' => true,
|
||||
] );
|
||||
}
|
||||
}
|
||||
|
||||
if ( $overwrite_header_location || $overwrite_footer_location ) {
|
||||
/** @var Module $theme_builder_module */
|
||||
$theme_builder_module = Module::instance();
|
||||
|
||||
$conditions_manager = $theme_builder_module->get_conditions_manager();
|
||||
|
||||
$headers = $conditions_manager->get_documents_for_location( 'header' );
|
||||
$footers = $conditions_manager->get_documents_for_location( 'footer' );
|
||||
|
||||
if ( ! empty( $headers ) || ! empty( $footers ) ) {
|
||||
add_action( 'get_header', [ $this, 'get_header' ] );
|
||||
add_action( 'get_footer', [ $this, 'get_footer' ] );
|
||||
add_filter( 'show_admin_bar', [ $this, 'filter_admin_bar_from_body_open' ] );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function get_header( $name ) {
|
||||
require __DIR__ . '/../views/theme-support-header.php';
|
||||
|
||||
$templates = [];
|
||||
$name = (string) $name;
|
||||
if ( '' !== $name ) {
|
||||
$templates[] = "header-{$name}.php";
|
||||
}
|
||||
|
||||
$templates[] = 'header.php';
|
||||
|
||||
// Avoid running wp_head hooks again
|
||||
remove_all_actions( 'wp_head' );
|
||||
ob_start();
|
||||
// It cause a `require_once` so, in the get_header it self it will not be required again.
|
||||
locate_template( $templates, true );
|
||||
ob_get_clean();
|
||||
}
|
||||
|
||||
/**
|
||||
* Don't show admin bar on `wp_body_open` because the theme header HTML is ignored via `$this->get_header()`.
|
||||
*
|
||||
* @param bool $show_admin_bar
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function filter_admin_bar_from_body_open( $show_admin_bar ) {
|
||||
global $wp_current_filter;
|
||||
|
||||
// A flag to mark if $show_admin_bar is switched to false during this filter,
|
||||
// if so, it needed to switch back on the next filter (wp_footer).
|
||||
static $switched = false;
|
||||
|
||||
if ( $show_admin_bar && in_array( 'wp_body_open', $wp_current_filter ) ) {
|
||||
$show_admin_bar = false;
|
||||
$switched = true;
|
||||
} elseif ( $switched ) {
|
||||
$show_admin_bar = true;
|
||||
}
|
||||
|
||||
return $show_admin_bar;
|
||||
}
|
||||
|
||||
public function get_footer( $name ) {
|
||||
require __DIR__ . '/../views/theme-support-footer.php';
|
||||
|
||||
$templates = [];
|
||||
$name = (string) $name;
|
||||
if ( '' !== $name ) {
|
||||
$templates[] = "footer-{$name}.php";
|
||||
}
|
||||
|
||||
$templates[] = 'footer.php';
|
||||
|
||||
ob_start();
|
||||
// It cause a `require_once` so, in the get_header it self it will not be required again.
|
||||
locate_template( $templates, true );
|
||||
ob_get_clean();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user