builder_page_id = BuilderFns::builder_page_id_by_page(); $this->page_edit_with = Fns::page_edit_with( $this->builder_page_id ); if ( ! is_admin() ) { BuilderHooks::instance(); } BuilderCpt::instance(); add_action( 'elementor/init', [ $this, 'elementor_init' ] ); add_action( 'elementor/editor/before_enqueue_scripts', [ $this, 'editor_scripts' ] ); add_action( 'template_redirect', [ $this, 'both_builder_frontend' ], 99 ); } /** * Apply for frontend. * * @return void */ public function both_builder_frontend() { add_action( 'rtsb/builder/template/before/content', [ $this, 'builder_template_before_content' ] ); add_action( 'rtsb/builder/template/after/content', [ $this, 'builder_template_after_content' ] ); } /** * Register Category * * @return void */ public function elementor_init() { add_action( 'elementor/elements/categories_registered', [ $this, 'add_elementor_widget_categories' ] ); add_action( 'elementor/widgets/register', [ $this, 'init_widgets' ] ); add_action( 'elementor/controls/register', [ $this, 'init_controls' ] ); } /** * Register Category * * @param object $elements_manager Category hooks. * * @return void */ public function add_elementor_widget_categories( $elements_manager ) { $type = BuilderFns::builder_type( get_the_ID() ); $builder_type = ! empty( BuilderFns::builder_page_types()[ $type ] ) ? BuilderFns::builder_page_types()[ $type ] : null; $categories['rtsb-shopbuilder'] = [ 'title' => esc_html__( 'ShopBuilder', 'shopbuilder' ) . ' - ' . ucfirst( $builder_type ), 'icon' => 'fa fa-plug', ]; $categories['rtsb-shopbuilder-general'] = [ 'title' => esc_html__( 'Shopbuilder - General', 'shopbuilder' ), 'icon' => 'fa fa-plug', ]; $categories = apply_filters( 'rtsb_elementor_widgets_category_lists', $categories ); $other_categories = $elements_manager->get_categories(); $categories = array_merge( array_slice( $other_categories, 0, 1 ), $categories, array_slice( $other_categories, 1 ) ); $set_categories = function ( $categories ) { $this->categories = $categories; }; $set_categories->call( $elements_manager, $categories ); } /** * Init Controls * * Include controls files and register them * * @param object $controls_manager Controls Manager. * * @since 1.0.0 */ public function init_controls( $controls_manager ) { $controls_manager->register( new ImageSelectorControl() ); } /** * Init Widgets * * Include widgets files and register them * * @since 1.0.0 */ public function init_widgets( $widgets_manager ) { foreach ( ElementList::instance()->get_list( true, 'active' ) as $element ) { if ( isset( $element['active'] ) && $element['active'] !== 'on' ) { continue; } if ( ! empty( $element['package'] ) && $element['package'] === 'pro-disabled' ) { continue; } if ( isset( $element['base_class'] ) && ! class_exists( $element['base_class'] ) ) { continue; } if ( ! empty( $element['category'] ) ) { $widget = false; switch ( $element['category'] ) { case 'product': if ( BuilderFns::is_product() ) { $widget = new $element['base_class'](); } break; case 'shop': if ( BuilderFns::is_archive() || BuilderFns::is_shop() ) { $widget = new $element['base_class'](); } break; case 'archive': if ( BuilderFns::is_archive() ) { $widget = new $element['base_class'](); } break; case 'cart': if ( BuilderFns::is_cart() ) { $widget = new $element['base_class'](); } break; case 'checkout': if ( BuilderFns::is_checkout() ) { $widget = new $element['base_class'](); } break; case 'general': $widget = new $element['base_class'](); break; default: } $widget = apply_filters( 'rtsb/element/list/init/widgets', $widget, $element ); if ( $widget && is_object( $widget ) ) { $widgets_manager->register( $widget ); } } } } /** * Editor JS. * * @return void */ public function editor_scripts() { $version = ( defined( 'WP_DEBUG' ) && WP_DEBUG ) ? time() : RTSB_VERSION; wp_enqueue_script( 'rtsb-editor-script', rtsb()->get_assets_uri( 'js/backend/editor.js' ), [ 'jquery', 'elementor-editor', ], $version, true ); $params = [ 'isEditorForBuilder' => false, ]; if ( BuilderFns::is_builder_preview() ) { $params['isEditorForBuilder'] = true; } wp_localize_script( 'rtsb-editor-script', 'rtsbTemplateBuilderEditorScript', $params ); wp_enqueue_style( 'rtsb-el-editor-style', rtsb()->get_assets_uri( 'css/backend/elementor-editor.css' ), [], $version ); } /** * Before Content for Elementor. * * @return void */ public function builder_template_before_content() { /** * Before Header-Footer page template content. * * Fires before the content of Elementor Header-Footer page template. * * @since 2.0.0 */ if ( did_action( 'elementor/loaded' ) && 'elementor' === $this->page_edit_with ) { do_action( 'elementor/page_templates/header-footer/before_content' ); } $parent_class = apply_filters( 'rtsb/builder/content/parent_class', [] ); if ( BuilderFns::is_product() ) { $product_id = Fns::get_prepared_product_id(); $parent_class = wc_get_product_class( $parent_class, $product_id ); } if ( BuilderFns::is_shop() ) { $parent_class[] = 'shop'; } if ( BuilderFns::is_archive() ) { $parent_class[] = 'archive'; } if ( BuilderFns::is_checkout() ) { $parent_class[] = 'checkout-page '; } ?>