ruạṛ
<?php /** * UAEL Marketing Button. * * @package UAEL */ namespace UltimateElementor\Modules\MarketingButton\Widgets; // Elementor Classes. use Elementor\Controls_Manager; use Elementor\Utils; use Elementor\Group_Control_Border; use Elementor\Group_Control_Typography; use Elementor\Group_Control_Box_Shadow; use Elementor\Core\Kits\Documents\Tabs\Global_Typography; use Elementor\Core\Kits\Documents\Tabs\Global_Colors; use Elementor\Widget_Button; use Elementor\Group_Control_Background; // UltimateElementor Classes. use UltimateElementor\Base\Common_Widget; use UltimateElementor\Classes\UAEL_Helper; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } /** * Class Marketing Button. */ class Marketing_Button extends Common_Widget { /** * Retrieve Marketing Button Widget name. * * @since 1.10.0 * @access public * * @return string Widget name. */ public function get_name() { return parent::get_widget_slug( 'Marketing_Button' ); } /** * Retrieve Marketing Button Widget title. * * @since 1.10.0 * @access public * * @return string Widget title. */ public function get_title() { return parent::get_widget_title( 'Marketing_Button' ); } /** * Retrieve Marketing Button Widget icon. * * @since 1.10.0 * @access public * * @return string Widget icon. */ public function get_icon() { return parent::get_widget_icon( 'Marketing_Button' ); } /** * Retrieve Widget Keywords. * * @since 1.10.0 * @access public * * @return string Widget keywords. */ public function get_keywords() { return parent::get_widget_keywords( 'Marketing_Button' ); } /** * Retrieve Marketing Button sizes. * * @since 1.10.0 * @access public * * @return array Marketing Button Sizes. */ public static function get_button_sizes() { return Widget_Button::get_button_sizes(); } /** * Indicates if the widget's content is dynamic. * * This method returns true if the widget's output is dynamic and should not be cached, * or false if the content is static and can be cached. * * @since 1.36.37 * @return bool True for dynamic content, false for static content. */ protected function is_dynamic_content(): bool { // phpcs:ignore return false; } /** * Register Marketing Button controls. * * @since 1.29.2 * @access protected */ protected function register_controls() { $this->register_presets_control( 'Marketing_Button', $this ); // Content Tab. $this->register_buttons_content_controls(); // Style Tab. $this->register_styling_style_controls(); $this->register_color_content_controls(); $this->register_helpful_information(); } /** * Register Marketing Button General Controls. * * @since 1.10.0 * @access protected */ protected function register_buttons_content_controls() { $this->start_controls_section( 'section_buttons', array( 'label' => __( 'General', 'uael' ), ) ); $this->add_control( 'text', array( 'label' => __( 'Title', 'uael' ), 'type' => Controls_Manager::TEXTAREA, 'rows' => '2', 'default' => __( 'Subscribe Now', 'uael' ), 'dynamic' => array( 'active' => true, ), ) ); $this->add_control( 'desc_text', array( 'label' => __( 'Description', 'uael' ), 'type' => Controls_Manager::TEXTAREA, 'rows' => '3', 'default' => __( 'Get access to Premium Features for FREE for a year!', 'uael' ), 'dynamic' => array( 'active' => true, ), ) ); $this->add_control( 'link', array( 'label' => __( 'Link', 'uael' ), 'type' => Controls_Manager::URL, 'default' => array( 'url' => '#', 'is_external' => '', ), 'dynamic' => array( 'active' => true, ), 'selector' => '', ) ); if ( UAEL_Helper::is_elementor_updated() ) { $this->add_control( 'new_icon', array( 'label' => __( 'Icon', 'uael' ), 'type' => Controls_Manager::ICONS, 'fa4compatibility' => 'icon', 'default' => array( 'value' => 'fa fa-arrow-right', 'library' => 'fa-solid', ), 'separator' => 'before', ) ); } else { $this->add_control( 'icon', array( 'label' => __( 'Icon', 'uael' ), 'type' => Controls_Manager::ICON, 'default' => 'fa fa-arrow-right', 'separator' => 'before', ) ); } $this->add_control( 'icon_align', array( 'label' => __( 'Icon Position', 'uael' ), 'type' => Controls_Manager::SELECT, 'default' => 'left', 'options' => array( 'left' => __( 'Before Title', 'uael' ), 'right' => __( 'After Title', 'uael' ), 'all_left' => __( 'Before Title & Description', 'uael' ), 'all_right' => __( 'After Title & Description', 'uael' ), ), 'conditions' => array( 'relation' => 'or', 'terms' => array( array( 'name' => UAEL_Helper::get_new_icon_name( 'icon' ), 'operator' => '!=', 'value' => '', ), ), ), ) ); $this->add_control( 'icon_vertical_align', array( 'label' => __( 'Icon Vertical Alignment', 'uael' ), 'type' => Controls_Manager::CHOOSE, 'label_block' => false, 'default' => 'center', 'options' => array( 'flex-start' => array( 'title' => __( 'Top', 'uael' ), 'icon' => 'eicon-v-align-top', ), 'center' => array( 'title' => __( 'Middle', 'uael' ), 'icon' => 'eicon-v-align-middle', ), ), 'condition' => array( 'icon_align' => array( 'all_left', 'all_right' ), ), 'selectors' => array( '{{WRAPPER}} .uael-marketing-buttons-all_left.elementor-button .elementor-button-icon, {{WRAPPER}} .uael-marketing-buttons-all_right.elementor-button .elementor-button-icon' => 'align-self: {{VALUE}};', ), ) ); $this->add_responsive_control( 'icon_size', array( 'label' => __( 'Icon Size', 'uael' ), 'type' => Controls_Manager::SLIDER, 'range' => array( 'px' => array( 'max' => 50, ), ), 'conditions' => array( 'relation' => 'or', 'terms' => array( array( 'name' => UAEL_Helper::get_new_icon_name( 'icon' ), 'operator' => '!=', 'value' => '', ), ), ), 'selectors' => array( '{{WRAPPER}} .elementor-button .elementor-button-icon' => 'font-size: {{SIZE}}{{UNIT}};', '{{WRAPPER}} .elementor-button .elementor-button-icon svg' => 'height: {{SIZE}}{{UNIT}}; width: {{SIZE}}{{UNIT}};', ), 'frontend_available' => true, ) ); $this->add_responsive_control( 'icon_indent', array( 'label' => __( 'Icon Spacing', 'uael' ), 'type' => Controls_Manager::SLIDER, 'range' => array( 'px' => array( 'max' => 50, ), ), 'conditions' => array( 'relation' => 'or', 'terms' => array( array( 'name' => UAEL_Helper::get_new_icon_name( 'icon' ), 'operator' => '!=', 'value' => '', ), ), ), 'selectors' => array( '{{WRAPPER}} .elementor-align-icon-right, {{WRAPPER}} .uael-marketing-buttons-all_right.elementor-button .elementor-button-icon' => 'margin-left: {{SIZE}}{{UNIT}};', '{{WRAPPER}} .elementor-align-icon-left, {{WRAPPER}} .uael-marketing-buttons-all_left.elementor-button .elementor-button-icon' => 'margin-right: {{SIZE}}{{UNIT}};', ), 'frontend_available' => true, ) ); $this->add_control( 'css_id', array( 'label' => __( 'CSS ID', 'uael' ), 'type' => Controls_Manager::TEXT, 'default' => '', 'title' => __( 'Add your custom id WITHOUT the # key.', 'uael' ), ) ); $this->end_controls_section(); } /** * Helpful Information. * * @since 1.10.0 * @access protected */ protected function register_helpful_information() { $help_link_1 = UAEL_DOMAIN . 'docs/marketing-button-widget/?utm_source=uael-pro-dashboard&utm_medium=uael-editor-screen&utm_campaign=uael-pro-plugin'; if ( parent::is_internal_links() ) { $this->start_controls_section( 'section_helpful_info', array( 'label' => __( 'Helpful Information', 'uael' ), ) ); $this->add_control( 'help_doc_1', array( 'type' => Controls_Manager::RAW_HTML, /* translators: %1$s doc link */ 'raw' => sprintf( __( '%1$s Getting started article » %2$s', 'uael' ), '<a href=' . $help_link_1 . ' target="_blank" rel="noopener">', '</a>' ), 'content_classes' => 'uael-editor-doc', ) ); $this->end_controls_section(); } } /** * Register Marketing Button Colors Controls. * * @since 1.10.0 * @access protected */ protected function register_color_content_controls() { $this->start_controls_section( 'general_colors', array( 'label' => __( 'Content', 'uael' ), 'tab' => Controls_Manager::TAB_STYLE, ) ); $this->add_control( 'text_align', array( 'label' => __( 'Alignment', 'uael' ), 'type' => Controls_Manager::CHOOSE, 'options' => array( 'left' => array( 'title' => __( 'Left', 'uael' ), 'icon' => 'fa fa-align-left', ), 'center' => array( 'title' => __( 'Center', 'uael' ), 'icon' => 'fa fa-align-center', ), 'right' => array( 'title' => __( 'Right', 'uael' ), 'icon' => 'fa fa-align-right', ), ), 'default' => 'center', 'toggle' => false, 'prefix_class' => 'uael-mbutton-text-', ) ); $this->add_group_control( Group_Control_Typography::get_type(), array( 'name' => 'all_typography', 'label' => __( 'Title Typography', 'uael' ), 'global' => array( 'default' => Global_Typography::TYPOGRAPHY_ACCENT, ), 'selector' => '{{WRAPPER}} .uael-marketing-button-title', ) ); $this->add_group_control( Group_Control_Typography::get_type(), array( 'name' => 'desc_typography', 'label' => __( 'Description Typography', 'uael' ), 'global' => array( 'default' => Global_Typography::TYPOGRAPHY_TEXT, ), 'selector' => '{{WRAPPER}} .uael-marketing-button .uael-marketing-button-desc', ) ); $this->add_responsive_control( 'title_margin_bottom', array( 'label' => __( 'Space between Title & Description', 'uael' ), 'type' => Controls_Manager::SLIDER, 'size_units' => array( 'px', 'em', 'rem' ), 'range' => array( 'px' => array( 'min' => 1, 'max' => 50, ), ), 'selectors' => array( '{{WRAPPER}} .uael-marketing-button .elementor-button-content-wrapper' => 'margin-bottom: {{SIZE}}{{UNIT}};', ), 'frontend_available' => true, ) ); $this->end_controls_section(); } /** * Register Marketing Button Styling Controls. * * @since 1.10.0 * @access protected */ protected function register_styling_style_controls() { $this->start_controls_section( 'section_styling', array( 'label' => __( 'Button', 'uael' ), 'tab' => Controls_Manager::TAB_STYLE, ) ); $this->add_responsive_control( 'align', array( 'label' => __( 'Alignment', 'uael' ), 'type' => Controls_Manager::CHOOSE, 'options' => array( 'left' => array( 'title' => __( 'Left', 'uael' ), 'icon' => 'fa fa-align-left', ), 'center' => array( 'title' => __( 'Center', 'uael' ), 'icon' => 'fa fa-align-center', ), 'right' => array( 'title' => __( 'Right', 'uael' ), 'icon' => 'fa fa-align-right', ), 'justify' => array( 'title' => __( 'Justify', 'uael' ), 'icon' => 'fa fa-align-justify', ), ), 'default' => 'center', 'toggle' => false, 'prefix_class' => 'elementor%s-align-', 'frontend_available' => true, ) ); $this->add_control( 'size', array( 'label' => __( 'Size', 'uael' ), 'type' => Controls_Manager::SELECT, 'default' => 'md', 'options' => self::get_button_sizes(), ) ); $this->add_responsive_control( 'padding', array( 'label' => __( 'Padding', 'uael' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', 'em', '%' ), 'selectors' => array( '{{WRAPPER}} .elementor-button' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'frontend_available' => true, ) ); $this->start_controls_tabs( '_button_style' ); $this->start_controls_tab( '_button_normal', array( 'label' => __( 'Normal', 'uael' ), ) ); $this->add_control( 'all_text_color', array( 'label' => __( 'Text Color', 'uael' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => array( '{{WRAPPER}} a.elementor-button' => 'color: {{VALUE}};', '{{WRAPPER}} a.elementor-button-icon svg, {{WRAPPER}} .elementor-button-icon svg' => 'fill: {{VALUE}};', ), ) ); $this->add_control( 'all_desc_color', array( 'label' => __( 'Description Color', 'uael' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} .uael-marketing-button .uael-marketing-button-desc' => 'color: {{VALUE}};', ), ) ); $this->add_group_control( Group_Control_Background::get_type(), array( 'name' => 'all_background_color', 'label' => __( 'Background Color', 'uael' ), 'types' => array( 'classic', 'gradient' ), 'selector' => '{{WRAPPER}} a.elementor-button', 'fields_options' => array( 'color' => array( 'global' => array( 'default' => Global_Colors::COLOR_ACCENT, ), ), ), ) ); $this->add_group_control( Group_Control_Border::get_type(), array( 'name' => 'all_border', 'label' => __( 'Border', 'uael' ), 'selector' => '{{WRAPPER}} .elementor-button', ) ); $this->add_control( 'all_border_radius', array( 'label' => __( 'Border Radius', 'uael' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%' ), 'selectors' => array( '{{WRAPPER}} .elementor-button' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), ) ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'all_button_box_shadow', 'selector' => '{{WRAPPER}} .elementor-button', ) ); $this->add_control( 'blink_effect', array( 'label' => __( 'Flare Animation', 'uael' ), 'type' => Controls_Manager::SWITCHER, 'default' => 'no', ) ); $this->end_controls_tab(); $this->start_controls_tab( 'all_button_hover', array( 'label' => __( 'Hover', 'uael' ), ) ); $this->add_control( 'all_hover_color', array( 'label' => __( 'Text Color', 'uael' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} a.elementor-button:hover' => 'color: {{VALUE}};', ), ) ); $this->add_control( 'all_desc__hover_color', array( 'label' => __( 'Description Color', 'uael' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} .uael-marketing-button a.elementor-button:hover .uael-marketing-button-desc' => 'color: {{VALUE}};', ), ) ); $this->add_group_control( Group_Control_Background::get_type(), array( 'name' => 'all_background_hover_color', 'label' => __( 'Background Color', 'uael' ), 'types' => array( 'classic', 'gradient' ), 'selector' => '{{WRAPPER}} a.elementor-button:hover', 'fields_options' => array( 'color' => array( 'global' => array( 'default' => Global_Colors::COLOR_ACCENT, ), ), ), ) ); $this->add_control( 'all_border_hover_color', array( 'label' => __( 'Border Hover Color', 'uael' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => array( '{{WRAPPER}} a.elementor-button:hover' => 'border-color: {{VALUE}};', ), ) ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'all_button_hover_box_shadow', 'selector' => '{{WRAPPER}} .elementor-button:hover', 'separator' => 'after', ) ); $this->add_control( 'hover_animation', array( 'label' => __( 'Hover Animation', 'uael' ), 'type' => Controls_Manager::HOVER_ANIMATION, 'label_block' => true, ) ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); } /** * Render Marketing Button widget icon. * * @since 1.16.1 * @param array $settings settings. * @access protected */ protected function render_button_icon( $settings ) { if ( UAEL_Helper::is_elementor_updated() ) { if ( ! isset( $settings['icon'] ) && ! \Elementor\Icons_Manager::is_migration_allowed() ) { // add old default. $settings['icon'] = 'fa fa-arrow-right'; } $has_icon = ! empty( $settings['icon'] ); if ( ! $has_icon && ! empty( $settings['new_icon']['value'] ) ) { $has_icon = true; } if ( $has_icon ) { $migrated = isset( $settings['__fa4_migrated']['new_icon'] ); $is_new = ! isset( $settings['icon'] ) && \Elementor\Icons_Manager::is_migration_allowed(); ?> <span <?php echo wp_kses_post( $this->get_render_attribute_string( 'icon-align' ) ); ?>> <?php if ( $is_new || $migrated ) { \Elementor\Icons_Manager::render_icon( $settings['new_icon'], array( 'aria-hidden' => 'true' ) ); } elseif ( ! empty( $settings['icon'] ) ) { ?> <i class="<?php echo esc_attr( $settings['icon'] ); ?>" aria-hidden="true"></i> <?php } ?> </span> <?php } ?> <?php } elseif ( ! empty( $settings['icon'] ) ) { ?> <span <?php echo wp_kses_post( $this->get_render_attribute_string( 'icon-align' ) ); ?>> <i class="<?php echo esc_attr( $settings['icon'] ); ?>" aria-hidden="true"></i> </span> <?php } } /** * Render Marketing Button widget text. * * @since 1.10.0 * @access protected */ protected function render_button_text() { $settings = $this->get_settings_for_display(); $this->add_render_attribute( 'content-wrapper', 'class', 'elementor-button-content-wrapper' ); $this->add_render_attribute( 'content-wrapper', 'class', 'uael-buttons-icon-' . esc_attr( $settings['icon_align'] ) ); $this->add_render_attribute( 'icon-align', 'class', 'elementor-align-icon-' . esc_attr( $settings['icon_align'] ) ); $this->add_render_attribute( 'icon-align', 'class', 'elementor-button-icon' ); $this->add_render_attribute( 'btn-text', 'class', 'elementor-button-text' ); $this->add_render_attribute( 'btn-text', 'class', 'uael-marketing-button-title' ); $this->add_render_attribute( 'btn-text', 'class', 'elementor-inline-editing' ); ?> <?php if ( 'all_left' === $settings['icon_align'] || 'all_right' === $settings['icon_align'] ) : ?> <?php $this->render_button_icon( $settings ); ?> <?php endif; ?> <span class="uael-marketing-buttons-wrap"> <span <?php echo wp_kses_post( $this->get_render_attribute_string( 'content-wrapper' ) ); ?>> <?php if ( 'left' === $settings['icon_align'] || 'right' === $settings['icon_align'] ) : ?> <?php $this->render_button_icon( $settings ); ?> <?php endif; ?> <span <?php echo wp_kses_post( $this->get_render_attribute_string( 'btn-text' ) ); ?> data-elementor-setting-key="text" data-elementor-inline-editing-toolbar="none"><?php echo wp_kses_post( $settings['text'] ); ?></span> </span> <?php if ( '' !== $settings['desc_text'] ) { ?> <span class="uael-marketing-button-desc elementor-inline-editing" data-elementor-setting-key="desc_text" data-elementor-inline-editing-toolbar="none"><?php echo wp_kses_post( $settings['desc_text'] ); ?></span> <?php } ?> </span> <?php } /** * Render Marketing Buttons output on the frontend. * * Written in PHP and used to generate the final HTML. * * @since 1.10.0 * @access protected */ protected function render() { $settings = $this->get_settings_for_display(); $this->add_render_attribute( 'wrapper', 'class', 'uael-button-wrapper' ); if ( ! empty( $settings['link']['url'] ) ) { $this->add_render_attribute( 'button', 'class', 'elementor-button-link' ); $this->add_link_attributes( 'button', $settings['link'] ); } if ( '' !== $settings['css_id'] ) { $this->add_render_attribute( 'button', 'id', $settings['css_id'] ); } $this->add_render_attribute( 'button', 'class', 'elementor-button' ); if ( ! empty( $settings['size'] ) ) { $this->add_render_attribute( 'button', 'class', 'elementor-size-' . esc_attr( $settings['size'] ) ); } $this->add_render_attribute( 'button', 'class', 'uael-marketing-buttons-' . esc_attr( $settings['icon_align'] ) ); if ( $settings['hover_animation'] ) { $this->add_render_attribute( 'button', 'class', 'elementor-animation-' . esc_attr( $settings['hover_animation'] ) ); } ?> <div class="uael-marketing-button elementor-widget-button"> <div <?php echo wp_kses_post( $this->get_render_attribute_string( 'wrapper' ) ); ?>> <a <?php echo wp_kses_post( $this->get_render_attribute_string( 'button' ) ); ?>> <?php if ( 'yes' === $settings['blink_effect'] ) { ?> <span class="uael_btn__blink"></span> <?php } ?> <?php $this->render_button_text(); ?> </a> </div> </div> <?php } /** * Render Marketing Buttons widget output in the editor. * * Written as a Backbone JavaScript template and used to generate the live preview. * * @since 1.22.1 * @access protected */ protected function content_template() { ?> <# function render_icon() { icon_align = 'elementor-align-icon-' + settings.icon_align; var iconHTML = elementor.helpers.renderIcon( view, settings.new_icon, { 'aria-hidden': true }, 'i' , 'object' ); var migrated = elementor.helpers.isIconMigrated( settings, 'new_icon' ); #> <?php if ( UAEL_Helper::is_elementor_updated() ) { ?> <# if ( settings.icon || settings.new_icon ) { #> <span class="elementor-button-icon {{ icon_align }}"> <# if ( iconHTML && iconHTML.rendered && ( ! settings.icon || migrated ) ) { #> {{{ iconHTML.value }}} <?php //phpcs:ignore WordPressVIPMinimum.Security.Mustache.OutputNotation ?> <# } else { #> <i class="{{ settings.icon }}" aria-hidden="true"></i> <# } #> </span> <# } #> <?php } else { ?> <span class="elementor-button-icon {{ icon_align }}"> <i class="{{ settings.icon }}" aria-hidden="true"></i> </span> <?php } ?> <# } #> <div class="uael-marketing-button elementor-widget-button"> <# view.addRenderAttribute( 'wrapper', 'class', 'uael-button-wrapper' ); var uael_mbutton_align = ''; var new_icon_align = ''; var icon_align = ''; view.addRenderAttribute( 'button', 'class', 'elementor-button' ); if ( '' != settings.link.url ) { var urlPattern = /^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$|^www\.[^\s/$.?#].[^\s]*$/; if( urlPattern.test( settings.link.url ) ) { var button_link = _.escape( settings.link.url ); view.addRenderAttribute( 'button', 'href', button_link ); } view.addRenderAttribute( 'button', 'class', 'elementor-button-link' ); } if ( '' != settings.size ) { view.addRenderAttribute( 'button', 'class', 'elementor-size-' + settings.size ); } if ( '' !== settings.icon ) { uael_mbutton_align = 'uael-marketing-buttons-' + settings.icon_align; view.addRenderAttribute( 'button', 'class', uael_mbutton_align ); } if ( settings.hover_animation ) { view.addRenderAttribute( 'button', 'class', 'elementor-animation-' + settings.hover_animation ); } #> <div {{{ view.getRenderAttributeString( 'wrapper' ) }}}> <?php //phpcs:ignore WordPressVIPMinimum.Security.Mustache.OutputNotation ?> <a id="{{ settings.css_id }}" {{{ view.getRenderAttributeString( 'button' ) }}}> <?php //phpcs:ignore WordPressVIPMinimum.Security.Mustache.OutputNotation ?> <# if ( 'yes' === settings.blink_effect ) { #> <span class="uael_btn__blink"></span> <# } #> <# new_icon_align = ' uael-buttons-icon-' + settings.icon_align; if ( 'all_left' == settings.icon_align || 'all_right' == settings.icon_align ) { render_icon(); #> <# } #> <span class="uael-marketing-buttons-wrap"> <span class="elementor-button-content-wrapper{{ new_icon_align }}"> <# if ( 'left' == settings.icon_align || 'right' == settings.icon_align ) { render_icon(); #> <# } #> <span class="elementor-button-text elementor-inline-editing uael-marketing-button-title" data-elementor-setting-key="settings.buttons.text" data-elementor-inline-editing-toolbar="none">{{ elementor.helpers.sanitize(settings.text) }}</span> </span> <# if ( '' != settings.desc_text ) { #> <span class="uael-marketing-button-desc" data-elementor-setting-key="settings.buttons.desc_text" data-elementor-inline-editing-toolbar="none">{{ elementor.helpers.sanitize(settings.desc_text) }}</span> <# } #> </span> </a> </div> <?php } }
cải xoăn