File "faq.php"
Full path: /home/kosmetik/public_html/wp-content/plugins/powerpack-elements/modules/faq/widgets/faq.php
File
size: 56.92 B
MIME-type: text/x-php
Charset: utf-8
Download Open Edit Advanced Editor Back
<?php
namespace PowerpackElements\Modules\Faq\Widgets;
use PowerpackElements\Base\Powerpack_Widget;
use PowerpackElements\Classes\PP_Posts_Helper;
use PowerpackElements\Classes\PP_Config;
use PowerpackElements\Classes\PP_Helper;
// Elementor Classes
use Elementor\Controls_Manager;
use Elementor\Control_Media;
use Elementor\Utils;
use Elementor\Icons_Manager;
use Elementor\Repeater;
use Elementor\Group_Control_Image_Size;
use Elementor\Group_Control_Background;
use Elementor\Group_Control_Box_Shadow;
use Elementor\Group_Control_Border;
use Elementor\Group_Control_Typography;
use Elementor\Core\Schemes\Typography as Scheme_Typography;
use Elementor\Core\Schemes\Color as Scheme_Color;
use Elementor\Core\Schemes;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* Advanced Accordion Widget
*/
class Faq extends Powerpack_Widget {
/**
* Retrieve advanced accordion widget name.
*
* @access public
*
* @return string Widget name.
*/
public function get_name() {
return parent::get_widget_name( 'Faq' );
}
/**
* Retrieve advanced accordion widget title.
*
* @access public
*
* @return string Widget title.
*/
public function get_title() {
return parent::get_widget_title( 'Faq' );
}
/**
* Retrieve advanced accordion widget icon.
*
* @access public
*
* @return string Widget icon.
*/
public function get_icon() {
return parent::get_widget_icon( 'Faq' );
}
/**
* Get widget keywords.
*
* Retrieve the list of keywords the widget belongs to.
*
* @access public
*
* @return array Widget keywords.
*/
public function get_keywords() {
return parent::get_widget_keywords( 'Faq' );
}
/**
* Retrieve the list of scripts the FAQ 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 [
'powerpack-frontend',
];
}
/**
* Register FAQ widget controls.
*
* Adds different input fields to allow the user to change and customize the widget settings.
*
* Remove this after Elementor v3.8.0
*
* @access protected
*/
protected function _register_controls() { // phpcs:ignore PSR2.Methods.MethodDeclaration.Underscore
$this->register_controls();
}
/**
* Register FAQ widget controls.
*
* Adds different input fields to allow the user to change and customize the widget settings.
*
* @since 2.0.3
* @access protected
*/
protected function register_controls() {
/* Content Tab */
$this->register_content_faqs_controls();
$this->register_content_query_controls();
$this->register_content_settings_controls();
$this->register_content_toggle_icon_controls();
$this->register_content_help_docs_controls();
/* Style Tab */
$this->register_style_faq_items_controls();
$this->register_style_questions_controls();
$this->register_style_answers_controls();
$this->register_style_toggle_icon_controls();
}
/*-----------------------------------------------------------------------------------*/
/* CONTENT TAB
/*-----------------------------------------------------------------------------------*/
/**
* Content Tab: FAQs
*/
protected function register_content_faqs_controls() {
$this->start_controls_section(
'section_accordion_faqs',
[
'label' => esc_html__( 'FAQs', 'powerpack' ),
]
);
$source_options = array(
'custom' => __( 'Custom', 'powerpack' ),
'posts' => __( 'Posts', 'powerpack' ),
);
if ( class_exists( 'acf' ) ) {
$source_options['acf'] = __( 'ACF Repeater Field', 'powerpack' );
}
$this->add_control(
'source',
[
'label' => __( 'Source', 'powerpack' ),
'type' => Controls_Manager::SELECT,
'options' => $source_options,
'default' => 'custom',
]
);
$this->add_control(
'source_divider',
[
'type' => Controls_Manager::DIVIDER,
]
);
$repeater = new Repeater();
$repeater->add_control(
'tab_title',
[
'label' => __( 'Question', 'powerpack' ),
'type' => Controls_Manager::TEXT,
'default' => __( 'Accordion Title', 'powerpack' ),
'dynamic' => [
'active' => true,
],
]
);
$repeater->add_control(
'question_icon',
[
'label' => __( 'Icon', 'powerpack' ),
'type' => Controls_Manager::ICONS,
'label_block' => true,
'fa4compatibility' => 'accordion_question_icon',
]
);
$repeater->add_control(
'faq_answer',
[
'label' => esc_html__( 'Answer', 'powerpack' ),
'type' => Controls_Manager::WYSIWYG,
'default' => esc_html__( 'Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.', 'powerpack' ),
'dynamic' => [ 'active' => true ],
]
);
$repeater->add_control(
'accordion_tab_default_active',
[
'label' => esc_html__( 'Active as Default', 'powerpack' ),
'type' => Controls_Manager::SWITCHER,
'default' => 'no',
'return_value' => 'yes',
]
);
$this->add_control(
'tabs',
[
'label' => esc_html__( 'Add FAQs', 'powerpack' ),
'type' => Controls_Manager::REPEATER,
'default' => [
[ 'tab_title' => esc_html__( 'FAQ Question 1', 'powerpack' ) ],
[ 'tab_title' => esc_html__( 'FAQ Question 2', 'powerpack' ) ],
[ 'tab_title' => esc_html__( 'FAQ Question 3', 'powerpack' ) ],
],
'fields' => $repeater->get_controls(),
'title_field' => '{{tab_title}}',
'condition' => [
'source' => 'custom',
],
]
);
$this->add_control(
'acf_repeater_name',
[
'label' => esc_html__( 'ACF Repeater Field Name', 'powerpack' ),
'type' => Controls_Manager::TEXT,
'label_block' => true,
'default' => '',
'condition' => [
'source' => 'acf',
],
]
);
$this->add_control(
'acf_repeater_question',
[
'label' => esc_html__( 'ACF Repeater Sub Field Name (Question)', 'powerpack' ),
'type' => Controls_Manager::TEXT,
'label_block' => true,
'default' => '',
'condition' => [
'source' => 'acf',
],
]
);
$this->add_control(
'acf_repeater_answer',
[
'label' => esc_html__( 'ACF Repeater Sub Field Name (Answer)', 'powerpack' ),
'type' => Controls_Manager::TEXT,
'label_block' => true,
'default' => '',
'condition' => [
'source' => 'acf',
],
]
);
$this->add_control(
'posts_per_page',
[
'label' => __( 'Posts Count', 'powerpack' ),
'type' => Controls_Manager::NUMBER,
'default' => 4,
'condition' => [
'source' => 'posts',
],
]
);
$this->add_control(
'posts_content_type',
[
'label' => __( 'Content Type', 'powerpack' ),
'type' => Controls_Manager::SELECT,
'default' => 'excerpt',
'label_block' => true,
'options' => [
'excerpt' => __( 'Excerpt', 'powerpack' ),
'full_content' => __( 'Full Content', 'powerpack' ),
],
'condition' => [
'source' => 'posts',
],
]
);
$this->add_control(
'preview_excerpt_length',
[
'label' => __( 'Excerpt Length', 'powerpack' ),
'type' => Controls_Manager::NUMBER,
'default' => 50,
'min' => 0,
'max' => 58,
'step' => 1,
'condition' => [
'source' => 'posts',
'posts_content_type' => 'excerpt',
],
]
);
$this->add_control(
'enable_schema',
[
'label' => esc_html__( 'Enable Schema', 'powerpack' ),
'type' => Controls_Manager::SWITCHER,
'default' => 'yes',
'return_value' => 'yes',
'separator' => 'before',
]
);
$this->add_control(
'default_active_tabs',
[
'label' => __( 'Default Active Tabs', 'powerpack' ),
'description' => __( 'Add comma separated list of tab numbers.', 'powerpack' ),
'type' => Controls_Manager::TEXT,
'default' => '',
'dynamic' => [
'active' => true,
],
'condition' => [
'source' => [ 'posts', 'acf' ],
],
]
);
$this->end_controls_section();
}
protected function register_content_query_controls() {
/**
* Content Tab: Query
*/
$this->start_controls_section(
'section_post_query',
[
'label' => __( 'Query', 'powerpack' ),
'condition' => [
'source' => 'posts',
],
]
);
$this->add_control(
'post_type',
[
'label' => __( 'Post Type', 'powerpack' ),
'type' => Controls_Manager::SELECT,
'options' => PP_Posts_Helper::get_post_types(),
'default' => 'post',
]
);
$post_types = PP_Posts_Helper::get_post_types();
foreach ( $post_types as $post_type_slug => $post_type_label ) {
$taxonomy = PP_Posts_Helper::get_post_taxonomies( $post_type_slug );
if ( ! empty( $taxonomy ) ) {
foreach ( $taxonomy as $index => $tax ) {
$terms = PP_Posts_Helper::get_tax_terms( $index );
$tax_terms = array();
if ( ! empty( $terms ) ) {
foreach ( $terms as $term_index => $term_obj ) {
$tax_terms[ $term_obj->term_id ] = $term_obj->name;
}
if ( 'post' === $post_type_slug ) {
if ( 'post_tag' === $index ) {
$tax_control_key = 'tags';
} elseif ( 'category' === $index ) {
$tax_control_key = 'categories';
} else {
$tax_control_key = $index . '_' . $post_type_slug;
}
} else {
$tax_control_key = $index . '_' . $post_type_slug;
}
// Taxonomy filter type
$this->add_control(
$index . '_' . $post_type_slug . '_filter_type',
[
/* translators: %s Label */
'label' => sprintf( __( '%s Filter Type', 'powerpack' ), $tax->label ),
'type' => Controls_Manager::SELECT,
'default' => 'IN',
'label_block' => true,
'options' => [
/* translators: %s label */
'IN' => sprintf( __( 'Include %s', 'powerpack' ), $tax->label ),
/* translators: %s label */
'NOT IN' => sprintf( __( 'Exclude %s', 'powerpack' ), $tax->label ),
],
'separator' => 'before',
'condition' => [
'post_type' => $post_type_slug,
],
]
);
$this->add_control(
$tax_control_key,
[
'label' => $tax->label,
'type' => 'pp-query',
'post_type' => $post_type_slug,
'options' => [],
'label_block' => true,
'multiple' => true,
'query_type' => 'terms',
'object_type' => $index,
'include_type' => true,
'condition' => [
'post_type' => $post_type_slug,
],
]
);
}
}
}
}
$this->add_control(
'author_filter_type',
[
'label' => __( 'Authors Filter Type', 'powerpack' ),
'type' => Controls_Manager::SELECT,
'default' => 'author__in',
'label_block' => true,
'separator' => 'before',
'options' => [
'author__in' => __( 'Include Authors', 'powerpack' ),
'author__not_in' => __( 'Exclude Authors', 'powerpack' ),
],
]
);
$this->add_control(
'authors',
[
'label' => __( 'Authors', 'powerpack' ),
'type' => 'pp-query',
'label_block' => true,
'multiple' => true,
'query_type' => 'authors',
'condition' => [
'post_type!' => 'related',
],
]
);
foreach ( $post_types as $post_type_slug => $post_type_label ) {
if ( 'post' === $post_type_slug ) {
$posts_control_key = 'exclude_posts';
} else {
$posts_control_key = $post_type_slug . '_filter';
}
$this->add_control(
$post_type_slug . '_filter_type',
[
'label' => sprintf( __( '%s Filter Type', 'powerpack' ), $post_type_label ),
'type' => Controls_Manager::SELECT,
'default' => 'post__not_in',
'label_block' => true,
'separator' => 'before',
'options' => [
'post__in' => sprintf( __( 'Include %s', 'powerpack' ), $post_type_label ),
'post__not_in' => sprintf( __( 'Exclude %s', 'powerpack' ), $post_type_label ),
],
'condition' => [
'post_type' => $post_type_slug,
],
]
);
$this->add_control(
$posts_control_key,
[
/* translators: %s Label */
'label' => $post_type_label,
'type' => 'pp-query',
'default' => '',
'multiple' => true,
'label_block' => true,
'query_type' => 'posts',
'object_type' => $post_type_slug,
'condition' => [
'post_type' => $post_type_slug,
],
]
);
}
$this->add_control(
'select_date',
[
'label' => __( 'Date', 'powerpack' ),
'type' => Controls_Manager::SELECT,
'options' => [
'anytime' => __( 'All', 'powerpack' ),
'today' => __( 'Past Day', 'powerpack' ),
'week' => __( 'Past Week', 'powerpack' ),
'month' => __( 'Past Month', 'powerpack' ),
'quarter' => __( 'Past Quarter', 'powerpack' ),
'year' => __( 'Past Year', 'powerpack' ),
'exact' => __( 'Custom', 'powerpack' ),
],
'default' => 'anytime',
'label_block' => false,
'multiple' => false,
'separator' => 'before',
]
);
$this->add_control(
'date_before',
[
'label' => __( 'Before', 'powerpack' ),
'description' => __( 'Setting a ‘Before’ date will show all the posts published until the chosen date (inclusive).', 'powerpack' ),
'type' => Controls_Manager::DATE_TIME,
'label_block' => false,
'multiple' => false,
'placeholder' => __( 'Choose', 'powerpack' ),
'condition' => [
'select_date' => 'exact',
],
]
);
$this->add_control(
'date_after',
[
'label' => __( 'After', 'powerpack' ),
'description' => __( 'Setting an ‘After’ date will show all the posts published since the chosen date (inclusive).', 'powerpack' ),
'type' => Controls_Manager::DATE_TIME,
'label_block' => false,
'multiple' => false,
'placeholder' => __( 'Choose', 'powerpack' ),
'condition' => [
'select_date' => 'exact',
],
]
);
$this->add_control(
'order',
[
'label' => __( 'Order', 'powerpack' ),
'type' => Controls_Manager::SELECT,
'options' => [
'DESC' => __( 'Descending', 'powerpack' ),
'ASC' => __( 'Ascending', 'powerpack' ),
],
'default' => 'DESC',
'separator' => 'before',
]
);
$this->add_control(
'orderby',
[
'label' => __( 'Order By', 'powerpack' ),
'type' => Controls_Manager::SELECT,
'options' => [
'date' => __( 'Date', 'powerpack' ),
'modified' => __( 'Last Modified Date', 'powerpack' ),
'rand' => __( 'Random', 'powerpack' ),
'comment_count' => __( 'Comment Count', 'powerpack' ),
'title' => __( 'Title', 'powerpack' ),
'ID' => __( 'Post ID', 'powerpack' ),
'author' => __( 'Post Author', 'powerpack' ),
],
'default' => 'date',
]
);
$this->add_control(
'sticky_posts',
[
'label' => __( 'Sticky Posts', 'powerpack' ),
'type' => Controls_Manager::SWITCHER,
'default' => '',
'label_on' => __( 'Yes', 'powerpack' ),
'label_off' => __( 'No', 'powerpack' ),
'return_value' => 'yes',
'separator' => 'before',
]
);
$this->add_control(
'all_sticky_posts',
[
'label' => __( 'Show Only Sticky Posts', 'powerpack' ),
'type' => Controls_Manager::SWITCHER,
'default' => '',
'label_on' => __( 'Yes', 'powerpack' ),
'label_off' => __( 'No', 'powerpack' ),
'return_value' => 'yes',
'condition' => [
'sticky_posts' => 'yes',
],
]
);
$this->add_control(
'offset',
[
'label' => __( 'Offset', 'powerpack' ),
'description' => __( 'Use this setting to skip this number of initial posts', 'powerpack' ),
'type' => Controls_Manager::NUMBER,
'default' => '',
'separator' => 'before',
]
);
$this->end_controls_section();
}
protected function register_content_settings_controls() {
/**
* Content Tab: Settings
*/
$this->start_controls_section(
'section_accordion_settings',
[
'label' => esc_html__( 'Settings', 'powerpack' ),
]
);
$this->add_control(
'faq_layout',
[
'label' => esc_html__( 'Layout', 'powerpack' ),
'type' => Controls_Manager::SELECT,
'default' => 'accordion',
'label_block' => false,
'options' => [
'accordion' => esc_html__( 'Accordion', 'powerpack' ),
'grid' => esc_html__( 'Grid', 'powerpack' ),
],
'frontend_available' => true,
]
);
$this->add_control(
'accordion_type',
[
'label' => esc_html__( 'Accordion Type', 'powerpack' ),
'type' => Controls_Manager::SELECT,
'default' => 'accordion',
'label_block' => false,
'options' => [
'accordion' => esc_html__( 'Accordion', 'powerpack' ),
'toggle' => esc_html__( 'Toggle', 'powerpack' ),
],
'frontend_available' => true,
'condition' => [
'faq_layout' => 'accordion',
],
]
);
$this->add_control(
'toggle_speed',
[
'label' => esc_html__( 'Toggle Speed (ms)', 'powerpack' ),
'type' => Controls_Manager::NUMBER,
'label_block' => false,
'default' => 300,
'frontend_available' => true,
'condition' => [
'faq_layout' => 'accordion',
],
]
);
$this->add_responsive_control(
'columns',
[
'label' => __( 'Columns', 'powerpack' ),
'type' => Controls_Manager::SELECT,
'default' => '2',
'tablet_default' => '2',
'mobile_default' => '1',
'options' => [
'1' => '1',
'2' => '2',
'3' => '3',
'4' => '4',
'5' => '5',
'6' => '6',
],
'prefix_class' => 'elementor-grid%s-',
'frontend_available' => true,
'condition' => [
'faq_layout' => 'grid',
],
]
);
$this->add_control(
'question_html_tag',
[
'label' => __( 'Question HTML Tag', 'powerpack' ),
'type' => Controls_Manager::SELECT,
'default' => 'div',
'options' => [
'h1' => __( 'H1', 'powerpack' ),
'h2' => __( 'H2', 'powerpack' ),
'h3' => __( 'H3', 'powerpack' ),
'h4' => __( 'H4', 'powerpack' ),
'h5' => __( 'H5', 'powerpack' ),
'h6' => __( 'H6', 'powerpack' ),
'div' => __( 'div', 'powerpack' ),
'span' => __( 'span', 'powerpack' ),
'p' => __( 'p', 'powerpack' ),
],
]
);
$this->end_controls_section();
}
protected function register_content_toggle_icon_controls() {
/**
* Content Tab: Toggle Icon
*/
$this->start_controls_section(
'section_accordion_toggle_icon',
[
'label' => esc_html__( 'Toggle Icon', 'powerpack' ),
'condition' => [
'faq_layout' => 'accordion',
],
]
);
$this->add_control(
'toggle_icon_show',
[
'label' => esc_html__( 'Toggle Icon', 'powerpack' ),
'type' => Controls_Manager::SWITCHER,
'default' => 'yes',
'label_on' => __( 'Show', 'powerpack' ),
'label_off' => __( 'Hide', 'powerpack' ),
'return_value' => 'yes',
'condition' => [
'faq_layout' => 'accordion',
],
]
);
$this->add_control(
'select_toggle_icon',
[
'label' => __( 'Close Icon', 'powerpack' ),
'type' => Controls_Manager::ICONS,
'label_block' => false,
'skin' => 'inline',
'fa4compatibility' => 'toggle_icon_normal',
'default' => [
'value' => 'fas fa-plus',
'library' => 'fa-solid',
],
'condition' => [
'faq_layout' => 'accordion',
'toggle_icon_show' => 'yes',
],
]
);
$this->add_control(
'select_toggle_icon_active',
[
'label' => __( 'Open Icon', 'powerpack' ),
'type' => Controls_Manager::ICONS,
'label_block' => false,
'skin' => 'inline',
'fa4compatibility' => 'toggle_icon_active',
'default' => [
'value' => 'fas fa-minus',
'library' => 'fa-solid',
],
'condition' => [
'faq_layout' => 'accordion',
'toggle_icon_show' => 'yes',
],
]
);
$this->end_controls_section();
}
protected function register_content_help_docs_controls() {
$help_docs = PP_Config::get_widget_help_links( 'Faq' );
if ( ! empty( $help_docs ) ) {
/**
* Content Tab: Help Docs
*
* @since 1.4.8
* @access protected
*/
$this->start_controls_section(
'section_help_docs',
[
'label' => __( 'Help Docs', 'powerpack' ),
]
);
$hd_counter = 1;
foreach ( $help_docs as $hd_title => $hd_link ) {
$this->add_control(
'help_doc_' . $hd_counter,
[
'type' => Controls_Manager::RAW_HTML,
'raw' => sprintf( '%1$s ' . $hd_title . ' %2$s', '<a href="' . $hd_link . '" target="_blank" rel="noopener">', '</a>' ),
'content_classes' => 'pp-editor-doc-links',
]
);
$hd_counter++;
}
$this->end_controls_section();
}
}
protected function register_style_faq_items_controls() {
/**
* Style Tab: Items
*/
$this->start_controls_section(
'section_faq_items_style',
[
'label' => esc_html__( 'Items', 'powerpack' ),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_responsive_control(
'faqs_items_horizontal_spacing',
[
'label' => __( 'Column Spacing', 'powerpack' ),
'type' => Controls_Manager::SLIDER,
'range' => [
'px' => [
'min' => 0,
'max' => 100,
],
],
'default' => [
'size' => 10,
],
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-grid-item-wrap' => 'padding-left: calc( {{SIZE}}{{UNIT}}/2 ); padding-right: calc( {{SIZE}}{{UNIT}}/2 );',
'{{WRAPPER}} .pp-faqs' => 'margin-left: calc( -{{SIZE}}{{UNIT}}/2 ); margin-right: calc( -{{SIZE}}{{UNIT}}/2 );',
],
'condition' => [
'faq_layout' => 'grid',
],
]
);
$this->add_responsive_control(
'faqs_items_bottom_spacing',
[
'label' => __( 'Bottom Spacing', 'powerpack' ),
'type' => Controls_Manager::SLIDER,
'range' => [
'px' => [
'min' => 0,
'max' => 200,
],
],
'default' => [
'size' => 10,
],
'selectors' => [
'{{WRAPPER}} .pp-faq-item' => 'margin-bottom: {{SIZE}}{{UNIT}};',
],
]
);
$this->start_controls_tabs( 'faq_tabs_style' );
$this->start_controls_tab(
'faq_tab_normal',
[
'label' => __( 'Normal', 'powerpack' ),
]
);
$this->add_control(
'faq_items_border_border',
[
'label' => esc_html__( 'Border Type', 'powerpack' ),
'type' => Controls_Manager::SELECT,
'default' => 'solid',
'options' => [
'' => __( 'None', 'powerpack' ),
'solid' => __( 'Solid', 'powerpack' ),
'double' => __( 'Double', 'powerpack' ),
'dotted' => __( 'Dotted', 'powerpack' ),
],
'selectors' => [
'{{WRAPPER}} .pp-faq-item' => 'border-style: {{VALUE}};',
],
]
);
$this->add_responsive_control(
'faq_items_border_width',
[
'label' => esc_html__( 'Border Width', 'powerpack' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px' ],
'default' => [
'top' => 1,
'right' => 1,
'bottom' => 1,
'left' => 1,
'isLinked' => true,
],
'selectors' => [
'{{WRAPPER}} .pp-faq-item' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
'condition' => [
'faq_items_border_border!' => '',
],
]
);
$this->add_control(
'faq_items_border_color',
[
'label' => esc_html__( 'Border Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'scheme' => [
'type' => Schemes\Color::get_type(),
'value' => Schemes\Color::COLOR_3,
],
'default' => '#d4d4d4',
'selectors' => [
'{{WRAPPER}} .pp-faq-item' => 'border-color: {{VALUE}};',
],
'condition' => [
'faq_items_border_border!' => '',
],
]
);
$this->add_responsive_control(
'faq_items_border_radius',
[
'label' => esc_html__( 'Border Radius', 'powerpack' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', 'em', '%' ],
'selectors' => [
'{{WRAPPER}} .pp-faq-item' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->add_group_control(
Group_Control_Box_Shadow::get_type(),
[
'name' => 'faq_items_box_shadow',
'selector' => '{{WRAPPER}} .pp-faq-item',
]
);
$this->end_controls_tab();
$this->start_controls_tab(
'faq_tab_hover',
[
'label' => __( 'Hover', 'powerpack' ),
]
);
$this->add_control(
'faq_items_border_color_hover',
[
'label' => esc_html__( 'Border Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .pp-faq-item:hover' => 'border-color: {{VALUE}};',
],
'condition' => [
'faq_items_border_border!' => '',
],
]
);
$this->add_group_control(
Group_Control_Box_Shadow::get_type(),
[
'name' => 'faq_items_box_shadow_hover',
'selector' => '{{WRAPPER}} .pp-faq-item:hover',
]
);
$this->end_controls_tab();
$this->start_controls_tab(
'faq_tab_active',
[
'label' => __( 'Active', 'powerpack' ),
]
);
$this->add_control(
'faq_items_border_color_active',
[
'label' => esc_html__( 'Border Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .pp-faq-item.pp-accordion-item-active' => 'border-color: {{VALUE}};',
],
'condition' => [
'faq_items_border_border!' => '',
],
]
);
$this->add_group_control(
Group_Control_Box_Shadow::get_type(),
[
'name' => 'faq_items_box_shadow_active',
'selector' => '{{WRAPPER}} .pp-faq-item.pp-accordion-item-active',
]
);
$this->end_controls_tab();
$this->end_controls_tabs();
$this->add_responsive_control(
'faq_items__padding',
[
'label' => esc_html__( 'Padding', 'powerpack' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', 'em', '%' ],
'separator' => 'before',
'selectors' => [
'{{WRAPPER}} .pp-faq-item' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->end_controls_section();
}
protected function register_style_questions_controls() {
/**
* Style Tab: Questions
*/
$this->start_controls_section(
'section_questions_style',
[
'label' => esc_html__( 'Questions', 'powerpack' ),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_responsive_control(
'faqs_question_bottom_spacing',
[
'label' => __( 'Bottom Spacing', 'powerpack' ),
'type' => Controls_Manager::SLIDER,
'range' => [
'px' => [
'min' => 0,
'max' => 200,
],
],
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-faq-question' => 'margin-bottom: {{SIZE}}{{UNIT}};',
],
]
);
$this->start_controls_tabs( 'faq_question_tabs_style' );
$this->start_controls_tab(
'faq_question_tab_normal',
[
'label' => __( 'Normal', 'powerpack' ),
]
);
$this->add_control(
'question_text_color',
[
'label' => esc_html__( 'Text Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'scheme' => [
'type' => Schemes\Color::get_type(),
'value' => Schemes\Color::COLOR_1,
],
'default' => '',
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-faq-question' => 'color: {{VALUE}};',
'{{WRAPPER}} .pp-faqs .pp-faq-question svg' => 'fill: {{VALUE}};',
],
]
);
$this->add_control(
'question_bg_color',
[
'label' => esc_html__( 'Background Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-faq-question' => 'background-color: {{VALUE}};',
],
]
);
$this->add_group_control(
Group_Control_Typography::get_type(),
[
'name' => 'question_typography',
'selector' => '{{WRAPPER}} .pp-faqs .pp-faq-question',
]
);
$this->add_group_control(
Group_Control_Border::get_type(),
[
'name' => 'question_border',
'label' => esc_html__( 'Border', 'powerpack' ),
'selector' => '{{WRAPPER}} .pp-faqs .pp-faq-question',
]
);
$this->add_responsive_control(
'faq_question_border_radius',
[
'label' => esc_html__( 'Border Radius', 'powerpack' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', 'em', '%' ],
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-faq-question' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->end_controls_tab();
$this->start_controls_tab(
'faq_question_tab_hover',
[
'label' => __( 'Hover', 'powerpack' ),
]
);
$this->add_control(
'question_text_color_hover',
[
'label' => esc_html__( 'Text Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-faq-question:hover' => 'color: {{VALUE}};',
'{{WRAPPER}} .pp-faqs .pp-faq-question:hover svg' => 'fill: {{VALUE}};',
],
]
);
$this->add_control(
'question_bg_color_hover',
[
'label' => esc_html__( 'Background Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-faq-question:hover' => 'background-color: {{VALUE}};',
],
]
);
$this->add_control(
'question_border_color_hover',
[
'label' => esc_html__( 'Border Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-faq-question:hover' => 'border-color: {{VALUE}};',
],
]
);
$this->end_controls_tab();
$this->start_controls_tab(
'faq_question_tab_active',
[
'label' => __( 'Active', 'powerpack' ),
'condition' => [
'faq_layout' => 'accordion',
],
]
);
$this->add_control(
'question_text_color_active',
[
'label' => esc_html__( 'Text Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'scheme' => [
'type' => Schemes\Color::get_type(),
'value' => Schemes\Color::COLOR_4,
],
'default' => '',
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-faq-question.pp-accordion-tab-active' => 'color: {{VALUE}};',
'{{WRAPPER}} .pp-faqs .pp-faq-question.pp-accordion-tab-active svg' => 'fill: {{VALUE}};',
],
'condition' => [
'faq_layout' => 'accordion',
],
]
);
$this->add_control(
'question_bg_color_active',
[
'label' => esc_html__( 'Background Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-faq-question.pp-accordion-tab-active' => 'background-color: {{VALUE}};',
],
'condition' => [
'faq_layout' => 'accordion',
],
]
);
$this->add_control(
'question_border_color_active',
[
'label' => esc_html__( 'Border Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-faq-question.pp-accordion-tab-active' => 'border-color: {{VALUE}};',
],
'condition' => [
'faq_layout' => 'accordion',
],
]
);
$this->end_controls_tab();
$this->end_controls_tabs();
$this->add_responsive_control(
'question_padding',
[
'label' => esc_html__( 'Padding', 'powerpack' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', 'em', '%' ],
'separator' => 'before',
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-faq-question' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->add_control(
'tab_icon_heading',
[
'label' => __( 'Icon', 'powerpack' ),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
]
);
$this->add_responsive_control(
'tab_icon_size',
[
'label' => __( 'Icon Size', 'powerpack' ),
'type' => Controls_Manager::SLIDER,
'default' => [
'size' => 16,
'unit' => 'px',
],
'size_units' => [ 'px' ],
'range' => [
'px' => [
'min' => 0,
'max' => 100,
'step' => 1,
],
],
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-faq-question .pp-accordion-tab-icon' => 'font-size: {{SIZE}}{{UNIT}};',
],
]
);
$this->add_responsive_control(
'tab_icon_spacing',
[
'label' => __( 'Icon Spacing', 'powerpack' ),
'type' => Controls_Manager::SLIDER,
'default' => [
'size' => 10,
'unit' => 'px',
],
'size_units' => [ 'px' ],
'range' => [
'px' => [
'min' => 0,
'max' => 100,
'step' => 1,
],
],
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-faq-question .pp-accordion-tab-icon' => 'margin-right: {{SIZE}}{{UNIT}};',
],
]
);
$this->end_controls_section();
}
protected function register_style_answers_controls() {
/**
* Style Tab: Answers
*/
$this->start_controls_section(
'section_answers_style',
[
'label' => esc_html__( 'Answers', 'powerpack' ),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->start_controls_tabs( 'faq_tabs_answers_style' );
$this->start_controls_tab(
'faq_tab_answers_normal',
[
'label' => __( 'Normal', 'powerpack' ),
]
);
$this->add_control(
'answer_text_color',
[
'label' => esc_html__( 'Text Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '#333',
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-faq-answer' => 'color: {{VALUE}};',
],
]
);
$this->add_control(
'answer_bg_color',
[
'label' => esc_html__( 'Background Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-faq-answer' => 'background-color: {{VALUE}};',
],
]
);
$this->add_group_control(
Group_Control_Typography::get_type(),
[
'name' => 'answer_typography',
'selector' => '{{WRAPPER}} .pp-faqs .pp-faq-answer',
]
);
$this->add_responsive_control(
'faq_answer_border_radius',
[
'label' => esc_html__( 'Border Radius', 'powerpack' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', 'em', '%' ],
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-faq-answer' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->end_controls_tab();
$this->start_controls_tab(
'faq_tab_answers_hover',
[
'label' => __( 'Hover', 'powerpack' ),
]
);
$this->add_control(
'answer_text_color_hover',
[
'label' => esc_html__( 'Text Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-accordion-item:hover .pp-faq-answer' => 'color: {{VALUE}};',
],
]
);
$this->add_control(
'answer_bg_color_hover',
[
'label' => esc_html__( 'Background Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-accordion-item:hover .pp-faq-answer' => 'background-color: {{VALUE}};',
],
]
);
$this->end_controls_tab();
$this->start_controls_tab(
'faq_tab_answers_active',
[
'label' => __( 'Active', 'powerpack' ),
]
);
$this->add_control(
'answer_text_color_active',
[
'label' => esc_html__( 'Text Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-accordion-item-active .pp-faq-answer' => 'color: {{VALUE}};',
],
]
);
$this->add_control(
'answer_bg_color_active',
[
'label' => esc_html__( 'Background Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-accordion-item-active .pp-faq-answer' => 'background-color: {{VALUE}};',
],
]
);
$this->end_controls_tab();
$this->end_controls_tabs();
$this->add_responsive_control(
'answer_padding',
[
'label' => esc_html__( 'Padding', 'powerpack' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', 'em', '%' ],
'separator' => 'before',
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-faq-answer' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->end_controls_section();
}
protected function register_style_toggle_icon_controls() {
/**
* Style tab: Toggle Icon
*/
$this->start_controls_section(
'section_toggle_icon_style',
[
'label' => esc_html__( 'Toggle icon', 'powerpack' ),
'tab' => Controls_Manager::TAB_STYLE,
'condition' => [
'faq_layout' => 'accordion',
'toggle_icon_show' => 'yes',
],
]
);
$this->add_control(
'toggle_icon_align',
[
'label' => __( 'Alignment', 'powerpack' ),
'type' => Controls_Manager::CHOOSE,
'options' => [
'left' => [
'title' => __( 'Start', 'powerpack' ),
'icon' => 'eicon-h-align-left',
],
'right' => [
'title' => __( 'End', 'powerpack' ),
'icon' => 'eicon-h-align-right',
],
],
'default' => is_rtl() ? 'left' : 'right',
'toggle' => false,
]
);
$this->add_control(
'toggle_icon_color',
[
'label' => esc_html__( 'Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'scheme' => [
'type' => Schemes\Color::get_type(),
'value' => Schemes\Color::COLOR_1,
],
'default' => '',
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-faq-question .pp-accordion-toggle-icon' => 'color: {{VALUE}};',
'{{WRAPPER}} .pp-faqs .pp-faq-question .pp-accordion-toggle-icon svg' => 'fill: {{VALUE}};',
],
'condition' => [
'faq_layout' => 'accordion',
'toggle_icon_show' => 'yes',
],
]
);
$this->add_control(
'toggle_icon_hover_color',
[
'label' => esc_html__( 'Hover Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'scheme' => [
'type' => Schemes\Color::get_type(),
'value' => Schemes\Color::COLOR_4,
],
'default' => '',
'selectors' => [
'{{WRAPPER}} .pp-advanced-accordion .pp-accordion-item:hover .pp-accordion-tab-title .pp-accordion-toggle-icon' => 'color: {{VALUE}};',
'{{WRAPPER}} .pp-advanced-accordion .pp-accordion-item:hover .pp-accordion-tab-title .pp-accordion-toggle-icon svg' => 'fill: {{VALUE}};',
],
'condition' => [
'faq_layout' => 'accordion',
'toggle_icon_show' => 'yes',
],
]
);
$this->add_control(
'toggle_icon_active_color',
[
'label' => esc_html__( 'Active Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'scheme' => [
'type' => Schemes\Color::get_type(),
'value' => Schemes\Color::COLOR_4,
],
'default' => '',
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-faq-question.pp-accordion-tab-active .pp-accordion-toggle-icon' => 'color: {{VALUE}};',
'{{WRAPPER}} .pp-faqs .pp-faq-question.pp-accordion-tab-active .pp-accordion-toggle-icon svg' => 'fill: {{VALUE}};',
],
'condition' => [
'faq_layout' => 'accordion',
'toggle_icon_show' => 'yes',
],
]
);
$this->add_responsive_control(
'toggle_icon_size',
[
'label' => __( 'Size', 'powerpack' ),
'type' => Controls_Manager::SLIDER,
'default' => [
'size' => 16,
'unit' => 'px',
],
'size_units' => [ 'px' ],
'range' => [
'px' => [
'min' => 0,
'max' => 100,
'step' => 1,
],
],
'selectors' => [
'{{WRAPPER}} .pp-faqs .pp-faq-question .pp-accordion-toggle-icon' => 'font-size: {{SIZE}}{{UNIT}};',
],
'condition' => [
'faq_layout' => 'accordion',
'toggle_icon_show' => 'yes',
],
]
);
$this->add_responsive_control(
'toggle_icon_spacing',
[
'label' => __( 'Spacing', 'powerpack' ),
'type' => Controls_Manager::SLIDER,
'range' => [
'px' => [
'min' => 0,
'max' => 100,
],
],
'selectors' => [
'{{WRAPPER}} .pp-toggle-icon-align-left .pp-accordion-toggle-icon' => 'margin-right: {{SIZE}}{{UNIT}};',
'{{WRAPPER}} .pp-toggle-icon-align-right .pp-accordion-toggle-icon' => 'margin-left: {{SIZE}}{{UNIT}};',
],
]
);
$this->end_controls_section();
}
/**
* Get post query arguments.
*
* @access protected
*/
protected function get_posts_query_arguments() {
$settings = $this->get_settings();
$posts_count = absint( $settings['posts_per_page'] );
// Query Arguments
$query_args = array(
'post_status' => array( 'publish' ),
'post_type' => $settings['post_type'],
'orderby' => $settings['orderby'],
'order' => $settings['order'],
'offset' => $settings['offset'],
'ignore_sticky_posts' => ( 'yes' === $settings['sticky_posts'] ) ? 0 : 1,
'showposts' => $posts_count,
);
// Author Filter
if ( ! empty( $settings['authors'] ) ) {
$query_args[ $settings['author_filter_type'] ] = $settings['authors'];
}
// Posts Filter
$post_type = $settings['post_type'];
if ( 'post' === $post_type ) {
$posts_control_key = 'exclude_posts';
} else {
$posts_control_key = $post_type . '_filter';
}
if ( ! empty( $settings[ $posts_control_key ] ) ) {
$query_args[ $settings[ $post_type . '_filter_type' ] ] = $settings[ $posts_control_key ];
}
// Taxonomy Filter
$taxonomy = PP_Posts_Helper::get_post_taxonomies( $post_type );
if ( ! empty( $taxonomy ) && ! is_wp_error( $taxonomy ) ) {
foreach ( $taxonomy as $index => $tax ) {
if ( 'post' === $post_type ) {
if ( 'post_tag' === $index ) {
$tax_control_key = 'tags';
} elseif ( 'category' === $index ) {
$tax_control_key = 'categories';
} else {
$tax_control_key = $index . '_' . $post_type;
}
} else {
$tax_control_key = $index . '_' . $post_type;
}
if ( ! empty( $settings[ $tax_control_key ] ) ) {
$operator = $settings[ $index . '_' . $post_type . '_filter_type' ];
$query_args['tax_query'][] = [
'taxonomy' => $index,
'field' => 'term_id',
'terms' => $settings[ $tax_control_key ],
'operator' => $operator,
];
}
}
}
if ( 'anytime' !== $settings['select_date'] ) {
$select_date = $settings['select_date'];
if ( ! empty( $select_date ) ) {
$date_query = [];
if ( 'today' === $select_date ) {
$date_query['after'] = '-1 day';
} elseif ( 'week' === $select_date ) {
$date_query['after'] = '-1 week';
} elseif ( 'month' === $select_date ) {
$date_query['after'] = '-1 month';
} elseif ( 'quarter' === $select_date ) {
$date_query['after'] = '-3 month';
} elseif ( 'year' === $select_date ) {
$date_query['after'] = '-1 year';
} elseif ( 'exact' === $select_date ) {
$after_date = $settings['date_after'];
if ( ! empty( $after_date ) ) {
$date_query['after'] = $after_date;
}
$before_date = $settings['date_before'];
if ( ! empty( $before_date ) ) {
$date_query['before'] = $before_date;
}
$date_query['inclusive'] = true;
}
$query_args['date_query'] = $date_query;
}
}
// Sticky Posts Filter
if ( 'yes' === $settings['sticky_posts'] && 'yes' === $settings['all_sticky_posts'] ) {
$post__in = get_option( 'sticky_posts' );
$query_args['post__in'] = $post__in;
}
return apply_filters( 'ppe_faqs_query_args', $query_args, $settings );
}
/**
* Get custom post excerpt.
*
* @access protected
*/
protected function get_faq_post_answer( $limit = '' ) {
$settings = $this->get_settings();
if ( 'excerpt' === $settings['posts_content_type'] ) {
$content = explode( ' ', get_the_excerpt(), $limit );
if ( count( $content ) >= $limit ) {
array_pop( $content );
$content = implode( ' ', $content ) . '...';
} else {
$content = implode( ' ', $content );
}
$content = preg_replace( '`[[^]]*]`', '', $content );
} else {
$content = get_the_content();
}
return $content;
}
/**
* Render posts output on the frontend.
*
* Written in PHP and used to generate the final HTML.
*
* @access protected
*/
protected function get_faqs_posts() {
$settings = $this->get_settings();
$i = 1;
$faqs = array();
$active_tabs = array();
// Query Arguments
$args = $this->get_posts_query_arguments();
$posts_query = new \WP_Query( $args );
if ( $settings['default_active_tabs'] ) {
$active_tabs = PP_Helper::comma_list_to_array( $settings['default_active_tabs'] );
}
if ( $posts_query->have_posts() ) :
while ( $posts_query->have_posts() ) :
$posts_query->the_post();
$limit = $settings['preview_excerpt_length'];
$faqs[ $i ]['question_icon'] = '';
$faqs[ $i ]['question'] = get_the_title();
$faqs[ $i ]['answer'] = $this->get_faq_post_answer( $limit );
$faqs[ $i ]['active_tab'] = '';
if ( in_array( $i, $active_tabs, true ) ) {
$faqs[ $i ]['active_tab'] = 'yes';
}
$i++;
endwhile;
endif;
wp_reset_postdata();
return $faqs;
}
protected function get_faqs_custom() {
global $wp_embed;
$settings = $this->get_settings_for_display();
$faqs = array();
foreach ( $settings['tabs'] as $index => $item ) {
$faqs[ $index ]['question_icon'] = $item['question_icon'];
$faqs[ $index ]['question'] = $item['tab_title'];
$faqs[ $index ]['answer'] = wpautop( $wp_embed->autoembed( $item['faq_answer'] ) );
$faqs[ $index ]['active_tab'] = $item['accordion_tab_default_active'];
}
return $faqs;
}
protected function get_faqs_acf( $post_id = false ) {
$settings = $this->get_settings_for_display();
if ( ! isset( $settings['acf_repeater_name'] ) || empty( $settings['acf_repeater_name'] ) ) {
return;
}
$i = 1;
$faqs = array();
$active_tabs = array();
if ( class_exists( 'acf' ) ) {
if ( is_tax() ) {
$post_id = get_queried_object();
}
$post_id = apply_filters( 'pp_faq_acf_post_id', $post_id );
if ( $settings['default_active_tabs'] ) {
$active_tabs = PP_Helper::comma_list_to_array( $settings['default_active_tabs'] );
}
$repeater_name = $settings['acf_repeater_name'];
$question_name = $settings['acf_repeater_question'];
$answer_name = $settings['acf_repeater_answer'];
$repeater_rows = get_field( $repeater_name, $post_id );
if ( ! $repeater_rows ) {
return;
}
foreach ( $repeater_rows as $index => $item ) {
$faqs[ $index ]['question_icon'] = '';
$faqs[ $index ]['question'] = isset( $item[ $question_name ] ) ? $item[ $question_name ] : '';
$faqs[ $index ]['answer'] = isset( $item[ $answer_name ] ) ? $item[ $answer_name ] : '';
$faqs[ $index ]['active_tab'] = '';
if ( in_array( $i, $active_tabs, true ) ) {
$faqs[ $index ]['active_tab'] = 'yes';
}
$i++;
}
}
return $faqs;
}
public function pp_get_settings() {
return $this->get_settings_for_display();
}
public function get_faq_items() {
$settings = $this->pp_get_settings();
if ( 'posts' === $settings['source'] ) {
return $this->get_faqs_posts();
}
if ( 'custom' === $settings['source'] ) {
return $this->get_faqs_custom();
}
if ( 'acf' === $settings['source'] ) {
return $this->get_faqs_acf();
}
}
protected function render_faqs() {
$settings = $this->get_settings_for_display();
$id_int = substr( $this->get_id_int(), 0, 3 );
$faqs = $this->get_faq_items();
if ( empty( $faqs ) ) {
return;
}
foreach ( $faqs as $index => $tab ) :
$tab_count = $index + 1;
$question_setting_key = $this->get_repeater_setting_key( 'tab_title', 'tabs', $index );
$tab_content_setting_key = $this->get_repeater_setting_key( 'faq_answer', 'tabs', $index );
$item_key = $this->get_repeater_setting_key( 'faq_item', 'tabs', $index );
$item_wrap_key = $this->get_repeater_setting_key( 'faq_item_wrap', 'tabs', $index );
$question_class = [ 'pp-faq-question' ];
$faq_answer_class = [ 'pp-faq-answer' ];
if ( 'accordion' === $settings['faq_layout'] ) {
$question_class[] = 'pp-accordion-tab-title';
$faq_answer_class[] = 'pp-accordion-tab-content';
if ( 'yes' === $tab['active_tab'] ) {
$question_class[] = 'pp-accordion-tab-active-default';
$faq_answer_class[] = 'pp-accordion-tab-active-default';
}
}
$this->add_render_attribute( [
$item_wrap_key => [
'class' => 'pp-faq-item-wrap',
],
$item_key => [
'class' => 'pp-faq-item',
],
] );
if ( 'accordion' === $settings['faq_layout'] ) {
$this->add_render_attribute( $item_key, 'class', 'pp-accordion-item' );
} else {
$this->add_render_attribute( [
$item_wrap_key => [
'class' => 'pp-grid-item-wrap',
],
$item_key => [
'class' => 'pp-grid-item',
],
] );
}
if ( 'yes' === $tab['active_tab'] ) {
$this->add_render_attribute( $item_key, 'class', 'pp-accordion-item-active' );
}
$this->add_render_attribute( [
$question_setting_key => [
'id' => 'pp-accordion-tab-title-' . $id_int . $tab_count,
'class' => $question_class,
'tabindex' => $id_int . $tab_count,
'data-tab' => $tab_count,
],
$tab_content_setting_key => [
'id' => 'pp-accordion-tab-content-' . $id_int . $tab_count,
'class' => $faq_answer_class,
'data-tab' => $tab_count,
],
] );
$this->add_inline_editing_attributes( $tab_content_setting_key, 'advanced' );
?>
<div <?php echo wp_kses_post( $this->get_render_attribute_string( $item_wrap_key ) ); ?>>
<div <?php echo wp_kses_post( $this->get_render_attribute_string( $item_key ) ); ?>>
<div <?php echo wp_kses_post( $this->get_render_attribute_string( $question_setting_key ) ); ?>>
<div class="pp-accordion-title-icon">
<?php if ( ! empty( $tab['question_icon']['value'] ) ) { ?>
<span class="pp-accordion-tab-icon pp-icon">
<?php
Icons_Manager::render_icon( $tab['question_icon'], [ 'aria-hidden' => 'true' ] );
?>
</span>
<?php } ?>
<?php $question_html_tag = PP_Helper::validate_html_tag( $settings['question_html_tag'] ); ?>
<<?php echo esc_html( $question_html_tag ); ?> class="pp-accordion-title-text">
<?php echo wp_kses_post( $tab['question'] ); ?>
</<?php echo esc_html( $question_html_tag ); ?>>
</div>
<?php if ( 'yes' === $settings['toggle_icon_show'] ) { ?>
<div class="pp-accordion-toggle-icon">
<?php if ( $settings['select_toggle_icon']['value'] ) { ?>
<span class='pp-accordion-toggle-icon-close pp-icon'>
<?php
Icons_Manager::render_icon( $settings['select_toggle_icon'], [ 'aria-hidden' => 'true' ] );
?>
</span>
<?php } ?>
<?php if ( $settings['select_toggle_icon_active']['value'] ) { ?>
<span class='pp-accordion-toggle-icon-open pp-icon'>
<?php
Icons_Manager::render_icon( $settings['select_toggle_icon_active'], [ 'aria-hidden' => 'true' ] );
?>
</span>
<?php } ?>
</div>
<?php } ?>
</div>
<div <?php echo wp_kses_post( $this->get_render_attribute_string( $tab_content_setting_key ) ); ?>>
<?php echo $this->parse_text_editor( $tab['answer'] ); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
</div>
</div>
</div>
<?php
endforeach;
}
protected function render() {
$settings = $this->get_settings_for_display();
$is_editor = \Elementor\Plugin::instance()->editor->is_edit_mode();
$icon_align = is_rtl() ? 'right' : $settings['toggle_icon_align'];
$this->add_render_attribute( 'container', [
'class' => 'pp-faqs',
] );
if ( 'accordion' === $settings['faq_layout'] ) {
$this->add_render_attribute( 'container', [
'class' => [ 'pp-advanced-accordion', 'pp-toggle-icon-align-' . $icon_align ],
'id' => 'pp-advanced-accordion-' . esc_attr( $this->get_id() ),
'data-accordion-id' => esc_attr( $this->get_id() ),
] );
} else {
$this->add_render_attribute( 'container', 'class', [ 'pp-faq-grid', 'pp-elementor-grid', 'clearfix' ] );
}
?>
<div <?php echo wp_kses_post( $this->get_render_attribute_string( 'container' ) ); ?>>
<?php $this->render_faqs(); ?>
</div>
<?php
}
}