get_condition( 'general' )->register_sub_condition( new \Abdiel_AMM\Elementor_Language_Main_Condition() ); } public function register_element_controls( $element, $args ) { if ( ! is_object( $element ) || ! method_exists( $element, 'start_controls_section' ) ) { return; } $langs = Settings::get_languages_option(); $items = isset( $langs['items'] ) && is_array( $langs['items'] ) ? $langs['items'] : []; $options = []; foreach ( $items as $code => $row ) { if ( empty( $row['active'] ) ) { continue; } $name = isset( $row['name'] ) && is_string( $row['name'] ) ? $row['name'] : $code; $options[ $code ] = sprintf( '%s (%s)', $name, $code ); } if ( empty( $options ) ) { return; } $element->start_controls_section( 'abdiel_amm_lang_visibility', [ 'label' => __( 'Language (Abdiel AMM)', 'abdiel-multilingual-manager' ), 'tab' => \Elementor\Controls_Manager::TAB_ADVANCED, ] ); $element->add_control( 'abdiel_amm_lang_visibility_enable', [ 'label' => __( 'Enable language visibility', 'abdiel-multilingual-manager' ), 'type' => \Elementor\Controls_Manager::SWITCHER, 'return_value' => 'yes', 'default' => '', ] ); $element->add_control( 'abdiel_amm_lang_visibility_mode', [ 'label' => __( 'Rule', 'abdiel-multilingual-manager' ), 'type' => \Elementor\Controls_Manager::SELECT, 'options' => [ 'show' => __( 'Show only for selected languages', 'abdiel-multilingual-manager' ), 'hide' => __( 'Hide for selected languages', 'abdiel-multilingual-manager' ), ], 'default' => 'show', 'condition' => [ 'abdiel_amm_lang_visibility_enable' => 'yes' ], ] ); $element->add_control( 'abdiel_amm_lang_visibility_languages', [ 'label' => __( 'Languages', 'abdiel-multilingual-manager' ), 'type' => \Elementor\Controls_Manager::SELECT2, 'multiple' => true, 'options' => $options, 'label_block' => true, 'condition' => [ 'abdiel_amm_lang_visibility_enable' => 'yes' ], ] ); $element->end_controls_section(); } public function filter_element_should_render( $should_render, $element ) { if ( ! $should_render ) { return $should_render; } if ( ! is_object( $element ) || ! method_exists( $element, 'get_settings_for_display' ) ) { return $should_render; } $settings = $element->get_settings_for_display(); if ( empty( $settings['abdiel_amm_lang_visibility_enable'] ) || 'yes' !== $settings['abdiel_amm_lang_visibility_enable'] ) { return $should_render; } $langs = isset( $settings['abdiel_amm_lang_visibility_languages'] ) ? $settings['abdiel_amm_lang_visibility_languages'] : []; if ( empty( $langs ) || ! is_array( $langs ) ) { return $should_render; } $current = abdiel_amm_boot()->content->get_current_language_code(); $current = is_string( $current ) ? sanitize_key( $current ) : ''; if ( '' === $current ) { return $should_render; } $mode = isset( $settings['abdiel_amm_lang_visibility_mode'] ) ? sanitize_key( (string) $settings['abdiel_amm_lang_visibility_mode'] ) : 'show'; $in = in_array( $current, array_map( 'sanitize_key', $langs ), true ); if ( 'hide' === $mode ) { return ! $in; } // Default: show only. return $in; } }