add_common_actions(); return; } $this->maybe_add_actions_and_components(); add_filter( 'elementor/atomic-widgets/controls', fn( $element_controls, $atomic_element ) => $this->inject_display_conditions_control( $element_controls, $atomic_element ), 100, 2 ); } private function inject_display_conditions_control( $element_controls, $atomic_element ) { $schema = $atomic_element::get_props_schema(); if ( ! array_key_exists( Display_Conditions_Prop_Type::get_key(), $schema ) ) { return $element_controls; } foreach ( $element_controls as $item ) { if ( $item instanceof Section && $item->get_id() === 'settings' ) { $control = Display_Conditions_Control::bind_to( Display_Conditions_Prop_Type::get_key() ) ->set_label( __( 'Display Conditions', 'elementor-pro' ) ) ->set_meta( [ 'topDivider' => true, ] ); if ( API::is_license_expired() ) { $control->set_disabled( true ); } $item->add_item( $control ); break; } } return $element_controls; } public static function should_show_promo(): bool { return ! self::can_use_display_conditions(); } private function add_actions() { $this->add_render_actions(); add_action( 'elementor/ajax/register_actions', [ $this, 'register_ajax_actions' ] ); add_filter( 'elementor/element/is_dynamic_content', [ $this, 'filter_element_caching_is_dynamic_content' ], 10, 3 ); } private function add_components() { $this->add_component( 'conditions', new Classes\Conditions_Manager( $this ) ); $this->add_component( 'cache_notice', new Classes\Cache_Notice() ); } private function add_common_actions() { $this->add_advanced_tab_actions(); add_action( 'elementor/editor/before_enqueue_scripts', function() { $this->enqueue_main_script(); } ); } private function enqueue_main_script() { $min_suffix = Utils::is_script_debug() ? '' : '.min'; wp_enqueue_script( 'e-display-conditions', ELEMENTOR_PRO_ASSETS_URL . 'js/display-conditions' . $min_suffix . '.js', [ 'react', 'react-dom', 'backbone-marionette', 'elementor-web-cli', 'wp-date', 'elementor-common', 'elementor-editor-modules', 'elementor-editor-document', 'elementor-v2-ui', 'elementor-v2-icons', ], ELEMENTOR_PRO_VERSION, true ); $inline_script = sprintf( 'window.ElementorProDisplayConditions = %s;', wp_json_encode( [ 'isLicenseExpired' => API::is_license_expired(), ] ) ); wp_add_inline_script( 'e-display-conditions', $inline_script, 'before' ); wp_set_script_translations( 'e-display-conditions', 'elementor-pro' ); } private function add_advanced_tab_actions() { $hooks = [ 'elementor/element/section/section_advanced/after_section_end' => 'css_classes', // Sections 'elementor/element/column/section_advanced/after_section_end' => 'css_classes', // Columns 'elementor/element/common/_section_style/after_section_end' => '_css_classes', // Widgets 'elementor/element/container/section_layout/after_section_end' => 'css_classes', // Containers ]; foreach ( $hooks as $hook => $injection_position ) { add_action( $hook, function( $element, $args ) use ( $injection_position ) { $this->add_control_to_advanced_tab( $element, $args, $injection_position ); }, 10, 2 ); } } protected function add_render_actions() { $element_types = [ 'section', 'column', 'widget', 'container', ]; foreach ( $element_types as $el ) { add_action( 'elementor/frontend/' . $el . '/before_render', [ $this, 'before_element_render' ] ); add_action( 'elementor/frontend/' . $el . '/after_render', [ $this, 'after_element_render' ] ); } } private function add_control_to_advanced_tab( $element, $args, $injection_position ) { $element->start_injection( [ 'of' => $injection_position, ] ); $element->add_control( 'e_display_conditions_trigger', [ 'type' => Controls_Manager::RAW_HTML, 'separator' => 'before', 'raw' => $this->get_display_conditions_control_template(), ] ); $element->add_control( 'e_display_conditions', [ 'type' => Controls_Manager::HIDDEN, ] ); $element->end_injection(); } private function get_display_conditions_control_template() { $icon_class = 'e-control-display-conditions'; $show_promo = self::should_show_promo(); if ( $show_promo ) { $icon_class .= '-promo'; } ob_start(); ?>