type' => Controls_Manager::SELECT,
'options' => [
'none' => esc_html__( 'None', 'wpr-addons' ),
'solid' => esc_html__( 'Solid', 'wpr-addons' ),
'double' => esc_html__( 'Double', 'wpr-addons' ),
'dotted' => esc_html__( 'Dotted', 'wpr-addons' ),
'dashed' => esc_html__( 'Dashed', 'wpr-addons' ),
'groove' => esc_html__( 'Groove', 'wpr-addons' ),
],
'default' => 'none',
'selectors' => [
'{{WRAPPER}} .wpr-grid-slider-arrow' => 'border-style: {{VALUE}};',
],
]
);
$this->add_control(
'grid_slider_nav_border_width',
[
'label' => esc_html__( 'Border Width', 'wpr-addons' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px' ],
'default' => [
'top' => 2,
'right' => 2,
'bottom' => 2,
'left' => 2,
],
'selectors' => [
'{{WRAPPER}} .wpr-grid-slider-arrow' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
'condition' => [
'grid_slider_nav_border_type!' => 'none',
],
]
);
$this->add_control(
'grid_slider_nav_border_radius',
[
'label' => esc_html__( 'Border Radius', 'wpr-addons' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%' ],
'selectors' => [
'{{WRAPPER}} .wpr-grid-slider-arrow' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
'separator' => 'after',
]
);
$this->add_control_stack_grid_slider_nav_position();
$this->end_controls_section(); // End Controls Section
// Styles ====================
// Section: Pagination -------
$this->start_controls_section(
'wpr__section_style_grid_slider_dots',
[
'label' => esc_html__( 'Slider Pagination', 'wpr-addons' ),
'tab' => Controls_Manager::TAB_STYLE,
'condition' => [
'layout_select' => 'slider',
],
]
);
$this->start_controls_tabs( 'tabs_grid_slider_dots' );
$this->start_controls_tab(
'tab_grid_slider_dots_normal',
[
'label' => esc_html__( 'Normal', 'wpr-addons' ),
]
);
$this->add_control(
'grid_slider_dots_bg_color',
[
'label' => esc_html__( 'Background Color', 'wpr-addons' ),
'type' => Controls_Manager::COLOR,
'default' => 'rgba(0,0,0,0.35)',
'selectors' => [
'{{WRAPPER}} .wpr-grid-slider-dot' => 'background-color: {{VALUE}};',
],
]
);
$this->add_control(
'grid_slider_dots_border_color',
[
'label' => esc_html__( 'Border Color', 'wpr-addons' ),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .wpr-grid-slider-dot' => 'border-color: {{VALUE}}',
],
]
);
$this->end_controls_tab();
$this->start_controls_tab(
'tab_grid_slider_dots_active',
[
'label' => esc_html__( 'Active', 'wpr-addons' ),
]
);
$this->add_control(
'grid_slider_dots_active_bg_color',
[
'label' => esc_html__( 'Background Color', 'wpr-addons' ),
'type' => Controls_Manager::COLOR,
'default' => '#605BE5',
'selectors' => [
'{{WRAPPER}} .wpr-grid-slider-dots .slick-active .wpr-grid-slider-dot' => 'background-color: {{VALUE}}',
],
]
);
$this->add_control(
'grid_slider_dots_active_border_color',
[
'label' => esc_html__( 'Border Color', 'wpr-addons' ),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .wpr-grid-slider-dots .slick-active .wpr-grid-slider-dot' => 'border-color: {{VALUE}}',
],
]
);
$this->end_controls_tab();
$this->end_controls_tabs();
$this->add_responsive_control(
'grid_slider_dots_width',
[
'label' => esc_html__( 'Box Width', 'wpr-addons' ),
'type' => Controls_Manager::SLIDER,
'size_units' => ['px',],
'range' => [
'px' => [
'min' => 1,
'max' => 100,
],
],
'default' => [
'unit' => 'px',
'size' => 8,
],
'selectors' => [
'{{WRAPPER}} .wpr-grid-slider-dot' => 'width: {{SIZE}}{{UNIT}};',
],
'separator' => 'before',
'render_type' => 'template'
]
);
$this->add_responsive_control(
'grid_slider_dots_height',
[
'label' => esc_html__( 'Box Height', 'wpr-addons' ),
'type' => Controls_Manager::SLIDER,
'size_units' => ['px',],
'range' => [
'px' => [
'min' => 1,
'max' => 100,
],
],
'default' => [
'unit' => 'px',
'size' => 8,
],
'selectors' => [
'{{WRAPPER}} .wpr-grid-slider-dot' => 'height: {{SIZE}}{{UNIT}};',
],
'render_type' => 'template'
]
);
$this->add_control(
'grid_slider_dots_border_type',
[
'label' => esc_html__( 'Border Type', 'wpr-addons' ),
'type' => Controls_Manager::SELECT,
'options' => [
'none' => esc_html__( 'None', 'wpr-addons' ),
'solid' => esc_html__( 'Solid', 'wpr-addons' ),
'double' => esc_html__( 'Double', 'wpr-addons' ),
'dotted' => esc_html__( 'Dotted', 'wpr-addons' ),
'dashed' => esc_html__( 'Dashed', 'wpr-addons' ),
'groove' => esc_html__( 'Groove', 'wpr-addons' ),
],
'default' => 'none',
'selectors' => [
'{{WRAPPER}} .wpr-grid-slider-dot' => 'border-style: {{VALUE}};',
],
'render_type' => 'template',
'separator' => 'before',
]
);
$this->add_control(
'grid_slider_dots_border_width',
[
'label' => esc_html__( 'Border Width', 'wpr-addons' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px' ],
'default' => [
'top' => 1,
'right' => 1,
'bottom' => 1,
'left' => 1,
],
'selectors' => [
'{{WRAPPER}} .wpr-grid-slider-dot' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
'render_type' => 'template',
'condition' => [
'grid_slider_dots_border_type!' => 'none',
],
]
);
$this->add_control(
'grid_slider_dots_border_radius',
[
'label' => esc_html__( 'Border Radius', 'wpr-addons' ),
'type' => Controls_Manager::DIMENSIONS,
'default' => [
'top' => 50,
'right' => 50,
'bottom' => 50,
'left' => 50,
'unit' => '%',
],
'size_units' => [ 'px', '%' ],
'selectors' => [
'{{WRAPPER}} .wpr-grid-slider-dot' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
'separator' => 'before',
]
);
$this->add_responsive_control(
'grid_slider_dots_gutter',
[
'type' => Controls_Manager::SLIDER,
'label' => esc_html__( 'Gutter', 'wpr-addons' ),
'size_units' => ['px' ],
'range' => [
'px' => [
'min' => 0,
'max' => 100,
],
],
'default' => [
'unit' => 'px',
'size' => 7,
],
'selectors' => [
'{{WRAPPER}}.wpr-grid-slider-dots-horizontal .wpr-grid-slider-dot' => 'margin-right: {{SIZE}}{{UNIT}};',
'{{WRAPPER}}.wpr-grid-slider-dots-vertical .wpr-grid-slider-dot' => 'margin-bottom: {{SIZE}}{{UNIT}};',
],
'render_type' => 'template',
'separator' => 'before',
]
);
$this->add_control_grid_slider_dots_hr();
$this->add_responsive_control(
'grid_slider_dots_vr',
[
'type' => Controls_Manager::SLIDER,
'label' => esc_html__( 'Vertical Position', 'wpr-addons' ),
'size_units' => [ '%', 'px' ],
'range' => [
'%' => [
'min' => -20,
'max' => 120,
],
'px' => [
'min' => -200,
'max' => 2000,
],
],
'default' => [
'unit' => '%',
'size' => 96,
],
'selectors' => [
'{{WRAPPER}} .wpr-grid-slider-dots' => 'top: {{SIZE}}{{UNIT}};',
],
]
);
$this->end_controls_section(); // End Controls Section
}
// Render Post Taxonomies
public function render_post_taxonomies( $settings, $class, $post_id ) {
$terms = wp_get_post_terms( $post_id, $settings['element_select'] );
$count = 0;
$tax1_pointer = !defined('WPR_ADDONS_PRO_VERSION') || !wpr_fs()->can_use_premium_code() ? 'none' : $this->get_settings()['tax1_pointer'];
$tax1_pointer_animation = !defined('WPR_ADDONS_PRO_VERSION') || !wpr_fs()->can_use_premium_code() ? 'fade' : $this->get_settings()['tax1_pointer_animation'];
$tax2_pointer = !defined('WPR_ADDONS_PRO_VERSION') || !wpr_fs()->can_use_premium_code() ? 'none' : $this->get_settings()['tax2_pointer'];
$tax2_pointer_animation = !defined('WPR_ADDONS_PRO_VERSION') || !wpr_fs()->can_use_premium_code() ? 'fade' : $this->get_settings()['tax2_pointer_animation'];
$pointer_item_class = (isset($this->get_settings()['tax1_pointer']) && 'none' !== $this->get_settings()['tax1_pointer']) || (isset($this->get_settings()['tax2_pointer']) && 'none' !== $this->get_settings()['tax2_pointer']) ? 'wpr-pointer-item' : '';
// Pointer Class
if ( 'wpr-grid-tax-style-1' === $settings['element_tax_style'] ) {
$class .= ' wpr-pointer-'. $tax1_pointer;
$class .= ' wpr-pointer-line-fx wpr-pointer-fx-'. $tax1_pointer_animation;
} else {
$class .= ' wpr-pointer-'. $tax2_pointer;
$class .= ' wpr-pointer-line-fx wpr-pointer-fx-'. $tax2_pointer_animation;
}
echo '
';
echo '
';
// Text: Before
if ( 'before' === $settings['element_extra_text_pos'] ) {
echo '';
}
// Icon: Before
if ( 'before' === $settings['element_extra_icon_pos'] ) {
ob_start();
\Elementor\Icons_Manager::render_icon($settings['element_extra_icon'], ['aria-hidden' => 'true']);
$extra_icon = ob_get_clean();
echo '';
}
// Taxonomies
foreach ( $terms as $term ) {
// Custom Colors
$enable_custom_colors = !defined('WPR_ADDONS_PRO_VERSION') || !wpr_fs()->can_use_premium_code() ? '' : $this->get_settings()['tax1_custom_color_switcher'];
if ( 'yes' === $enable_custom_colors ) {
$custom_tax_styles = '';
$cfc_text = get_term_meta($term->term_id, $this->get_settings()['tax1_custom_color_field_text'], true);
$cfc_bg = get_term_meta($term->term_id, $this->get_settings()['tax1_custom_color_field_bg'], true);
$color_styles = 'color:'. $cfc_text .'; background-color:'. $cfc_bg .'; border-color:'. $cfc_bg .';';
$css_selector = '.elementor-element'. $this->get_unique_selector() .' .wpr-grid-tax-style-1 .inner-block a.wpr-tax-id-'. esc_attr($term->term_id);
$custom_tax_styles .= $css_selector .'{'. $color_styles .'}';
echo ''; // TODO: take out of loop if possible
}
echo '
'. esc_html( $term->name );
if ( ++$count !== count( $terms ) ) {
echo ''. esc_html($settings['element_tax_sep']) .'';
}
echo '';
}
// Icon: After
if ( 'after' === $settings['element_extra_icon_pos'] ) {
ob_start();
\Elementor\Icons_Manager::render_icon($settings['element_extra_icon'], ['aria-hidden' => 'true']);
$extra_icon = ob_get_clean();
echo '';
}
// Text: After
if ( 'after' === $settings['element_extra_text_pos'] ) {
echo '';
}
echo '
';
echo '
';
}
// Render Advanced Filters
public function render_grid_filters( $settings ) {
$taxonomy = $settings['filters_select'];
// Return if Disabled
if ( '' === $taxonomy || ! isset( $settings[ 'query_taxonomy_'. $taxonomy ] ) ) {
return;
}
// Get Custom Filters
$custom_filters = $settings[ 'query_taxonomy_'. $taxonomy ];
if ( !defined('WPR_ADDONS_PRO_VERSION') || !wpr_fs()->can_use_premium_code() ) {
$settings['filters_default_filter'] = '';
$settings['filters_icon_align'] = '';
$settings['filters_count'] = '';
$settings['filters_pointer'] = 'none';
$settings['filters_pointer_animation'] = 'none';
}
// Icon
$left_icon = 'left' === $settings['filters_icon_align'] ? '' : '';
$right_icon = 'right' === $settings['filters_icon_align'] ? '' : '';
// Separator
$left_separator = 'left' === $settings['filters_separator_align'] ? ''. esc_html($settings['filters_separator']) .'' : '';
$right_separator = 'right' === $settings['filters_separator_align'] ? ''. esc_html($settings['filters_separator']) .'' : '';
// Count
$post_count = 'yes' === $settings['filters_count'] ? '' : '';
// Pointer Class
$pointer_class = ' wpr-pointer-'. $settings['filters_pointer'];
$pointer_class .= ' wpr-pointer-line-fx wpr-pointer-fx-'. $settings['filters_pointer_animation'];
$pointer_item_class = (isset($settings['filters_pointer']) && 'none' !== $settings['filters_pointer']) ? 'class="wpr-pointer-item"' : '';
$pointer_item_class_name = (isset($settings['filters_pointer']) && 'none' !== $settings['filters_pointer']) ? 'wpr-pointer-item' : '';
// Filters List
echo '';
// All Filter
if ( 'yes' === $settings['filters_all'] && 'yes' !== $settings['filters_linkable'] ) {
echo '- ';
echo ''. $left_icon . esc_html($settings['filters_all_text']) . $right_icon . $post_count .''. $right_separator; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo '
';
}
$q = get_queried_object();
// category title : custom post type archive title
$category_name = is_category() ? strtolower($q->name) : 'no-category';
// Custom Filters
if ( $settings['query_selection'] === 'dynamic' && ! empty( $custom_filters ) ) {
$parent_filters = [];
foreach ( $custom_filters as $key => $term_id ) {
$filter = get_term_by( 'id', $term_id, $taxonomy );
$data_attr = 'post_tag' === $taxonomy ? 'tag-'. $filter->slug : $taxonomy .'-'. $filter->slug;
$tax_data_attr = 'post_tag' === $taxonomy ? 'tag' : $taxonomy;
$term_data_attr = $filter->slug;
// GOGA - tested but needs advanced testing
if (strpos($data_attr, $category_name) !== false) {
$active_class = 'wpr-active-filter';
} else {
$active_class = '';
}
// Parent Filters
if ( 0 === $filter->parent ) {
$children = get_term_children( $filter->term_id, $taxonomy );
$data_role = ! empty($children) ? ' data-role="parent"' : '';
echo '- '; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
if ( 'yes' !== $settings['filters_linkable'] ) {
echo ''. $left_separator .''. $left_icon . esc_html($filter->name) . $right_icon . $post_count .''. $right_separator; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
} else {
echo ''. $left_separator .''. $left_icon . esc_html($filter->name) . $right_icon . $post_count .''. $right_separator; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
echo '
';
// Get Sub Filters
} else {
array_push( $parent_filters, $filter->parent );
}
}
// All Filters
} else {
$exclude_ids = [];
if ( 'yes' === $settings['filters_hide_uncategorized'] ) {
$uncategorized = get_term_by('slug', 'uncategorized', $taxonomy);
if ($uncategorized && !is_wp_error($uncategorized)) {
$exclude_ids[] = $uncategorized->term_id;
}
}
$all_filters = get_terms([
'taxonomy' => $taxonomy,
'hide_empty' => false,
'exclude' => $exclude_ids,
]);
$parent_filters = [];
foreach ( $all_filters as $key => $filter ) {
$data_attr = 'post_tag' === $taxonomy ? 'tag-'. $filter->slug : $taxonomy .'-'. $filter->slug;
$tax_data_attr = 'post_tag' === $taxonomy ? 'tag' : $taxonomy;
$term_data_attr = $filter->slug;
// GOGA - tested but needs advanced testing
if (strpos($data_attr, $category_name) !== false) {
$active_class = 'wpr-active-filter';
} else {
$active_class = '';
}
// Parent Filters
if ( 0 === $filter->parent ) {
$children = get_term_children( $filter->term_id, $taxonomy );
$data_role = ! empty($children) ? ' data-role="parent"' : '';
$hidden_class = WPR_Grid_Helpers::get_hidden_filter_class($filter->slug, $settings);
echo '- '; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
if ( 'yes' !== $settings['filters_linkable'] ) {
echo ''. $left_separator .''. $left_icon . esc_html($filter->name) . $right_icon . $post_count .''. $right_separator; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
} else {
echo ''. $left_separator .''. $left_icon . esc_html($filter->name) . $right_icon . $post_count .''. $right_separator; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
echo '
';
// Get Sub Filters
} else {
array_push( $parent_filters, $filter->parent );
}
}
}
// Sub Filters
if ( 'yes' !== $settings['filters_linkable'] ) {
foreach ( array_unique( $parent_filters ) as $key => $parent_filter ) {
$parent = get_term_by( 'id', $parent_filter, $taxonomy );
$children = get_term_children( $parent_filter, $taxonomy );
$data_attr = 'post_tag' === $taxonomy ? 'tag-'. $parent->slug : $taxonomy .'-'. $parent->slug;
$tax_data_attr = 'post_tag' === $taxonomy ? 'tag' : $taxonomy;
$term_data_attr = $parent->slug;
echo '';
echo '- ';
echo '';
echo ' '. esc_html__( 'Back', 'wpr-addons' );
echo '';
echo '
';
foreach ( $children as $child ) {
$sub_filter = get_term_by( 'id', $child, $taxonomy );
$data_attr = 'post_tag' === $taxonomy ? 'tag-'. $sub_filter->slug : $taxonomy .'-'. $sub_filter->slug;
echo '- ';
echo ''. $left_separator .''. $left_icon . esc_html($sub_filter->name) . $right_icon . $post_count .''. $right_separator; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo '
';
}
echo '
';
}
}
echo '
';
}
// Grid Settings
public function add_grid_settings( $settings ) {
if ( !defined('WPR_ADDONS_PRO_VERSION') || !wpr_fs()->can_use_premium_code() ) {
$settings['layout_select'] = 'pro-ms' == $settings['layout_select'] ? 'fitRows' : $settings['layout_select'];
$settings['filters_deeplinking'] = '';
$settings['filters_count'] = '';
$settings['filters_default_filter'] = '';
if ( 'pro-fd' == $settings['filters_animation'] || 'pro-fs' == $settings['filters_animation'] ) {
$settings['filters_animation'] = 'zoom';
}
}
if ( 'fitRows' == $settings['layout_select'] ) {
$stick_last_element_to_bottom = $settings['stick_last_element_to_bottom'];
} else {
$stick_last_element_to_bottom = 'no';
}
global $wp_query;
$this->current_post_type = $wp_query->query_vars['post_type'] ?? $settings['query_source'];
$gutter_hr_widescreen = isset($settings['layout_gutter_hr_widescreen']['size']) ? $settings['layout_gutter_hr_widescreen']['size'] : $settings['layout_gutter_hr']['size'];
$gutter_hr_desktop = $settings['layout_gutter_hr']['size'];
$gutter_hr_laptop = isset($settings['layout_gutter_hr_laptop']['size']) ? $settings['layout_gutter_hr_laptop']['size'] : $gutter_hr_desktop;
$gutter_hr_tablet_extra = isset($settings['layout_gutter_hr_tablet_extra']['size']) ? $settings['layout_gutter_hr_tablet_extra']['size'] : $gutter_hr_laptop;
$gutter_hr_tablet = isset($settings['layout_gutter_hr_tablet']['size']) ? $settings['layout_gutter_hr_tablet']['size'] : $gutter_hr_tablet_extra;
$gutter_hr_mobile_extra = isset($settings['layout_gutter_hr_mobile_extra']['size']) ? $settings['layout_gutter_hr_mobile_extra']['size'] : $gutter_hr_tablet;
$gutter_hr_mobile = isset($settings['layout_gutter_hr_mobile']['size']) ? $settings['layout_gutter_hr_mobile']['size'] : $gutter_hr_mobile_extra;
$gutter_vr_widescreen = isset($settings['layout_gutter_vr_widescreen']['size']) ? $settings['layout_gutter_vr_widescreen']['size'] : $settings['layout_gutter_vr']['size'];
$gutter_vr_desktop = $settings['layout_gutter_vr']['size'];
$gutter_vr_laptop = isset($settings['layout_gutter_vr_laptop']['size']) ? $settings['layout_gutter_vr_laptop']['size'] : $gutter_vr_desktop;
$gutter_vr_tablet_extra = isset($settings['layout_gutter_vr_tablet_extra']['size']) ? $settings['layout_gutter_vr_tablet_extra']['size'] : $gutter_vr_laptop;
$gutter_vr_tablet = isset($settings['layout_gutter_vr_tablet']['size']) ? $settings['layout_gutter_vr_tablet']['size'] : $gutter_vr_tablet_extra;
$gutter_vr_mobile_extra = isset($settings['layout_gutter_vr_mobile_extra']['size']) ? $settings['layout_gutter_vr_mobile_extra']['size'] : $gutter_vr_tablet;
$gutter_vr_mobile = isset($settings['layout_gutter_vr_mobile']['size']) ? $settings['layout_gutter_vr_mobile']['size'] : $gutter_vr_mobile_extra;
$layout_settings = [
'layout' => $settings['layout_select'],
'stick_last_element_to_bottom' => $stick_last_element_to_bottom,
'columns_desktop' => $settings['layout_columns'],
'gutter_hr' => $gutter_hr_desktop,
'gutter_hr_mobile' => $gutter_hr_mobile,
'gutter_hr_mobile_extra' => $gutter_hr_mobile_extra,
'gutter_hr_tablet' => $gutter_hr_tablet,
'gutter_hr_tablet_extra' => $gutter_hr_tablet_extra,
'gutter_hr_laptop' => $gutter_hr_laptop,
'gutter_hr_widescreen' => $gutter_hr_widescreen,
'gutter_vr' => $gutter_vr_desktop,
'gutter_vr_mobile' => $gutter_vr_mobile,
'gutter_vr_mobile_extra' => $gutter_vr_mobile_extra,
'gutter_vr_tablet' => $gutter_vr_tablet,
'gutter_vr_tablet_extra' => $gutter_vr_tablet_extra,
'gutter_vr_laptop' => $gutter_vr_laptop,
'gutter_vr_widescreen' => $gutter_vr_widescreen,
'animation' => $settings['layout_animation'],
'animation_duration' => $settings['layout_animation_duration'],
'animation_delay' => $settings['layout_animation_delay'],
'deeplinking' => $settings['filters_deeplinking'],
'filters_linkable' => $settings['filters_linkable'],
'filters_default_filter' => $settings['filters_default_filter'],
'filters_count' => $settings['filters_count'],
'filters_hide_empty' => $settings['filters_hide_empty'],
'filters_animation' => $settings['filters_animation'],
'filters_animation_duration' => $settings['filters_animation_duration'],
'filters_animation_delay' => $settings['filters_animation_delay'],
'pagination_type' => $settings['pagination_type'],
'pagination_max_pages' => WPR_Grid_Helpers::get_max_num_pages( $settings ),
];
if ( 'list' === $settings['layout_select'] ) {
$layout_settings['media_align'] = $settings['layout_list_align'];
$layout_settings['media_width'] = $settings['layout_list_media_width']['size'];
$layout_settings['media_distance'] = $settings['layout_list_media_distance']['size'];
}
if ( !defined('WPR_ADDONS_PRO_VERSION') || !wpr_fs()->can_use_premium_code() ) {
$settings['lightbox_popup_thumbnails'] = '';
$settings['lightbox_popup_thumbnails_default'] = '';
$settings['lightbox_popup_sharing'] = '';
}
$layout_settings['lightbox'] = [
'selector' => '.wpr-grid-image-wrap',
'iframeMaxWidth' => '60%',
'hash' => false,
'autoplay' => $settings['lightbox_popup_autoplay'],
'pause' => absint( ( floatval( $settings['lightbox_popup_pause'] ?: 1 ) ) * 1000 ),
'progressBar' => $settings['lightbox_popup_progressbar'],
'counter' => $settings['lightbox_popup_counter'],
'controls' => $settings['lightbox_popup_arrows'],
'getCaptionFromTitleOrAlt' => $settings['lightbox_popup_captions'],
'thumbnail' => $settings['lightbox_popup_thumbnails'],
'showThumbByDefault' => $settings['lightbox_popup_thumbnails_default'],
'share' => $settings['lightbox_popup_sharing'],
'zoom' => $settings['lightbox_popup_zoom'],
'fullScreen' => $settings['lightbox_popup_fullscreen'],
'download' => $settings['lightbox_popup_download'],
];
if ( 'yes' === $settings['filters_experiment'] || 'yes' === $settings['advanced_filters'] ) {
$layout_settings['grid_settings'] = [
// General Settings
'filters_experiment' => isset($settings['filters_experiment']) ? $settings['filters_experiment'] : null,
'advanced_filters' => isset($settings['advanced_filters']) ? $settings['advanced_filters'] : null,
'layout_select' => isset($settings['layout_select']) ? $settings['layout_select'] : null,
'layout_animation' => isset($settings['layout_animation']) ? $settings['layout_animation'] : null,
'layout_animation_duration' => isset($settings['layout_animation_duration']) ? $settings['layout_animation_duration'] : null,
'layout_animation_delay' => isset($settings['layout_animation_delay']) ? $settings['layout_animation_delay'] : null,
'pagination_type' => isset($settings['pagination_type']) ? $settings['pagination_type'] : null,
'pagination_max_pages' => WPR_Grid_Helpers::get_max_num_pages($settings),
// Filter Settings
'filters_deeplinking' => isset($settings['filters_deeplinking']) ? $settings['filters_deeplinking'] : null,
'filters_linkable' => isset($settings['filters_linkable']) ? $settings['filters_linkable'] : null,
'filters_default_filter' => isset($settings['filters_default_filter']) ? $settings['filters_default_filter'] : null,
'filters_count' => isset($settings['filters_count']) ? $settings['filters_count'] : null,
'filters_hide_empty' => isset($settings['filters_hide_empty']) ? $settings['filters_hide_empty'] : null,
'filters_animation' => isset($settings['filters_animation']) ? $settings['filters_animation'] : null,
'filters_animation_duration' => isset($settings['filters_animation_duration']) ? $settings['filters_animation_duration'] : null,
'filters_animation_delay' => isset($settings['filters_animation_delay']) ? $settings['filters_animation_delay'] : null,
// Lightbox Settings
'lightbox_popup_autoplay' => isset($settings['lightbox_popup_autoplay']) ? $settings['lightbox_popup_autoplay'] : null,
'lightbox_popup_pause' => isset($settings['lightbox_popup_pause']) ? $settings['lightbox_popup_pause'] : null,
'lightbox_popup_progressbar' => isset($settings['lightbox_popup_progressbar']) ? $settings['lightbox_popup_progressbar'] : null,
'lightbox_popup_counter' => isset($settings['lightbox_popup_counter']) ? $settings['lightbox_popup_counter'] : null,
'lightbox_popup_arrows' => isset($settings['lightbox_popup_arrows']) ? $settings['lightbox_popup_arrows'] : null,
'lightbox_popup_captions' => isset($settings['lightbox_popup_captions']) ? $settings['lightbox_popup_captions'] : null,
'lightbox_popup_thumbnails' => isset($settings['lightbox_popup_thumbnails']) ? $settings['lightbox_popup_thumbnails'] : null,
'lightbox_popup_thumbnails_default' => isset($settings['lightbox_popup_thumbnails_default']) ? $settings['lightbox_popup_thumbnails_default'] : null,
'lightbox_popup_sharing' => isset($settings['lightbox_popup_sharing']) ? $settings['lightbox_popup_sharing'] : null,
'lightbox_popup_zoom' => isset($settings['lightbox_popup_zoom']) ? $settings['lightbox_popup_zoom'] : null,
'lightbox_popup_fullscreen' => isset($settings['lightbox_popup_fullscreen']) ? $settings['lightbox_popup_fullscreen'] : null,
'lightbox_popup_download' => isset($settings['lightbox_popup_download']) ? $settings['lightbox_popup_download'] : null,
// Query Settings
'query_source' => isset($settings['query_source']) ? $settings['query_source'] : null,
'current_query_source' => $this->current_post_type,
'query_author' => isset($settings['query_author']) ? $settings['query_author'] : null,
'query_posts_per_page' => isset($settings['query_posts_per_page']) ? $settings['query_posts_per_page'] : null,
'query_offset' => isset($settings['query_offset']) ? $settings['query_offset'] : null,
'query_randomize' => isset($settings['query_randomize']) ? $settings['query_randomize'] : null,
'order_posts' => isset($settings['order_posts']) ? $settings['order_posts'] : null,
'order_posts_by_acf' => isset($settings['order_posts_by_acf']) ? $settings['order_posts_by_acf'] : null,
'order_direction' => isset($settings['order_direction']) ? $settings['order_direction'] : null,
'query_exclude_no_images' => isset($settings['query_exclude_no_images']) ? $settings['query_exclude_no_images'] : null,
'query_selection' => isset($settings['query_selection']) ? $settings['query_selection'] : null,
'query_tax_selection' => isset($settings['query_tax_selection']) ? $settings['query_tax_selection'] : null,
'query_manual' => isset($settings['query_manual_' . $settings['query_source']]) ? $settings['query_manual_' . $settings['query_source']] : null,
'display_scheduled_posts' => isset($settings['display_scheduled_posts']) ? $settings['display_scheduled_posts'] : null,
'query_not_found_text' => isset($settings['query_not_found_text']) ? $settings['query_not_found_text'] : null,
'layout_image_crop' => [
'layout_image_crop_size' => isset($settings['layout_image_crop_size']) ? $settings['layout_image_crop_size'] : null,
'layout_image_crop_custom_dimension' => isset($settings['layout_image_crop_custom_dimension']) ? $settings['layout_image_crop_custom_dimension'] : null,
],
'image_effects' => isset($settings['image_effects']) ? $settings['image_effects'] : null,
'image_effects_animation_timing' => isset($settings['image_effects_animation_timing']) ? $settings['image_effects_animation_timing'] : null,
'image_effects_size' => isset($settings['image_effects_size']) ? $settings['image_effects_size'] : null,
'image_effects_direction' => isset($settings['image_effects_direction']) ? $settings['image_effects_direction'] : null,
'open_links_in_new_tab' => isset($settings['open_links_in_new_tab']) ? $settings['open_links_in_new_tab'] : null,
'post_link_source' => isset($settings['post_link_source']) ? $settings['post_link_source'] : null,
'post_link_custom_field_key' => isset($settings['post_link_custom_field_key']) ? $settings['post_link_custom_field_key'] : null,
'overlay_post_link' => isset($settings['overlay_post_link']) ? $settings['overlay_post_link'] : null,
'secondary_img_on_hover' => isset($settings['secondary_img_on_hover']) ? $settings['secondary_img_on_hover'] : null,
'grid_lazy_loading' => isset($settings['grid_lazy_loading']) ? $settings['grid_lazy_loading'] : null,
'overlay_animation' => isset($settings['overlay_animation']) ? $settings['overlay_animation'] : null,
'overlay_animation_size' => isset($settings['overlay_animation_size']) ? $settings['overlay_animation_size'] : null,
'overlay_animation_timing' => isset($settings['overlay_animation_timing']) ? $settings['overlay_animation_timing'] : null,
'overlay_animation_tr' => isset($settings['overlay_animation_tr']) ? $settings['overlay_animation_tr'] : null,
'overlay_image' => isset($settings['overlay_image']) ? $settings['overlay_image'] : null,
'title_pointer' => isset($settings['title_pointer']) ? $settings['title_pointer'] : null,
'title_pointer_animation' => isset($settings['title_pointer_animation']) ? $settings['title_pointer_animation'] : null,
'read_more_animation' => isset($settings['read_more_animation']) ? $settings['read_more_animation'] : null,
'tax1_pointer' => isset($settings['tax1_pointer']) ? $settings['tax1_pointer'] : null,
'tax1_pointer_animation' => isset($settings['tax1_pointer_animation']) ? $settings['tax1_pointer_animation'] : null,
'tax2_pointer' => isset($settings['tax2_pointer']) ? $settings['tax2_pointer'] : null,
'tax2_pointer_animation' => isset($settings['tax2_pointer_animation']) ? $settings['tax2_pointer_animation'] : null,
'tax1_custom_color_switcher' => isset($settings['tax1_custom_color_switcher']) ? $settings['tax1_custom_color_switcher'] : null,
'tax1_custom_color_field_text' => isset($settings['tax1_custom_color_field_text']) ? $settings['tax1_custom_color_field_text'] : null,
'tax1_custom_color_field_bg' => isset($settings['tax1_custom_color_field_bg']) ? $settings['tax1_custom_color_field_bg'] : null,
'layout_pagination' => isset($settings['layout_pagination']) ? $settings['layout_pagination'] : null,
'check_ajax_filter' => 'yes',
// Taxonomies
// Dynamically add taxonomy settings
] + array_reduce(array_keys($this->get_available_taxonomies() ?? []), function($carry, $slug) use ($settings) {
$carry['query_taxonomy_'. $slug] = isset($settings['query_taxonomy_'. $slug]) ? $settings['query_taxonomy_'. $slug] : null;
return $carry;
}, []) + array_reduce(array_keys($this->post_types ?? []), function($carry, $slug) use ($settings) {
$carry['query_exclude_'. $slug] = isset($settings['query_exclude_'. $slug]) ? $settings['query_exclude_'. $slug] : null;
$carry['query_manual_'. $slug] = isset($settings['query_manual_'. $slug]) ? $settings['query_manual_'. $slug] : null;
return $carry;
}, []) + [
// Repeater Controls
'grid_elements' => isset($settings['grid_elements']) ? $settings['grid_elements'] : null, // Assuming 'items' is a repeater control
// Add any necessary controls from styles tab here if needed
];
}
$this->add_render_attribute( 'grid-settings', [
'data-settings' => wp_json_encode( $layout_settings ),
'data-advanced-filters' => ( 'yes' === $settings['advanced_filters'] ) ? 'yes' : 'no'
] );
}
public function add_slider_settings( $settings ) {
$slider_is_rtl = is_rtl();
$slider_direction = $slider_is_rtl ? 'rtl' : 'ltr';
if ( !defined('WPR_ADDONS_PRO_VERSION') || !wpr_fs()->can_use_premium_code() ) {
$settings['layout_slider_autoplay'] = '';
$settings['layout_slider_autoplay_duration'] = 0;
$settings['layout_slider_pause_on_hover'] = '';
}
if ( 'pro-3' == $settings['layout_slider_amount'] || 'pro-4' == $settings['layout_slider_amount'] || 'pro-5' == $settings['layout_slider_amount'] || 'pro-6' == $settings['layout_slider_amount'] ) {
$settings['layout_slider_amount'] = 1;
}
$slider_options = [
'rtl' => $slider_is_rtl,
'infinite' => ( $settings['layout_slider_loop'] === 'yes' ),
'speed' => absint( ( floatval( $settings['layout_slider_effect_duration'] ?: 1 ) ) * 1000 ),
'arrows' => true,
'dots' => true,
'autoplay' => ( $settings['layout_slider_autoplay'] === 'yes' ),
'autoplaySpeed' => absint( ( floatval( $settings['layout_slider_autoplay_duration'] ?: 1 ) ) * 1000 ),
'pauseOnHover' => $settings['layout_slider_pause_on_hover'],
'prevArrow' => '#wpr-grid-slider-prev-'. $this->get_id(),
'nextArrow' => '#wpr-grid-slider-next-'. $this->get_id(),
'sliderSlidesToScroll' => $settings['layout_slides_to_scroll'] ? absint( $settings['layout_slides_to_scroll'] ) : 1,
];
if ( !defined('WPR_ADDONS_PRO_VERSION') || !wpr_fs()->can_use_premium_code() ) {
$settings['lightbox_popup_thumbnails'] = '';
$settings['lightbox_popup_thumbnails_default'] = '';
$settings['lightbox_popup_sharing'] = '';
}
// Lightbox Settings
$slider_options['lightbox'] = [
'selector' => 'article:not(.slick-cloned) .wpr-grid-image-wrap',
'iframeMaxWidth' => '60%',
'hash' => false,
'autoplay' => $settings['lightbox_popup_autoplay'],
'pause' => absint( ( floatval( $settings['lightbox_popup_pause'] ?: 1 ) ) * 1000 ),
'progressBar' => $settings['lightbox_popup_progressbar'],
'counter' => $settings['lightbox_popup_counter'],
'controls' => $settings['lightbox_popup_arrows'],
'getCaptionFromTitleOrAlt' => $settings['lightbox_popup_captions'],
'thumbnail' => $settings['lightbox_popup_thumbnails'],
'showThumbByDefault' => $settings['lightbox_popup_thumbnails_default'],
'share' => $settings['lightbox_popup_sharing'],
'zoom' => $settings['lightbox_popup_zoom'],
'fullScreen' => $settings['lightbox_popup_fullscreen'],
'download' => $settings['lightbox_popup_download'],
];
if ( $settings['layout_slider_amount'] === 1 && $settings['layout_slider_effect'] === 'fade' ) {
$slider_options['fade'] = true;
}
$this->add_render_attribute( 'slider-settings', [
'dir' => esc_attr( $slider_direction ),
'data-slick' => wp_json_encode( $slider_options ),
] );
}
protected function render() {
// Get Settings
$settings = $this->get_settings();
// Get Posts
$posts = new \WP_Query( WPR_Grid_Helpers::get_main_query_args($settings, []) );
// Loop: Start
if ( $posts->have_posts() ) :
// Grid Settings
if ( 'slider' !== $settings['layout_select'] ) {
// Filters
$this->render_grid_filters( $settings );
$this->add_grid_settings( $settings );
$render_attribute = $this->get_render_attribute_string( 'grid-settings' );
// Slider Settings
} else {
$this->add_slider_settings( $settings );
$render_attribute = $this->get_render_attribute_string( 'slider-settings' );
}
echo '';
while ( $posts->have_posts() ) : $posts->the_post();
// Post Class
$post_class = implode( ' ', get_post_class( 'wpr-grid-item elementor-clearfix', get_the_ID() ) );
// Grid Item
echo '';
// Password Protected Form
WPR_Grid_Helpers::render_password_protected_input( $settings );
// Inner Wrapper
echo '';
// Content: Above Media
WPR_Grid_Helpers::get_elements_by_location( 'above', $settings, get_the_ID() );
// Media
if ( has_post_thumbnail() ) {
echo '
';
}
// Content: Below Media
WPR_Grid_Helpers::get_elements_by_location( 'below', $settings, get_the_ID() );
echo '
'; // End .wpr-grid-item-inner
echo ''; // End .wpr-grid-item
endwhile;
// Grid Wrap
echo '';
// reset
wp_reset_postdata();
if ( 'slider' === $settings['layout_select'] ) {
// Slider Navigation
echo '';
echo '
'. Utilities::get_wpr_icon( $settings['layout_slider_nav_icon'], '' ) .'
'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo '
'. Utilities::get_wpr_icon( $settings['layout_slider_nav_icon'], '' ) .'
'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo '
';
// Slider Dots
echo '';
}
// Pagination
WPR_Grid_Helpers::render_grid_pagination( $settings );
// No Posts Found
else:
if ( 'yes' === $settings['advanced_filters'] ) {
// Grid Settings
if ( 'slider' !== $settings['layout_select'] ) {
$this->add_grid_settings( $settings );
$render_attribute = $this->get_render_attribute_string( 'grid-settings' );
// Slider Settings
} else {
$this->add_slider_settings( $settings );
$render_attribute = $this->get_render_attribute_string( 'slider-settings' );
}
echo '';
if ( 'dynamic' === $settings['query_selection'] ) {
echo ''. esc_html($settings['query_not_found_text']) .'
';
}
// Grid Wrap
echo '';
// Pagination
WPR_Grid_Helpers::render_grid_pagination( $settings );
} else {
if ( 'dynamic' === $settings['query_selection'] ) {
echo ''. esc_html($settings['query_not_found_text']) .'
';
}
}
// Loop: End
endif;
}
}