'' ) ); $dropdown = wp_list_pluck( $languages, 'name', 'slug' ); $element->start_controls_section( 'cpel_lv_section', array( 'tab' => Controls_Manager::TAB_ADVANCED, 'label' => __( 'Language Visibility', 'connect-polylang-elementor' ), ) ); $element->add_control( 'cpel_lv_enabled', array( 'type' => Controls_Manager::SWITCHER, 'label' => __( 'Enable', 'elementor' ), // phpcs:ignore WordPress.WP.I18n 'render_type' => 'template', 'prefix_class' => 'cpel-lv--', 'style_transfer' => false, ) ); $element->add_control( 'cpel_lv_action', array( 'label' => __( 'Visibility', 'elementor' ), // phpcs:ignore WordPress.WP.I18n 'type' => Controls_Manager::CHOOSE, 'options' => array( 'show' => array( 'title' => __( 'Show', 'elementor' ), // phpcs:ignore WordPress.WP.I18n 'icon' => 'eicon-preview-medium', ), 'hide' => array( 'title' => __( 'Hide', 'elementor' ), // phpcs:ignore WordPress.WP.I18n 'icon' => 'eicon-ban', ), ), 'default' => 'show', 'condition' => array( 'cpel_lv_enabled' => 'yes', ), ) ); $element->add_control( 'cpel_lv_languages', array( 'label' => __( 'When language is:', 'connect-polylang-elementor' ), 'type' => Controls_Manager::SELECT2, 'label_block' => true, 'default' => array(), 'multiple' => true, 'options' => $dropdown, 'condition' => array( 'cpel_lv_enabled' => 'yes', ), ) ); $element->end_controls_section(); } /** * Check render language visibility * * @param bool $should_render * @param Element_Base $element * @return bool */ public function visibility_check( $should_render, $element ) { $settings = $element->get_settings(); $enabled = ! empty( $settings['cpel_lv_enabled'] ) ? $settings['cpel_lv_enabled'] : false; $enabled = filter_var( $enabled, FILTER_VALIDATE_BOOLEAN ); $languages = isset( $settings['cpel_lv_languages'] ) ? (array) $settings['cpel_lv_languages'] : array(); $show = isset( $settings['cpel_lv_action'] ) ? 'hide' !== $settings['cpel_lv_action'] : true; if ( ! $enabled || empty( $languages ) ) { return $should_render; } return in_array( pll_current_language(), $languages, true ) ? $show : ! $show; } /** * Mark element as dynamic content if language visibility is enabled * * @param bool $is_dynamic_content * @param array $element_rqw_data * @param Element_Base $element_instance * @return bool */ public function filter_element_caching_is_dynamic_content( $is_dynamic_content, $element_rqw_data, $element_instance ) { if ( isset( $element_rqw_data['settings']['cpel_lv_enabled'] ) && 'yes' === $element_rqw_data['settings']['cpel_lv_enabled'] ) { $is_dynamic_content = true; } return $is_dynamic_content; } }