Create New Item
×
Item Type
File
Folder
Item Name
×
Search file in folder and subfolders...
File Manager
/
wp-content
/
plugins
/
powerpack-elements
/
modules
/
woocommerce
/
widgets
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php /** * PowerPack Product Data Tabs Widget * * PowerPack Product Data Tabs widget uses WooCommerce's product tabs template to * fetch the data for the tabs. * * * @package PowerPack for Elementor Pro */ namespace PowerpackElements\Modules\Woocommerce\Widgets; use PowerpackElements\Base\Powerpack_Widget; use PowerpackElements\Classes\PP_Config; use PowerpackElements\Classes\PP_Woo_Helper; use Elementor\Controls_Manager; use Elementor\Repeater; use Elementor\Utils; use Elementor\Plugin; use Elementor\Group_Control_Typography; use Elementor\Group_Control_Background; use Elementor\Group_Control_Border; use Elementor\Group_Control_Box_Shadow; use Elementor\Core\Schemes\Typography as Scheme_Typography; use Elementor\Modules\DynamicTags\Module as TagsModule; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } /** * Class Woo_Cart. */ class Woo_Product_Tabs extends Powerpack_Widget { const WIDGET = 'Woo_Product_Tabs'; public function get_categories() { return parent::get_woo_categories(); } /** * Retrieve widget name. * * @access public * * @return string Widget name. */ public function get_name() { return parent::get_widget_name( self::WIDGET ); } /** * Retrieve widget title. * * @access public * * @return string Widget title. */ public function get_title() { return parent::get_widget_title( self::WIDGET ); } /** * Retrieve widget icon. * * @access public * * @return string Widget icon. */ public function get_icon() { return parent::get_widget_icon( self::WIDGET ); } /** * Get widget keywords. * * Retrieve the list of keywords the widget belongs to. * * @since 1.3.7 * @access public * * @return array Widget keywords. */ public function get_keywords() { return parent::get_widget_keywords( self::WIDGET ); } /** * Retrieve the list of scripts the toggle widget depended on. * * Used to set scripts dependencies required to run the widget. * * @access public * * @return array Widget scripts dependencies. */ public function get_script_depends() { return array( 'jquery', 'pp-product-tabs', 'wc-single-product', ); } /** * Retrieve the list of styles the Woo - Categories depended on. * * Used to set style dependencies required to run the widget. * * @access public * * @return array Widget scripts dependencies. */ public function get_style_depends() { return array( 'pp-woocommerce', ); } /** * Register controls. * * @access protected */ protected function _register_controls() { // phpcs:ignore PSR2.Methods.MethodDeclaration.Underscore // Content Tab $this->register_content_tab_controls(); $this->register_content_layout_controls(); $this->register_content_other_controls(); // Style Tab $this->register_style_controls(); } /** * Register Content Tab - Tabs Section controls. * * Registers Tabs section controls under the Content Tab. * * @access protected */ protected function register_content_tab_controls() { $this->start_controls_section( 'woo-product-tabs__general-section', array( 'label' => __( 'Tabs', 'powerpack' ), ) ); $repeater = new Repeater(); $repeater->start_controls_tabs( 'tabs_at' ); $repeater->start_controls_tab( 'product_tabs_content', array( 'label' => __( 'Content', 'powerpack' ), ) ); $repeater->add_control( 'title', array( 'label' => __( 'Title', 'powerpack' ), 'type' => Controls_Manager::TEXT, 'default' => __( 'Tab', 'powerpack' ), 'description' => 'This title will appear in the Tab Title.', ) ); $repeater->add_control( 'name', array( 'label' => __( 'Tab', 'powerpack' ), 'type' => Controls_Manager::SELECT, 'default' => 'description', 'options' => array( 'description' => __( 'Description', 'powerpack' ), 'reviews' => __( 'Reviews', 'powerpack' ), 'additional_information' => __( 'Additional Information', 'powerpack' ), 'custom' => __( 'Custom Tab', 'powerpack' ), ), ) ); $repeater->add_control( 'custom_tab_type', array( 'label' => __( 'Content', 'powerpack' ), 'type' => Controls_Manager::SELECT, 'default' => 'custom', 'options' => array( 'custom' => __( 'Custom', 'powerpack' ), 'saved_template' => __( 'Saved Template', 'powerpack' ), ), 'condition' => array( 'name' => 'custom', ), ) ); $repeater->add_control( 'custom_content', array( 'label' => __( 'Custom Content', 'powerpack' ), 'type' => Controls_Manager::WYSIWYG, 'default' => __( 'Add custom content, shortcodes, and more.', 'powerpack' ), 'placeholder' => __( 'Placeholder', 'powerpack' ), 'condition' => array( 'custom_tab_type' => 'custom', 'name' => 'custom', ), ) ); $repeater->add_control( 'template_content', array( 'label' => __( 'Choose Template', 'powerpack' ), 'type' => 'pp-query', 'multiple' => false, 'query_type' => 'templates', 'condition' => array( 'custom_tab_type' => 'saved_template', ), ) ); $repeater->end_controls_tab(); $repeater->start_controls_tab( 'product_tabs_icon', array( 'label' => __( 'Icon', 'powerpack' ), ) ); $repeater->add_control( 'product_tab_icon', array( 'label' => __( 'Icon', 'powerpack' ), 'type' => Controls_Manager::ICONS, 'label_block' => true, 'default' => array( 'value' => 'fas fa-check', 'library' => 'fa-solid', ), 'fa4compatibility' => 'icon', ) ); $repeater->end_controls_tab(); $repeater->end_controls_tab(); $this->add_control( 'product_tabs--repeater-section', array( 'label' => '', 'type' => Controls_Manager::REPEATER, 'fields' => $repeater->get_controls(), 'default' => array( array( 'name' => 'description', 'title' => 'Description', ), array( 'name' => 'reviews', 'title' => 'Reviews', ), array( 'name' => 'additional_information', 'title' => 'Additional Information', ), ), 'title_field' => ' <# var t = ""; if( "" !== title ){ t = title; } else { t = name.replace(/_/g, " ").toUpperCase(); } #>{{{ t }}} ', 'frontend_available' => true, ) ); $this->end_controls_section(); } /** * Register Content Tab - Layout Section controls. * * Registers Layout section controls under the Content Tab. * * @access protected */ protected function register_content_layout_controls() { $this->start_controls_section( 'woo-products-tabs__section-layout', array( 'label' => __( 'Layout', 'powerpack' ), ) ); $this->add_control( 'woo_product_tabs__tab_layout', array( 'label' => __( 'Tab Layout', 'powerpack' ), 'type' => Controls_Manager::SELECT, 'options' => array( 'wpt-horizontal' => __( 'Horizontal', 'powerpack' ), 'wpt-vertical' => __( 'Vertical', 'powerpack' ), ), 'default' => 'wpt-horizontal', 'frontend_available' => true, ) ); $this->add_responsive_control( 'woo-product-tabs__tab-position-horizontal', array( 'label' => __( 'Tab Position', 'powerpack' ), 'type' => Controls_Manager::CHOOSE, 'options' => array( 'column' => array( 'title' => __( 'top', 'powerpack' ), 'icon' => 'eicon-v-align-top', ), 'column-reverse' => array( 'title' => __( 'bottom', 'powerpack' ), 'icon' => 'eicon-v-align-bottom', ), ), 'default' => 'column', 'selectors' => array( '{{WRAPPER}} div.pp-woo-product-tabs-wrapper div.woocommerce-tabs.wc-tabs-wrapper.wpt-horizontal' => 'flex-direction: {{VALUE}};', ), 'condition' => array( 'woo_product_tabs__tab_layout' => 'wpt-horizontal', ), ) ); $this->add_responsive_control( 'woo-product-tabs__tab-position-vertical', array( 'label' => __( 'Tab Position', 'powerpack' ), 'type' => Controls_Manager::CHOOSE, 'options' => array( 'row' => array( 'title' => __( 'left', 'powerpack' ), 'icon' => 'eicon-h-align-left', ), 'row-reverse' => array( 'title' => __( 'right', 'powerpack' ), 'icon' => 'eicon-h-align-right', ), ), 'default' => 'row', 'selectors' => array( '{{WRAPPER}} div.pp-woo-product-tabs-wrapper div.woocommerce-tabs.wc-tabs-wrapper.wpt-vertical' => 'flex-direction: {{VALUE}};', ), 'condition' => array( 'woo_product_tabs__tab_layout' => 'wpt-vertical', ), ) ); $this->add_responsive_control( 'woo-products-tabs__panel-width', array( 'label' => __( 'Content Panel Width', 'powerpack' ), 'type' => Controls_Manager::SLIDER, 'size_units' => array( 'px', '%', 'vw' ), 'range' => array( 'px' => array( 'min' => 0, 'max' => 1000, ), ), 'default' => array( 'unit' => '%', 'size' => 80, ), 'selectors' => array( '{{WRAPPER}} .wc-tabs.tabs' => 'width: {{SIZE}}{{UNIT}};', ), 'responsive' => true, 'condition' => array( 'woo_product_tabs__tab_layout' => 'wpt-vertical', ), ) ); $this->add_control( 'woo-product-tabs__tab-style', array( 'label' => __( 'Tab Style', 'powerpack' ), 'type' => Controls_Manager::SELECT, 'options' => array( 'title' => __( 'Title', 'powerpack' ), 'icon' => __( 'Icon', 'powerpack' ), 'icon_title' => __( 'Icon + Title', 'powerpack' ), ), 'default' => 'icon_title', 'frontend_available' => true, ) ); $this->add_control( 'woo-product-tabs__active-tab-indicator-section', array( 'label' => __( 'Active Tab Indicator', 'powerpack' ), 'type' => Controls_Manager::HEADING, 'description' => 'Set the active and hover tab indicator for the tabs.', 'separator' => 'before', ) ); $this->add_responsive_control( 'woo_products_tab__active_tab_indicator_horizontal', array( 'label' => __( 'Active Tab Indicator', 'powerpack' ), 'type' => Controls_Manager::SELECT, 'options' => array( 'none' => __( 'None', 'powerpack' ), 'underline' => __( 'Underline', 'powerpack' ), 'icon' => __( 'Icon', 'powerpack' ), 'border' => __( 'Border', 'powerpack' ), ), 'default' => 'underline', 'frontend_available' => true, 'condition' => array( 'woo_product_tabs__tab_layout' => 'wpt-horizontal', ), ) ); $this->add_responsive_control( 'woo_products_tab__active_tab_indicator_vertical', array( 'label' => __( 'Active Tab Indicator', 'powerpack' ), 'type' => Controls_Manager::SELECT, 'options' => array( 'none' => __( 'None', 'powerpack' ), 'icon' => __( 'Icon', 'powerpack' ), 'border' => __( 'Border', 'powerpack' ), ), 'default' => 'border', 'frontend_available' => true, 'condition' => array( 'woo_product_tabs__tab_layout' => 'wpt-vertical', ), ) ); $this->add_responsive_control( 'woo-products-tab__active-tab-indicator-position-horizontal', array( 'label' => __( 'Position', 'powerpack' ), 'type' => Controls_Manager::SELECT, 'options' => array( 'indicator-top' => __( 'Top', 'powerpack' ), 'indicator-bottom' => __( 'Bottom', 'powerpack' ), ), 'default' => 'indicator-bottom', 'frontend_available' => true, 'condition' => array( 'woo_product_tabs__tab_layout' => 'wpt-horizontal', ), ) ); $this->add_responsive_control( 'woo_products_tab__active_tab_indicator_position_vertical', array( 'label' => __( 'Position', 'powerpack' ), 'type' => Controls_Manager::SELECT, 'options' => array( 'indicator-right' => __( 'Right', 'powerpack' ), 'indicator-left' => __( 'Left', 'powerpack' ), ), 'default' => 'indicator-right', 'frontend_available' => true, 'condition' => array( 'woo_product_tabs__tab_layout' => 'wpt-vertical', 'woo_products_tab__active_tab_indicator_vertical' => 'icon', ), ) ); /** * Start - Normal and Hover Tab section for Active Icon Indicator - Border */ $this->start_controls_tabs( 'acitve_tab_indicator__border', array( 'conditions' => array( 'relation' => 'or', 'terms' => array( array( 'relation' => 'and', 'terms' => array( array( 'name' => 'woo_products_tab__active_tab_indicator_horizontal', 'operator' => '==', 'value' => 'border', ), array( 'name' => 'woo_product_tabs__tab_layout', 'operator' => '==', 'value' => 'wpt-horizontal', ), ), ), array( 'relation' => 'and', 'terms' => array( array( 'name' => 'woo_products_tab__active_tab_indicator_vertical', 'operator' => '==', 'value' => 'border', ), array( 'name' => 'woo_product_tabs__tab_layout', 'operator' => '==', 'value' => 'wpt-vertical', ), ), ), ), ), ) ); $this->start_controls_tab( 'active-tab-indicator__border-normal', array( 'label' => __( 'Normal', 'powerpack' ), ) ); $this->add_group_control( Group_Control_Border::get_type(), array( 'name' => 'woo-product-tabs__active-tab-indicator-border-normal', 'label' => __( 'Border', 'powerpack' ), 'selector' => '{{WRAPPER}} .woocommerce-tabs ul.tabs.wc-tabs li a', 'separator' => 'before', ) ); $this->end_controls_tab(); $this->start_controls_tab( 'active-tab-indicator__border-active', array( 'label' => __( 'Hover/Active', 'powerpack' ), ) ); $this->add_group_control( Group_Control_Border::get_type(), array( 'name' => 'woo-product-tabs__active-tab-indicator-border-active', 'label' => __( 'Border', 'powerpack' ), 'selector' => '{{WRAPPER}} .woocommerce-tabs ul.tabs.wc-tabs li.active a, {{WRAPPER}} .woocommece-tabs ul.tabs.wc-tabs li.hover a', 'separator' => 'before', ) ); $this->end_controls_tab(); $this->end_controls_tabs(); // End Tab section for Active Icon Indicator Border $this->end_controls_section(); } /** * Register Content Tab - Other Section controls. * * Registers Other controls under the Content Tab. * * @access protected */ protected function register_content_other_controls() { $this->start_controls_section( 'woo-product-tabs__section-other-controls', array( 'label' => __( 'Other', 'powerpack' ), ) ); $this->add_control( 'woo-product-tabs__responsive_support', array( 'label' => __( 'Responsive Support', 'powerpack' ), 'type' => Controls_Manager::SELECT, 'default' => 'tablet', 'options' => array( 'no' => __( 'No', 'powerpack' ), 'tablet' => __( 'For Tablet & Mobile', 'powerpack' ), 'mobile' => __( 'For Mobile Only', 'powerpack' ), ), ) ); $this->add_control( 'woo-product-tabs__default-tab', array( 'label' => __( 'Default Active Tab Index', 'powerpack' ), 'type' => Controls_Manager::NUMBER, 'label_block' => true, 'default' => 1, 'placeholder' => __( 'Default Active Tab Index', 'powerpack' ), 'frontend_available' => true, ) ); $this->end_controls_section(); } /** * Register Style Tab Controls. * * Registers controls for sections under the Style Tab. * * @access protected */ protected function register_style_controls() { $this->register_tab_style_controls(); $this->register_indicator_style_controls(); $this->register_title_style_controls(); $this->register_content_style_controls(); } /** * Register Style Tab - Tab Style Section controls. * * Registers Tab Style section controls under the Style Tab. * * @access protected */ protected function register_tab_style_controls() { /** * Style Tab: Tabs */ $this->start_controls_section( 'woo-products-tab__tab-style', array( 'label' => __( 'Tabs', 'powerpack' ), 'tab' => Controls_Manager::TAB_STYLE, ) ); $this->add_responsive_control( 'product_tab_horizontal_alignment', array( 'label' => __( 'Horizontal Alignment', 'powerpack' ), 'type' => Controls_Manager::CHOOSE, 'options' => array( 'flex-start' => array( 'title' => __( 'Left', 'powerpack' ), 'icon' => 'eicon-h-align-left', ), 'center' => array( 'title' => __( 'Center', 'powerpack' ), 'icon' => 'eicon-h-align-center', ), 'flex-end' => array( 'title' => __( 'Right', 'powerpack' ), 'icon' => 'eicon-h-align-right', ), ), 'default' => 'center', 'selectors' => array( '{{WRAPPER}} div.pp-woo-product-tabs-wrapper div.woocommerce-tabs.wc-tabs-wrapper.wpt-horizontal ul.tabs.wc-tabs' => 'justify-content: {{VALUE}};', ), 'condition' => array( 'woo_product_tabs__tab_layout' => 'wpt-horizontal', ), ) ); $this->add_responsive_control( 'product_tab_vertical_alignment', array( 'label' => __( 'Vertical Alignment', 'powerpack' ), 'type' => Controls_Manager::CHOOSE, 'options' => array( 'flex-start' => array( 'title' => __( 'Top', 'powerpack' ), 'icon' => 'eicon-v-align-top', ), 'center' => array( 'title' => __( 'Middle', 'powerpack' ), 'icon' => 'eicon-v-align-middle', ), 'flex-end' => array( 'title' => __( 'Bottom', 'powerpack' ), 'icon' => 'eicon-v-align-bottom', ), ), 'default' => 'center', 'selectors' => array( '{{WRAPPER}} div.pp-woo-product-tabs-wrapper div.woocommerce-tabs.wc-tabs-wrapper.wpt-vertical ul.tabs.wc-tabs' => 'justify-content: {{VALUE}};', ), 'condition' => array( 'woo_product_tabs__tab_layout' => 'wpt-vertical', ), ) ); $this->add_responsive_control( 'woo-product-tabs_tab-spacing', array( 'label' => __( 'Space Between Tabs', 'powerpack' ), 'type' => Controls_Manager::SLIDER, 'default' => array( 'size' => 0, ), 'range' => array( 'px' => array( 'min' => 0, 'max' => 500, 'step' => 1, ), ), 'size_units' => array( 'px' ), 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs.wpt-horizontal .wc-tabs li:not(:last-child)' => 'margin-right: {{SIZE}}{{UNIT}}', '{{WRAPPER}} .woocommerce-tabs.wpt-vertical .wc-tabs li:not(:last-child)' => 'margin-bottom: {{SIZE}}{{UNIT}}', '{{WRAPPER}} .at-horizontal-content .pp-advanced-tabs-title:not(:first-child)' => 'margin-top: {{SIZE}}{{UNIT}}', '{{WRAPPER}} .at-vertical .pp-advanced-tabs-title:not(:last-child)' => 'margin-bottom: {{SIZE}}{{UNIT}}', '(tablet){{WRAPPER}} .pp-tabs-responsive-tablet .pp-tabs-panel:not(:last-child)' => 'margin-bottom: {{SIZE}}{{UNIT}}', '(mobile){{WRAPPER}} .pp-tabs-responsive-mobile .pp-tabs-panel:not(:last-child)' => 'margin-bottom: {{SIZE}}{{UNIT}}', ), ) ); $this->add_responsive_control( 'woo-product-tabs__tab-panel-space-top', array( 'label' => __( 'Space Between Tabs & Panel', 'powerpack' ), 'type' => Controls_Manager::SLIDER, 'default' => array( 'size' => 0, ), 'range' => array( 'px' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ), 'size_units' => array( 'px' ), 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs.wpt-horizontal .tabs.wc-tabs' => 'margin-bottom: {{SIZE}}{{UNIT}}', ), 'separator' => 'after', 'condition' => array( 'woo-product-tabs__tab-position-horizontal' => 'column', 'woo_product_tabs__tab_layout' => 'wpt-horizontal', ), ) ); $this->add_responsive_control( 'woo-product-tabs__tab-panel-space-bottom', array( 'label' => __( 'Space Between Tabs & Panel', 'powerpack' ), 'type' => Controls_Manager::SLIDER, 'default' => array( 'size' => 0, ), 'range' => array( 'px' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ), 'size_units' => array( 'px' ), 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs.wpt-horizontal .tabs.wc-tabs' => 'margin-top: {{SIZE}}{{UNIT}}', ), 'condition' => array( 'woo-product-tabs__tab-position-horizontal' => 'column-reverse', 'woo_product_tabs__tab_layout' => 'wpt-horizontal', ), ) ); $this->add_responsive_control( 'woo-product-tabs__tab-panel-space-left', array( 'label' => __( 'Space Between Tabs & Panel', 'powerpack' ), 'type' => Controls_Manager::SLIDER, 'default' => array( 'size' => 0, ), 'range' => array( 'px' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ), 'size_units' => array( 'px' ), 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs.wpt-vertical .tabs.wc-tabs' => 'margin-right: {{SIZE}}{{UNIT}}', ), 'condition' => array( 'woo-product-tabs__tab-position-vertical' => 'row', 'woo_product_tabs__tab_layout' => 'wpt-vertical', ), ) ); $this->add_responsive_control( 'woo-product-tabs__tab-panel-space-right', array( 'label' => __( 'Space Between Tabs & Panel', 'powerpack' ), 'type' => Controls_Manager::SLIDER, 'default' => array( 'size' => 0, ), 'range' => array( 'px' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ), 'size_units' => array( 'px' ), 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs.wpt-vertical .tabs.wc-tabs' => 'margin-left: {{SIZE}}{{UNIT}}', ), 'condition' => array( 'woo-product-tabs__tab-position-vertical' => 'row-reverse', 'woo_product_tabs__tab_layout' => 'wpt-vertical', ), ) ); $this->add_control( 'woo_product_tabs_tab_size_toggle', array( 'label' => __( 'Size', 'powerpack' ), 'type' => Controls_Manager::SWITCHER, 'return_value' => 'yes', 'default' => '', 'separator' => 'before', ) ); $this->add_responsive_control( 'woo_product_tabs_tab_width', array( 'label' => __( 'Width', 'powerpack' ), 'type' => Controls_Manager::SLIDER, 'default' => array( 'size' => 200, ), 'range' => array( 'px' => array( 'min' => 0, 'max' => 300, 'step' => 20, ), ), 'size_units' => array( 'px' ), 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs.wpt-horizontal .tabs.wc-tabs li a' => 'width: {{SIZE}}{{UNIT}}', ), 'condition' => array( 'woo_product_tabs_tab_size_toggle' => 'yes', ), ) ); $this->add_responsive_control( 'woo_product_tabs_tab_height', array( 'label' => __( 'Height', 'powerpack' ), 'type' => Controls_Manager::SLIDER, 'default' => array( 'size' => 60, ), 'range' => array( 'px' => array( 'min' => 0, 'max' => 300, 'step' => 20, ), ), 'size_units' => array( 'px' ), 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs.wpt-horizontal .tabs.wc-tabs li a' => 'height: {{SIZE}}{{UNIT}}', ), 'condition' => array( 'woo_product_tabs_tab_size_toggle' => 'yes', ), ) ); $this->add_control( 'woo-product-tabs__content-alignment-heading', array( 'label' => __( 'Content Alignment', 'powerpack' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ) ); $this->add_responsive_control( 'woo-product-tabs__tab-content-alignment-top-bottom', array( 'label' => __( 'Horizontal', 'powerpack' ), 'type' => Controls_Manager::CHOOSE, 'options' => array( 'flex-start' => array( 'title' => __( 'Left', 'powerpack' ), 'icon' => 'eicon-h-align-left', ), 'center' => array( 'title' => __( 'Center', 'powerpack' ), 'icon' => 'eicon-h-align-center', ), 'flex-end' => array( 'title' => __( 'Right', 'powerpack' ), 'icon' => 'eicon-h-align-right', ), ), 'default' => 'center', 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs .tabs.wc-tabs li a' => 'align-items: {{VALUE}};', // column '{{WRAPPER}} .woocommerce-tabs .tabs.wc-tabs li a' => 'justify-content: {{VALUE}};', // row ), ) ); $this->add_responsive_control( 'woo-product-tabs__tab-content-alignment-left-right', array( 'label' => __( 'Vertical', 'powerpack' ), 'type' => Controls_Manager::CHOOSE, 'options' => array( 'flex-start' => array( 'title' => __( 'Top', 'powerpack' ), 'icon' => 'eicon-v-align-top', ), 'center' => array( 'title' => __( 'Middle', 'powerpack' ), 'icon' => 'eicon-v-align-middle', ), 'flex-end' => array( 'title' => __( 'Bottom', 'powerpack' ), 'icon' => 'eicon-v-align-bottom', ), ), 'default' => 'center', 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs .tabs.wc-tabs li a' => 'justify-content: {{VALUE}};', // column '{{WRAPPER}} .woocommerce-tabs .tabs.wc-tabs li a' => 'align-items: {{VALUE}};', // row ), 'separator' => 'after', ) ); $this->end_controls_section(); } /** * Register Style Tab - Active Tab Indicator Style Section controls. * * Registers Active Tab Indicator Style section controls under the Style Tab. * * @access protected */ protected function register_indicator_style_controls() { $this->start_controls_section( 'woo-products-tab__indicator-style-section', array( 'label' => __( 'Indicator', 'powerpack' ), 'tab' => Controls_Manager::TAB_STYLE, ) ); $this->start_controls_tabs( 'woo-product-tabs__indicator-style' ); $this->start_controls_tab( 'indicator-style-normal', array( 'label' => __( 'Normal', 'powerpack' ), ) ); $this->add_control( 'woo-products-tab_indicator-size', array( 'label' => __( 'Size', 'powerpack' ), 'type' => Controls_Manager::SLIDER, 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs ul.tabs.icon li.active::after' => 'font-size: {{SIZE}}{{UNIT}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.icon li.active::before' => 'font-size: {{SIZE}}{{UNIT}}', ), 'responsive' => true, 'condition' => array( 'woo-products-tab__active-tab-indicator' => 'icon', ), ) ); $this->add_control( 'woo-products-tab_indicator-height', array( 'label' => __( 'Height', 'powerpack' ), 'type' => Controls_Manager::SLIDER, 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs ul.tabs.underline li.active::before' => 'height: {{SIZE}}{{UNIT}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.underline li.active::after' => 'height: {{SIZE}}{{UNIT}}', ), 'responsive' => true, 'condition' => array( 'woo-products-tab__active-tab-indicator' => 'underline', ), ) ); $this->add_control( 'woo-products-tab_indicator-width', array( 'label' => __( 'Width', 'powerpack' ), 'type' => Controls_Manager::SLIDER, 'size_units' => array( 'px', '%', 'vw' ), 'range' => array( 'px' => array( 'min' => 0, 'max' => 100, ), '%' => array( 'min' => 0, 'max' => 100, ), 'vw' => array( 'min' => 0, 'max' => 100, ), ), 'default' => array( 'unit' => '%', 'size' => 100, ), 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs ul.tabs.underline li.active::before' => 'width: {{SIZE}}{{UNIT}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.underline li.active::after' => 'width: {{SIZE}}{{UNIT}}', ), 'condition' => array( 'woo-products-tab__active-tab-indicator' => 'underline', ), ) ); $this->add_control( 'woo-product-tabs__indicator-spacing', array( 'label' => __( 'Spacing', 'powerpack' ), 'type' => Controls_Manager::SLIDER, 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs ul.tabs.icon.indicator-bottom li.active::after' => 'bottom: -{{SIZE}}{{UNIT}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.icon.indicator-top li.active::before' => 'top: -{{SIZE}}{{UNIT}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.underline li.active::after' => 'bottom: -{{SIZE}}{{UNIT}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.underline li.active::before' => 'top: -{{SIZE}}{{UNIT}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.icon.indicator-left li.active::before' => 'left: -{{SIZE}}{{UNIT}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.icon.indicator-right li.active::after' => 'right: -{{SIZE}}{{UNIT}}', ), ) ); $this->add_control( 'woo-products-tab_indicator-color', array( 'label' => __( 'Color', 'powerpack' ), 'type' => Controls_Manager::COLOR, 'default' => '#808080', 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs ul.tabs.icon li::before' => 'color: {{VALUE}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.icon li::after' => 'color: {{VALUE}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.underline li::before' => 'background-color: {{VALUE}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.underline li::after' => 'background-color: {{VALUE}}', ), ) ); $this->end_controls_tab(); // End normal indicator style $this->start_controls_tab( 'indicator-style-active', array( 'label' => __( 'Hover', 'powerpack' ), ) ); $this->add_control( 'woo-products-tab_indicator-size-hover', array( 'label' => __( 'Size', 'powerpack' ), 'type' => Controls_Manager::SLIDER, 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs ul.tabs.icon li.hover::after' => 'font-size: {{SIZE}}{{UNIT}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.icon li.hover::before' => 'font-size: {{SIZE}}{{UNIT}}', ), 'responsive' => true, 'condition' => array( 'woo-products-tab__active-tab-indicator' => 'icon', ), ) ); $this->add_control( 'woo-products-tab_indicator-height-hover', array( 'label' => __( 'Height', 'powerpack' ), 'type' => Controls_Manager::SLIDER, 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs ul.tabs.underline li.hover::before' => 'height: {{SIZE}}{{UNIT}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.underline li.hover::after' => 'height: {{SIZE}}{{UNIT}}', ), 'responsive' => true, 'condition' => array( 'woo-products-tab__active-tab-indicator' => 'underline', ), ) ); $this->add_control( 'woo-products-tab_indicator-width-hover', array( 'label' => __( 'Width', 'powerpack' ), 'type' => Controls_Manager::SLIDER, 'size_units' => array( 'px', '%', 'vw' ), 'range' => array( 'px' => array( 'min' => 0, 'max' => 100, ), '%' => array( 'min' => 0, 'max' => 100, ), 'vw' => array( 'min' => 0, 'max' => 100, ), ), 'default' => array( 'unit' => '%', 'size' => 100, ), 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs ul.tabs.underline li.hover::before' => 'width: {{SIZE}}{{UNIT}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.underline li.hover::after' => 'width: {{SIZE}}{{UNIT}}', ), 'condition' => array( 'woo-products-tab__active-tab-indicator' => 'underline', ), ) ); $this->add_control( 'woo-product-tabs__indicator-spacing-hover', array( 'label' => __( 'Spacing', 'powerpack' ), 'type' => Controls_Manager::SLIDER, 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs ul.tabs.icon.indicator-bottom li.hover::after' => 'bottom: -{{SIZE}}{{UNIT}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.icon.indicator-top li.hover::before' => 'top: -{{SIZE}}{{UNIT}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.underline li.hover::after' => 'bottom: -{{SIZE}}{{UNIT}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.underline li.hover::before' => 'top: -{{SIZE}}{{UNIT}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.icon.indicator-left li.hover::before' => 'left: -{{SIZE}}{{UNIT}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.icon.indicator-right li.hover::after' => 'right: -{{SIZE}}{{UNIT}}', ), ) ); $this->add_control( 'woo-products-tab_indicator-color-hover', array( 'label' => __( 'Color', 'powerpack' ), 'type' => Controls_Manager::COLOR, 'default' => '#808080', 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs ul.tabs.icon li.hover::before' => 'color: {{VALUE}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.icon li.hover::after' => 'color: {{VALUE}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.underline li.hover::before' => 'background-color: {{VALUE}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.underline li.hover::after' => 'background-color: {{VALUE}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.icon li.active::before' => 'color: {{VALUE}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.icon li.active::after' => 'color: {{VALUE}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.underline li.active::before' => 'background-color: {{VALUE}}', '{{WRAPPER}} .woocommerce-tabs ul.tabs.underline li.active::after' => 'background-color: {{VALUE}}', ), ) ); $this->end_controls_tab(); // End Hover styles $this->end_controls_tabs(); // End Indicator style tabs $this->end_controls_section(); } /** * Register Style Tab - Title Section controls. * * Registers Title Style section controls under the Style Tab. * * @access protected */ protected function register_title_style_controls() { $this->start_controls_section( 'woo-products-tab__title-style', array( 'label' => __( 'Title', 'powerpack' ), 'tab' => Controls_Manager::TAB_STYLE, ) ); $this->add_group_control( Group_Control_Typography::get_type(), array( 'name' => 'woo-products-tab__title-typography', 'selector' => ' {{WRAPPER}} .wc-tabs li a', ) ); $this->add_control( 'woo-product-tabs__icon-position', array( 'label' => __( 'Icon Position', 'powerpack' ), 'type' => Controls_Manager::SELECT, 'options' => array( 'column' => __( 'Top', 'powerpack' ), 'column-reverse' => __( 'Bottom', 'powerpack' ), 'row' => __( 'Left', 'powerpack' ), 'row-reverse' => __( 'Right', 'powerpack' ), ), 'default' => 'row', 'frontend_available' => true, ) ); $this->add_responsive_control( 'woo-product-tabs__icon-size', array( 'label' => __( 'Icon Size', 'powerpack' ), 'type' => Controls_Manager::SLIDER, 'default' => array( 'size' => 15, ), 'range' => array( 'px' => array( 'min' => 1, 'max' => 100, 'step' => 1, ), ), 'size_units' => array( 'px' ), 'selectors' => array( '{{WRAPPER}} .wc-tabs li a .pp-icon' => 'font-size: {{SIZE}}{{UNIT}}', ), ) ); $this->add_responsive_control( 'woo-product-tabs__icon-spacing', array( 'label' => __( 'Spacing', 'powerpack' ), 'type' => Controls_Manager::SLIDER, 'default' => array( 'size' => 10, ), 'range' => array( 'px' => array( 'min' => 1, 'max' => 100, 'step' => 1, ), ), 'size_units' => array( 'px' ), 'selectors' => array( '{{WRAPPER}} .wc-tabs.row li a .pp-icon' => 'margin-right: {{SIZE}}{{UNIT}}', '{{WRAPPER}} .wc-tabs.column li a .pp-icon' => 'margin-bottom: {{SIZE}}{{UNIT}}', '{{WRAPPER}} .wc-tabs.row-reverse li a .pp-icon' => 'margin-left: {{SIZE}}{{UNIT}}', '{{WRAPPER}} .wc-tabs.column-reverse li a .pp-icon' => 'margin-top: {{SIZE}}{{UNIT}}', ), ) ); $this->start_controls_tabs( 'woo-product-tabs__title-style' ); $this->start_controls_tab( 'tab_title-normal', array( 'label' => __( 'Normal', 'powerpack' ), ) ); $this->add_control( 'woo-products-tab__title-color', array( 'label' => __( 'Title Color', 'powerpack' ), 'type' => Controls_Manager::COLOR, 'default' => '#808080', 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs .tabs.wc-tabs li a' => 'color: {{VALUE}}', ), ) ); $this->add_control( 'woo-products-tab__title-bg-color', array( 'label' => __( 'Background Color', 'powerpack' ), 'type' => Controls_Manager::COLOR, 'default' => '#ffffff', 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs .wc-tabs li a' => 'background-color: {{VALUE}}', ), ) ); $this->add_control( 'woo-products-tab__icon-color', array( 'label' => __( 'Icon Color', 'powerpack' ), 'type' => Controls_Manager::COLOR, 'default' => '#808080', 'selectors' => array( '{{WRAPPER}} .wc-tabs li a .pp-icon' => 'color: {{VALUE}}', '{{WRAPPER}} .wc-tabs li a svg' => 'fill: {{VALUE}}', ), ) ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'woo-product-tabs__tab-box-shadow', 'label' => __( 'Box Shadow', 'powerpack' ), 'selector' => '{{WRAPPER}} .wc-tabs li a', ) ); $this->end_controls_tab(); // End Normal Tab $this->start_controls_tab( 'tab_title-active', array( 'label' => __( 'Hover / Active', 'powerpack' ), ) ); $this->add_control( 'woo-products-tab__title-color-active', array( 'label' => __( 'Title Color', 'powerpack' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs .tabs.wc-tabs li.active a' => 'color: {{VALUE}}', '{{WRAPPER}} .woocommerce-tabs .tabs.wc-tabs li a:hover' => 'color: {{VALUE}}', ), ) ); $this->add_control( 'woo-products-tab__title-bg-color-active', array( 'label' => __( 'Background Color', 'powerpack' ), 'type' => Controls_Manager::COLOR, 'default' => '#000000', 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs .wc-tabs li.active a' => 'background-color: {{VALUE}}', '{{WRAPPER}} .woocommerce-tabs .wc-tabs li a:hover' => 'background-color: {{VALUE}}', ), ) ); $this->add_control( 'woo-products-tab__icon-color-active', array( 'label' => __( 'Icon Color', 'powerpack' ), 'type' => Controls_Manager::COLOR, 'default' => '#000000', 'selectors' => array( '{{WRAPPER}} .wc-tabs li.active a .pp-icon' => 'color: {{VALUE}}', '{{WRAPPER}} .wc-tabs li.active a svg' => 'fill: {{VALUE}}', '{{WRAPPER}} .wc-tabs li a:hover .pp-icon' => 'color: {{VALUE}}', '{{WRAPPER}} .wc-tabs li a:hover svg' => 'fill: {{VALUE}}', ), ) ); $this->add_control( 'woo-products-tab__tab-border-color-active', array( 'label' => __( 'Border Color', 'powerpack' ), 'type' => Controls_Manager::COLOR, 'default' => '#000000', 'selectors' => array( '{{WRAPPER}} div.woocommerce-tabs ul.wc-tabs li.active a' => 'border-color: {{VALUE}}', '{{WRAPPER}} div.woocommerce-tabs ul.wc-tabs li.hover a:hover' => 'border-color: {{VALUE}}', ), ) ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'woo-product-tabs__tab-box-shadow-active', 'label' => __( 'Box Shadow', 'powerpack' ), 'selector' => '{{WRAPPER}} .wc-tabs li a:hover, {{WRAPPER}} .wc-tabs li a:active', ) ); $this->end_controls_tab(); // End Hover Tab $this->end_controls_tabs(); // End Controls Tab $this->add_group_control( Group_Control_Border::get_type(), array( 'name' => 'woo-product-tabs__tab-border', 'label' => esc_html__( 'Border', 'powerpack' ), 'selector' => '{{WRAPPER}} .woocommerce-tabs ul.tabs.wc-tabs li a', 'separator' => 'before', ) ); $this->add_control( 'woo-product-tabs__tab-border-radius', array( 'label' => __( 'Border Radius', 'powerpack' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%' ), 'default' => array( 'top' => 0, 'bottom' => 0, 'left' => 0, 'right' => 0, ), 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs ul.wc-tabs li a' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), ) ); $this->add_responsive_control( 'woo-products-tab__tab-padding', array( 'label' => __( 'Padding', 'powerpack' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', 'em', '%' ), 'default' => array( 'top' => 10, 'bottom' => 10, 'left' => 10, 'right' => 10, ), 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs .wc-tabs li a' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'separator' => 'before', ) ); $this->end_controls_section(); } /** * Register Style Tab - Tab Content Section controls. * * Registers Content Style section controls under the Style Tab. * * @access protected */ protected function register_content_style_controls() { $this->start_controls_section( 'woo-products-tab__content-style', array( 'label' => __( 'Content', 'powerpack' ), 'tab' => Controls_Manager::TAB_STYLE, ) ); $this->add_responsive_control( 'woo-product-tabs__content-align', array( 'label' => __( 'Alignment', 'powerpack' ), 'type' => Controls_Manager::CHOOSE, 'options' => array( 'start' => array( 'title' => __( 'Left', 'powerpack' ), 'icon' => 'fa fa-align-left', ), 'center' => array( 'title' => __( 'Center', 'powerpack' ), 'icon' => 'fa fa-align-center', ), 'end' => array( 'title' => __( 'Right', 'powerpack' ), 'icon' => 'fa fa-align-right', ), ), 'default' => 'center', 'separator' => 'after', 'selectors' => array( '{{WRAPPER}} div.pp-woo-product-tabs-wrapper div.woocommerce-tabs div.woocommerce-Tabs-panel.panel.wc-tab' => 'text-align: {{VALUE}};', ), ) ); $this->add_group_control( Group_Control_Background::get_type(), array( 'name' => 'woo-product-tabs__content-background', 'label' => __( 'Background', 'powerpack' ), 'types' => array( 'none', 'classic', 'gradient' ), 'selector' => '{{WRAPPER}} div.pp-woo-product-tabs-wrapper div.woocommerce-tabs div.woocommerce-Tabs-panel.panel.wc-tab', ) ); $this->add_control( 'woo-product-tabs__text-color', array( 'label' => __( 'Text Color', 'powerpack' ), 'type' => Controls_Manager::COLOR, 'default' => '#808080', 'separator' => 'before', 'selectors' => array( '{{WRAPPER}} div.pp-woo-product-tabs-wrapper div.woocommerce-tabs div.woocommerce-Tabs-panel.panel.wc-tab, {{WRAPPER}} div.pp-woo-product-tabs-wrapper div.woocommerce-tabs div.woocommerce-Tabs-panel.panel.wc-tab h2, {{WRAPPER}} div.pp-woo-product-tabs-wrapper div.woocommerce-tabs div.woocommerce-Tabs-panel.panel.wc-tab h3, {{WRAPPER}} div.pp-woo-product-tabs-wrapper div.woocommerce-tabs div.woocommerce-Tabs-panel.panel.wc-tab h4, {{WRAPPER}} div.pp-woo-product-tabs-wrapper div.woocommerce-tabs div.woocommerce-Tabs-panel.panel.wc-tab h5, {{WRAPPER}} div.pp-woo-product-tabs-wrapper div.woocommerce-tabs div.woocommerce-Tabs-panel.panel.wc-tab span, {{WRAPPER}} div.pp-woo-product-tabs-wrapper div.woocommerce-tabs div.woocommerce-Tabs-panel.panel.wc-tab p' => 'color: {{VALUE}}', ), ) ); $this->add_group_control( Group_Control_Typography::get_type(), array( 'name' => 'woo-product-tabs__content-typography', 'label' => __( 'Text Typography', 'powerpack' ), 'scheme' => Scheme_Typography::TYPOGRAPHY_4, 'selector' => '{{WRAPPER}} div.pp-woo-product-tabs-wrapper div.woocommerce-tabs div.woocommerce-Tabs-panel.panel.wc-tab', ) ); $this->add_group_control( Group_Control_Border::get_type(), array( 'name' => 'woo-product-tabs__tab-content-border', 'label' => esc_html__( 'Border', 'powerpack' ), 'selector' => '{{WRAPPER}} .woocommerce-tabs .woocommerce-Tabs-panel.panel.wc-tab', ) ); $this->add_control( 'woo-product-tabs__content-border-radius', array( 'label' => __( 'Border Radius', 'powerpack' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%' ), 'separator' => 'before', 'default' => array( 'top' => 0, 'bottom' => 0, 'left' => 0, 'right' => 0, ), 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs .woocommerce-Tabs-panel.panel.wc-tab' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), ) ); $this->add_responsive_control( 'woo-product-tabs__content-tab-padding', array( 'label' => __( 'Padding', 'powerpack' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', 'em', '%' ), 'default' => array( 'top' => 10, 'bottom' => 10, 'left' => 10, 'right' => 10, ), 'selectors' => array( '{{WRAPPER}} .woocommerce-tabs .woocommerce-Tabs-panel.panel.wc-tab' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), ) ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'woo-product-tabs__content-box-shadow', 'label' => __( 'Box Shadow', 'powerpack' ), 'selector' => '{{WRAPPER}} .woocommerce-tabs .panel.woocommerce-Tabs-panel', ) ); $this->end_controls_section(); } /** * Adds content to the custom tabs * * Add content to the custom tab based on the type of tab custom or saved_template * * @since 2.1.0 * * @param string $id Slug of the tab. * * @return void */ public function fill_content( $id ) { // Get settings for display $settings = $this->get_settings_for_display( 'product_tabs--repeater-section' ); // Process & Display the data foreach ( $settings as $i => $item ) { if ( $item['_id'] === $id && 'custom' === $item['custom_tab_type'] ) { echo $this->parse_text_editor( $item['custom_content'] ); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } elseif ( $item['_id'] === $id && 'saved_template' === $item['custom_tab_type'] ) { if ( ! empty( $item['template_content'] ) ) { echo \Elementor\Plugin::$instance->frontend->get_builder_content_for_display( $item['template_content'] ); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } else { echo esc_attr__( 'Please select a template.', 'powerpack' ); } } } } /** * Fetch the Tab's Title * * @since 2.1.0 * * @param string $tab slug of the tab. * * @return string $title Title of the Tab. */ protected function get_tab_title( $tab ) { global $product; $review_count = $product->get_review_count(); $title = ''; switch ( $tab ) { case 'description': $title = 'Description'; break; case 'additional_information': $title = 'Additional Information'; break; case 'reviews': $title = sprintf( __( 'Reviews (%d)', 'powerpack' ), $product->get_review_count() ); break; default: $title = 'Custom Tab'; break; } return $title; } /** * Fetch the Tab's from repeater field * * @since 2.1.0 * * @return array $new_tabs Array of Tabs. */ protected function get_tabs() { // Store Tabs $new_tabs = array(); // Get Settings $settings = $this->get_settings_for_display(); // Set a base priority to 10. // Priority will increment with loop in order so that tabs are arranged automatically. $priority = 10; // Get tabs from repeater fields foreach ( $settings['product_tabs--repeater-section'] as $index => $item ) { // print_r( $item ); $new_tabs[ $item['_id'] ] = array( 'title' => ! empty( $item['title'] ) ? $item['title'] : $this->get_tab_title( $item['name'] ), 'priority' => $priority, 'callback' => '', ); $priority += 10; } // Return the updated tab list return $new_tabs; } /** * Fetch the Tab's slug name * * @since 2.1.0 * * @param string $id slug of the id. * * @return string Slug of the Tab. */ protected function get_tab_name( $id ) { $settings = $this->get_settings_for_display(); // get settings of tabs foreach ( $settings['product_tabs--repeater-section'] as $index => $item ) { if ( $item['_id'] === $id ) { return $item['name']; } } } /** * Fetch the correct callback function for the tab * * @since 2.1.0 * * @param string $id slug of the id. * * @return string $callback Name of the callback function for the Tab. */ protected function get_callback_function( $id ) { $tab = $this->get_tab_name( $id ); // Callback function $callback = ''; switch ( $tab ) { case 'description': $callback = 'woocommerce_product_description_tab'; break; case 'additional_information': $callback = 'woocommerce_product_additional_information_tab'; break; case 'reviews': $callback = 'comments_template'; break; case 'custom': $callback = array( $this, 'fill_content' ); break; default: echo 'Please select a valid option.'; break; } return $callback; } /** * Add the tabs to the WooCommerce global $tabs variable. * * @since 2.1.0 * * @param array $tabs Array of tabs. * * @return array $tabs Modified array of tabs. */ public function add_tabs( $tabs ) { // Get the array of tabs from repeater field $new_tabs = $this->get_tabs(); if ( empty( $new_tabs ) ) { return; } // Reset $tabs $tabs = array(); // Add callback to each tab foreach ( $new_tabs as $id => $item ) { $new_tabs[ $id ]['callback'] = $this->get_callback_function( $id ); } // Add new tabs to the list $tabs = $new_tabs; return $tabs; } /** * Render the data on frontend. * * @since 2.1.0 * * @return void */ protected function render() { $settings = $this->get_settings_for_display(); do_action( 'pp_woo_builder_widget_before_render', $this ); global $product; $product = wc_get_product(); if ( Plugin::instance()->editor->is_edit_mode() ) { echo wp_kses_post( PP_Woo_Helper::get_instance()->default( $this->get_name(), $settings, $this ) ); } else { if ( empty( $product ) ) { return; } // setup_postdata( $product->get_id() ); add_filter( 'woocommerce_product_tabs', array( $this, 'add_tabs' ) ); echo "<div class='pp-woo-product-tabs-wrapper'>"; wc_get_template( 'single-product/tabs/tabs.php' ); // On render widget from Editor - trigger the init manually. if ( wp_doing_ajax() ) { ?> <script> jQuery( '.wc-tabs-wrapper, .woocommerce-tabs, #rating' ).trigger( 'init' ); </script> <?php } // Remove filter. remove_filter( 'woocommerce_product_tabs', array( $this, 'add_tabs' ) ); } do_action( 'pp_woo_builder_widget_after_render', $this ); } }