Edit file File name : class-astra-beaver-themer.php Content :<?php /** * Beaver Themer Compatibility File. * * @package Astra */ // If plugin - 'Beaver Themer' not exist then return. if ( ! class_exists( 'FLThemeBuilderLoader' ) || ! class_exists( 'FLThemeBuilderLayoutData' ) ) { return; } /** * Astra Beaver Themer Compatibility */ if ( ! class_exists( 'Astra_Beaver_Themer' ) ) : /** * Astra Beaver Themer Compatibility * * @since 1.0.0 */ class Astra_Beaver_Themer { /** * Member Variable * * @var object instance */ private static $instance; /** * Initiator */ public static function get_instance() { if ( ! isset( self::$instance ) ) { self::$instance = new self(); } return self::$instance; } /** * Constructor */ public function __construct() { add_action( 'after_setup_theme', array( $this, 'header_footer_support' ) ); add_action( 'wp', array( $this, 'theme_header_footer_render' ) ); add_filter( 'fl_theme_builder_part_hooks', array( $this, 'register_part_hooks' ) ); add_filter( 'post_class', array( $this, 'render_post_class' ), 99 ); add_action( 'fl_theme_builder_before_render_content', array( $this, 'builder_before_render_content' ), 10, 1 ); add_action( 'fl_theme_builder_after_render_content', array( $this, 'builder_after_render_content' ), 10, 1 ); add_filter( 'astra_dynamic_theme_css', array( $this, 'beaver_themer_compatibility_styles' ) ); } /** * Builder Template Content layout set as Full Width / Stretched * * @param string $layout Content Layout. * @return string * @since 1.0.2 */ public function builder_template_content_layout( $layout ) { $ids = FLThemeBuilderLayoutData::get_current_page_content_ids(); $post_type = get_post_type(); if ( 'fl-theme-layout' == $post_type ) { remove_action( 'astra_entry_after', 'astra_single_post_navigation_markup' ); } if ( empty( $ids ) && 'fl-theme-layout' != $post_type ) { return $layout; } return 'page-builder'; } /** * Compatibility CSS for Beaver Themer Builder. * * @param string $dynamic_css Astra Dynamic CSS. * @return string $dynamic_css Generated CSS. * * @since 4.6.15 */ public function beaver_themer_compatibility_styles( $dynamic_css ) { if ( class_exists( 'FLBuilderModel' ) ) { $beaver_themer_styles = array( '.fl-row-content-wrap [CLASS*="ast-width-"] ' => array( 'width' => '100%', ), 'body.fl-theme-builder-header.fl-theme-builder-part.fl-theme-builder-part-part #page' => array( 'display' => 'block', ), ); // Parse CSS from array. $parse_css = astra_parse_css( $beaver_themer_styles ); // Appended parsed CSS. $dynamic_css .= $parse_css; } return $dynamic_css; } /** * Remove theme post's default classes * * @param array $classes Post Classes. * @return array * @since 1.0.2 */ public function render_post_class( $classes ) { $post_class = array( 'fl-post-grid-post', 'fl-post-gallery-post', 'fl-post-feed-post' ); $result = array_intersect( $classes, $post_class ); if ( count( $result ) > 0 ) { $classes = array_diff( $classes, array( // Astra common grid. 'ast-col-xs-1', 'ast-col-xs-2', 'ast-col-xs-3', 'ast-col-xs-4', 'ast-col-xs-5', 'ast-col-xs-6', 'ast-col-xs-7', 'ast-col-xs-8', 'ast-col-xs-9', 'ast-col-xs-10', 'ast-col-xs-11', 'ast-col-xs-12', 'ast-col-sm-1', 'ast-col-sm-2', 'ast-col-sm-3', 'ast-col-sm-4', 'ast-col-sm-5', 'ast-col-sm-6', 'ast-col-sm-7', 'ast-col-sm-8', 'ast-col-sm-9', 'ast-col-sm-10', 'ast-col-sm-11', 'ast-col-sm-12', 'ast-col-md-1', 'ast-col-md-2', 'ast-col-md-3', 'ast-col-md-4', 'ast-col-md-5', 'ast-col-md-6', 'ast-col-md-7', 'ast-col-md-8', 'ast-col-md-9', 'ast-col-md-10', 'ast-col-md-11', 'ast-col-md-12', 'ast-col-lg-1', 'ast-col-lg-2', 'ast-col-lg-3', 'ast-col-lg-4', 'ast-col-lg-5', 'ast-col-lg-6', 'ast-col-lg-7', 'ast-col-lg-8', 'ast-col-lg-9', 'ast-col-lg-10', 'ast-col-lg-11', 'ast-col-lg-12', 'ast-col-xl-1', 'ast-col-xl-2', 'ast-col-xl-3', 'ast-col-xl-4', 'ast-col-xl-5', 'ast-col-xl-6', 'ast-col-xl-7', 'ast-col-xl-8', 'ast-col-xl-9', 'ast-col-xl-10', 'ast-col-xl-11', 'ast-col-xl-12', // Astra Blog / Single Post. 'ast-article-post', 'ast-article-single', 'ast-separate-posts', 'remove-featured-img-padding', 'ast-featured-post', // Astra Woocommerce. 'ast-product-gallery-layout-vertical', 'ast-product-gallery-layout-horizontal', 'ast-product-gallery-with-no-image', 'ast-product-tabs-layout-vertical', 'ast-product-tabs-layout-horizontal', 'ast-qv-disabled', 'ast-qv-on-image', 'ast-qv-on-image-click', 'ast-qv-after-summary', 'astra-woo-hover-swap', 'box-shadow-0', 'box-shadow-0-hover', 'box-shadow-1', 'box-shadow-1-hover', 'box-shadow-2', 'box-shadow-2-hover', 'box-shadow-3', 'box-shadow-3-hover', 'box-shadow-4', 'box-shadow-4-hover', 'box-shadow-5', 'box-shadow-5-hover', ) ); add_filter( 'astra_post_link_enabled', '__return_false' ); } return $classes; } /** * Function to add Theme Support * * @since 1.0.0 */ public function header_footer_support() { add_theme_support( 'fl-theme-builder-headers' ); add_theme_support( 'fl-theme-builder-footers' ); add_theme_support( 'fl-theme-builder-parts' ); } /** * Function to update Atra header/footer with Beaver template * * @since 1.0.0 */ public function theme_header_footer_render() { // Get the header ID. $header_ids = FLThemeBuilderLayoutData::get_current_page_header_ids(); // If we have a header, remove the theme header and hook in Theme Builder's. if ( ! empty( $header_ids ) ) { remove_action( 'astra_header', 'astra_header_markup' ); add_action( 'astra_header', 'FLThemeBuilderLayoutRenderer::render_header' ); } // Get the footer ID. $footer_ids = FLThemeBuilderLayoutData::get_current_page_footer_ids(); // If we have a footer, remove the theme footer and hook in Theme Builder's. if ( ! empty( $footer_ids ) ) { remove_action( 'astra_footer', array( Astra_Builder_Footer::get_instance(), 'footer_markup' ) ); remove_action( 'astra_footer', 'astra_footer_markup' ); add_action( 'astra_footer', 'FLThemeBuilderLayoutRenderer::render_footer' ); } // BB Themer Support. $template_ids = FLThemeBuilderLayoutData::get_current_page_content_ids(); if ( ! empty( $template_ids ) ) { $template_id = $template_ids[0]; $template_type = get_post_meta( $template_id, '_fl_theme_layout_type', true ); if ( 'archive' === $template_type || 'singular' === $template_type || '404' === $template_type ) { $sidebar = get_post_meta( $template_id, 'site-sidebar-layout', true ); if ( 'default' !== $sidebar ) { add_filter( 'astra_page_layout', function( $page_layout ) use ( $sidebar ) { // phpcs:ignore PHPCompatibility.FunctionDeclarations.NewClosure.Found return $sidebar; } ); } $content_layout = get_post_meta( $template_id, 'site-content-layout', true ); if ( 'default' !== $content_layout ) { add_filter( 'astra_get_content_layout', function( $layout ) use ( $content_layout ) {// phpcs:ignore PHPCompatibility.FunctionDeclarations.NewClosure.Found return $content_layout; } ); } $main_header_display = get_post_meta( $template_id, 'ast-main-header-display', true ); if ( 'disabled' === $main_header_display ) { if ( 'archive' === $template_type ) { remove_action( 'astra_masthead', 'astra_masthead_primary_template' ); } else { add_filter( 'astra_main_header_display', function( $display_header ) {// phpcs:ignore PHPCompatibility.FunctionDeclarations.NewClosure.Found return 'disabled'; } ); } } $footer_layout = get_post_meta( $template_id, 'footer-sml-layout', true ); if ( 'disabled' === $footer_layout ) { add_filter( 'astra_footer_sml_layout', function( $is_footer ) {// phpcs:ignore PHPCompatibility.FunctionDeclarations.NewClosure.Found return 'disabled'; } ); } // Override! Footer Widgets. $footer_widgets = get_post_meta( $template_id, 'footer-adv-display', true ); if ( 'disabled' === $footer_widgets ) { add_filter( 'astra_advanced_footer_disable', '__return_true' ); } } } } /** * Function to Astra theme parts * * @since 1.0.0 */ public function register_part_hooks() { return array( array( 'label' => 'Page', 'hooks' => array( 'astra_body_top' => __( 'Before Page', 'astra' ), 'astra_body_bottom' => __( 'After Page', 'astra' ), ), ), array( 'label' => 'Header', 'hooks' => array( 'astra_header_before' => __( 'Before Header', 'astra' ), 'astra_header_after' => __( 'After Header', 'astra' ), ), ), array( 'label' => 'Content', 'hooks' => array( 'astra_primary_content_top' => __( 'Before Content', 'astra' ), 'astra_primary_content_bottom' => __( 'After Content', 'astra' ), ), ), array( 'label' => 'Footer', 'hooks' => array( 'astra_footer_before' => __( 'Before Footer', 'astra' ), 'astra_footer_after' => __( 'After Footer', 'astra' ), ), ), array( 'label' => 'Sidebar', 'hooks' => array( 'astra_sidebars_before' => __( 'Before Sidebar', 'astra' ), 'astra_sidebars_after' => __( 'After Sidebar', 'astra' ), ), ), array( 'label' => 'Posts', 'hooks' => array( 'loop_start' => __( 'Loop Start', 'astra' ), 'astra_entry_top' => __( 'Before Post', 'astra' ), 'astra_entry_content_before' => __( 'Before Post Content', 'astra' ), 'astra_entry_content_after' => __( 'After Post Content', 'astra' ), 'astra_entry_bottom' => __( 'After Post', 'astra' ), 'astra_comments_before' => __( 'Before Comments', 'astra' ), 'astra_comments_after' => __( 'After Comments', 'astra' ), 'loop_end' => __( 'Loop End', 'astra' ), ), ), ); } /** * Function to theme before render content * * @param int $post_id Post ID. * @since 1.0.28 */ public function builder_before_render_content( $post_id ) { ?> <?php if ( 'left-sidebar' === astra_page_layout() ) : ?> <?php get_sidebar(); ?> <?php endif ?> <div id="primary" <?php astra_primary_class(); ?>> <?php } /** * Function to theme after render content * * @param int $post_id Post ID. * @since 1.0.28 */ public function builder_after_render_content( $post_id ) { ?> </div><!-- #primary --> <?php if ( 'right-sidebar' === astra_page_layout() ) : ?> <?php get_sidebar(); ?> <?php endif ?> <?php } } endif; /** * Kicking this off by calling 'get_instance()' method */ Astra_Beaver_Themer::get_instance(); Save