BossBey File Manager
PHP:
8.2.30
OS:
Linux
User:
imagivibe
Root
/
home
/
imagivibe
/
public_html
/
CTR
/
wp-content
/
plugins
/
porto-functionality
/
builders
/
elements
/
archive
📤 Upload
📝 New File
📁 New Folder
Close
Editing: init.php
<?php if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } /** * Archive Builder * * @since 2.3.0 */ use Elementor\Controls_Manager; if ( ! class_exists( 'PortoBuildersArchive' ) ) : class PortoBuildersArchive { /** * Display WPB Elements * * @access private * @var boolean $display_wpb_elements * @since 2.3.0 */ private $display_wpb_elements = false; /** * The Shortcodes * * @access private * @var array $shortcodes * @since 2.3.0 */ private $shortcodes = array( 'posts-grid', ); /** * Edit Post * * @access public * @var object $edit_post * @since 2.3.0 */ public $edit_post = null; /** * Edit Post Type * * @access public * @var object $edit_post_type * @since 2.3.0 */ public $edit_post_type = null; /** * Preview Mode * * @access public * @var object $preview_mode * @since 2.3.0 */ public $preview_mode = ''; /** * Global Instance Objects * * @var array $instances * @since 2.3.0 * @access private */ private static $instance = null; public static function get_instance() { if ( ! self::$instance ) { self::$instance = new self(); } return self::$instance; } /** * Constructor */ public function __construct() { $this->init(); } /** * init * * @since 2.3.0 */ public function init() { if ( defined( 'ELEMENTOR_VERSION' ) ) { if ( is_admin() && isset( $_GET['action'] ) && 'elementor' === $_GET['action'] ) { add_action( 'elementor/elements/categories_registered', function( $self ) { $self->add_category( 'porto-archive', array( 'title' => __( 'Porto Archive Builder', 'porto-functionality' ), 'active' => true, ) ); } ); } add_action( 'elementor/widgets/register', array( $this, 'elementor_custom_archive_shortcodes' ), 10, 1 ); //apply changed post add_action( 'wp_ajax_porto_archive_builder_preview_apply', array( $this, 'apply_preview_el_post' ) ); add_action( 'elementor/documents/register_controls', array( $this, 'register_elementor_preview_controls' ) ); } if ( defined( 'WPB_VC_VERSION' ) ) { add_action( 'vc_after_init', array( $this, 'load_wpb_map_elements' ) ); add_filter( 'vc_autocomplete_porto_ab_posts_grid_builder_id_callback', 'builder_id_callback' ); add_filter( 'vc_autocomplete_porto_ab_posts_grid_builder_id_render', 'builder_id_render' ); //apply changed post add_action( 'wp_ajax_porto_archive_builder_preview_wpb_apply', array( $this, 'apply_preview_wpb_post' ) ); add_action( 'template_redirect', function() { $should_add_shortcodes = false; if ( ( is_singular( PortoBuilders::BUILDER_SLUG ) && 'archive' == get_post_meta( get_the_ID(), PortoBuilders::BUILDER_TAXONOMY_SLUG, true ) ) || ! empty( $_GET['vcv-ajax'] ) || ( function_exists( 'porto_is_ajax' ) && porto_is_ajax() && ! empty( $_GET[ PortoBuilders::BUILDER_SLUG ] ) ) ) { $should_add_shortcodes = true; } elseif ( function_exists( 'porto_check_builder_condition' ) && porto_check_builder_condition( 'archive' ) ) { $should_add_shortcodes = true; } if ( $should_add_shortcodes ) { $this->add_shortcodes(); } } ); add_action( 'admin_init', function() { $should_add_shortcodes = false; if ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && 'vc_save' == $_REQUEST['action'] ) { $should_add_shortcodes = true; } elseif ( isset( $_POST['action'] ) && 'editpost' == $_POST['action'] && isset( $_POST['post_type'] ) && PortoBuilders::BUILDER_SLUG == $_POST['post_type'] ) { $should_add_shortcodes = true; } if ( $should_add_shortcodes ) { $this->add_shortcodes(); } } ); } $this->find_preview(); } /** * Register archive shortcodes * * @since 2.3.0 * @access public */ public function elementor_custom_archive_shortcodes( $self ) { $load_widgets = false; if ( is_singular( PortoBuilders::BUILDER_SLUG ) && 'archive' == get_post_meta( get_the_ID(), PortoBuilders::BUILDER_TAXONOMY_SLUG, true ) ) { $load_widgets = true; } elseif ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && 'elementor_ajax' == $_REQUEST['action'] && ( ! empty( $_POST['editor_post_id'] ) || ! empty( $_POST['initial_document_id'] ) ) ) { $load_widgets = true; } elseif ( function_exists( 'porto_check_builder_condition' ) && porto_check_builder_condition( 'archive' ) ) { $load_widgets = true; } if ( apply_filters( 'porto_elementor_load_builder_widgets', $load_widgets, 'archive' ) ) { foreach ( $this->shortcodes as $shortcode ) { include_once PORTO_BUILDERS_PATH . 'elements/archive/elementor/' . $shortcode . '.php'; $class_name = 'Porto_Elementor_Archive_' . ucfirst( str_replace( '-', '_', $shortcode ) ) . '_Widget'; if ( class_exists( $class_name ) ) { $self->register( new $class_name( array(), array( 'widget_name' => $class_name ) ) ); } } } } /** * Add shortcodes for WPBakery elements * * @since 2.3.0 */ public function add_shortcodes() { add_shortcode( 'porto_ab_posts_grid', array( $this, 'shortcode_archive_posts_grid' ) ); } /** * Add WPBakery Page Builder Archive elements * * @since 2.3.0 */ public function load_wpb_map_elements() { if ( ! $this->display_wpb_elements ) { $this->display_wpb_elements = PortoBuilders::check_load_wpb_elements( 'archive' ); } if ( ! $this->display_wpb_elements ) { return; } $custom_class = porto_vc_custom_class(); $taxes = get_taxonomies( array( 'public' => true ), 'objects' ); unset( $taxes['post_format'] ); foreach ( $taxes as $tax_name => $tax ) { if ( 'product_' == substr( $tax_name, 0, 8 ) ) { unset( $taxes[ $tax_name ] ); } else { $taxes[ $tax_name ] = esc_html( $tax->label ); } } $taxes = apply_filters( 'porto_posts_grid_taxonomies', $taxes ); $left = is_rtl() ? 'right' : 'left'; $right = is_rtl() ? 'left' : 'right'; vc_map( array( 'name' => __( 'Archive Posts Grid', 'porto-functionality' ), 'base' => 'porto_ab_posts_grid', 'icon' => PORTO_WIDGET_URL . 'archive-posts.png', 'class' => 'porto-wpb-widget', 'category' => __( 'Archive Builder', 'porto-functionality' ), 'description' => __( 'Show archive elements in the layout which built using Post Type Builder.', 'porto-functionality' ), 'params' => array_merge( array( array( 'type' => 'porto_param_heading', 'param_name' => 'posts_layout', 'text' => __( 'Posts Selector', 'porto-functionality' ), ), array( 'type' => 'autocomplete', 'heading' => __( 'Post Layout', 'porto-functionality' ), 'param_name' => 'builder_id', 'settings' => array( 'multiple' => false, 'sortable' => true, 'unique_values' => true, ), /* translators: starting and end A tags which redirects to edit page */ 'description' => sprintf( __( 'Please select a saved Post Layout template which was built using the post type builder. Please create a new Post Layout template in %1$sPorto Templates Builder%2$s', 'porto-functionality' ), '<a href="' . esc_url( admin_url( 'edit.php?post_type=' . PortoBuilders::BUILDER_SLUG . '&' . PortoBuilders::BUILDER_TAXONOMY_SLUG . '=type' ) ) . '" target="_blank">', '</a>' ), 'admin_label' => true, ), array( 'type' => 'number', 'heading' => __( 'Count (per page)', 'porto-functionality' ), 'description' => __( 'Leave blank if you use default value.', 'porto-functionality' ), 'param_name' => 'count', 'admin_label' => true, ), array( 'type' => 'dropdown', 'heading' => __( 'Order by', 'porto-functionality' ), 'param_name' => 'orderby_term', 'value' => array( __( 'Default', 'porto-functionality' ) => '', __( 'Title', 'porto-functionality' ) => 'name', __( 'ID', 'porto-functionality' ) => 'term_id', __( 'Post Count', 'porto-functionality' ) => 'count', __( 'None', 'porto-functionality' ) => 'none', __( 'Parent', 'porto-functionality' ) => 'parent', __( 'Description', 'porto-functionality' ) => 'description', __( 'Term Group', 'porto-functionality' ) => 'term_group', ), 'std' => '', /* translators: %s: Wordpres codex page */ 'description' => sprintf( __( 'Select how to sort retrieved posts. More at %s.', 'porto-functionality' ), '<a href="http://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters" target="_blank">WordPress codex page</a>' ), 'dependency' => array( 'element' => 'source', 'value' => array( 'terms' ), ), ), array( 'type' => 'dropdown', 'heading' => __( 'Order way', 'porto-functionality' ), 'param_name' => 'order', 'value' => porto_vc_woo_order_way(), /* translators: %s: Wordpres codex page */ 'description' => sprintf( __( 'Designates the ascending or descending order. More at %s.', 'porto-functionality' ), '<a href="http://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters" target="_blank">WordPress codex page</a>' ), ), array( 'type' => 'porto_param_heading', 'param_name' => 'posts_layout', 'text' => __( 'Posts Layout', 'porto-functionality' ), ), array( 'type' => 'dropdown', 'heading' => __( 'View mode', 'porto-functionality' ), 'param_name' => 'view', 'value' => array( __( 'Grid', 'porto-functionality' ) => '', __( 'Grid - Creative', 'porto-functionality' ) => 'creative', __( 'Masonry', 'porto-functionality' ) => 'masonry', __( 'Slider', 'porto-functionality' ) => 'slider', ), 'admin_label' => true, ), array( 'type' => 'porto_image_select', 'heading' => __( 'Grid Layout', 'porto-functionality' ), 'description' => sprintf( esc_html__( 'Please %1$schange%2$s the %1$scount(per page) option%2$s as the number of creative grid items of the image above.', 'porto-functionality' ), '<span style="color: red">', '</span>' ), 'param_name' => 'grid_layout', 'dependency' => array( 'element' => 'view', 'value' => array( 'creative' ), ), 'std' => '1', 'value' => porto_sh_commons( 'masonry_layouts' ), ), array( 'type' => 'number', 'heading' => __( 'Grid Height (px)', 'porto-functionality' ), 'param_name' => 'grid_height', 'dependency' => array( 'element' => 'view', 'value' => array( 'creative' ), ), 'suffix' => 'px', 'std' => 600, ), array( 'type' => 'number', 'heading' => __( 'Column Spacing (px)', 'porto-functionality' ), 'description' => __( 'Leave blank if you use theme default value.', 'porto-functionality' ), 'param_name' => 'spacing', 'suffix' => 'px', 'std' => '', 'selectors' => array( '{{WRAPPER}}' => '--porto-el-spacing: {{VALUE}}px;', ), ), array( 'type' => 'dropdown', 'heading' => __( 'Columns', 'porto-functionality' ), 'param_name' => 'columns', 'std' => '4', 'value' => porto_sh_commons( 'products_columns' ), ), array( 'type' => 'dropdown', 'heading' => __( 'Add Half Column', 'porto-functionality' ), 'param_name' => 'half_column', 'value' => array( __( 'Default', 'porto-functionality' ) => '', __( 'Yes', 'porto-functionality' ) => 'yes', __( 'No', 'porto-functionality' ) => 'no', ), 'dependency' => array( 'element' => 'view', 'value' => array( 'slider' ), ), ), array( 'type' => 'dropdown', 'heading' => __( 'Columns on tablet ( <= 991px )', 'porto-functionality' ), 'param_name' => 'columns_tablet', 'std' => '', 'value' => array( __( 'Default', 'porto-functionality' ) => '', '1' => '1', '2' => '2', '3' => '3', '4' => '4', ), ), array( 'type' => 'dropdown', 'heading' => __( 'Add Half Column on tablet', 'porto-functionality' ), 'param_name' => 'half_column_tablet', 'value' => array( __( 'Default', 'porto-functionality' ) => '', __( 'Yes', 'porto-functionality' ) => 'yes', __( 'No', 'porto-functionality' ) => 'no', ), 'dependency' => array( 'element' => 'view', 'value' => array( 'slider' ), ), ), array( 'type' => 'dropdown', 'heading' => __( 'Columns on mobile ( <= 575px )', 'porto-functionality' ), 'param_name' => 'columns_mobile', 'std' => '', 'value' => array( __( 'Default', 'porto-functionality' ) => '', '1' => '1', '2' => '2', '3' => '3', ), ), array( 'type' => 'dropdown', 'heading' => __( 'Add Half Column on Mobile', 'porto-functionality' ), 'param_name' => 'half_column_mobile', 'value' => array( __( 'Default', 'porto-functionality' ) => '', __( 'Yes', 'porto-functionality' ) => 'yes', __( 'No', 'porto-functionality' ) => 'no', ), 'dependency' => array( 'element' => 'view', 'value' => array( 'slider' ), ), ), array( 'type' => 'dropdown', 'heading' => __( 'Pagination Type', 'porto-functionality' ), 'param_name' => 'pagination_style', 'value' => array( __( 'Default (No Ajax)', 'porto-functionality' ) => '', __( 'Ajax Pagination', 'porto-functionality' ) => 'ajax', __( 'Infinite Scroll (Ajax)', 'porto-functionality' ) => 'infinite', __( 'Load more (Ajax)', 'porto-functionality' ) => 'load_more', __( 'None', 'porto-functionality' ) => 'none', ), 'dependency' => array( 'element' => 'source', 'value' => array( '' ), ), ), array( 'type' => 'checkbox', 'heading' => __( 'Filter By Taxonomy', 'porto-functionality' ), 'param_name' => 'category_filter', 'std' => '', 'admin_label' => true, 'dependency' => array( 'element' => 'source', 'value' => array( '' ), ), ), array( 'param_name' => 'filter_cat_tax', 'type' => 'dropdown', 'heading' => __( 'Taxonomy', 'porto-functionality' ), 'description' => __( 'Please select a post taxonomy to be used as a category filter.', 'porto-functionality' ), 'value' => array_merge( array( __( 'Default', 'porto-functionality' ) => '' ), array_flip( $taxes ) ), 'label_block' => true, 'dependency' => array( 'element' => 'category_filter', 'not_empty' => true, ), ), array( 'type' => 'dropdown', 'heading' => __( 'Image Size', 'porto-functionality' ), 'param_name' => 'image_size', 'value' => porto_sh_commons( 'image_sizes' ), 'std' => '', 'dependency' => array( 'element' => 'view', 'value_not_equal_to' => 'creative', ), ), porto_vc_custom_class(), array( 'type' => 'porto_param_heading', 'param_name' => 'p_style', 'text' => __( 'Pagination Style', 'porto-functionality' ), 'dependency' => array( 'element' => 'pagination_style', 'value' => array( '', 'ajax' ), ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'dropdown', 'heading' => __( 'Horizontal Align', 'porto-functionality' ), 'param_name' => 'p_align', 'value' => array( __( 'Default', 'porto-functionality' ) => '', __( 'Left', 'porto-functionality' ) => 'flex-start', __( 'Center', 'porto-functionality' ) => 'center', __( 'Right', 'porto-functionality' ) => 'flex-end', ), 'dependency' => array( 'element' => 'pagination_style', 'value' => array( '', 'ajax' ), ), 'selectors' => array( '{{WRAPPER}} .pagination' => 'justify-content: {{VALUE}};', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'porto_dimension', 'heading' => __( 'Set custom margin of pagination part.', 'porto-functionality' ), 'param_name' => 'p_margin', 'value' => '', 'dependency' => array( 'element' => 'pagination_style', 'value' => array( '', 'ajax' ), ), 'selectors' => array( '{{WRAPPER}} .pagination-wrap' => 'margin-top:{{TOP}}; margin-right:{{RIGHT}}; margin-bottom:{{BOTTOM}}; margin-left: {{LEFT}};', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'porto_param_heading', 'param_name' => 'lm_style', 'text' => __( 'Load More Button Style', 'porto-functionality' ), 'dependency' => array( 'element' => 'pagination_style', 'value' => 'load_more', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'dropdown', 'heading' => __( 'Width', 'porto-functionality' ), 'param_name' => 'lm_width', 'value' => array( '100%' => '', 'auto' => 'auto', ), 'dependency' => array( 'element' => 'pagination_style', 'value' => 'load_more', ), 'selectors' => array( '{{WRAPPER}} .load-more .next' => 'width: {{VALUE}};', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'porto_typography', 'heading' => __( 'Typography', 'porto-functionality' ), 'param_name' => 'lm_typography', 'dependency' => array( 'element' => 'pagination_style', 'value' => 'load_more', ), 'selectors' => array( '{{WRAPPER}} .load-more .next', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'porto_dimension', 'heading' => __( 'Padding', 'porto-functionality' ), 'description' => __( 'Controls padding value of button.', 'porto-functionality' ), 'param_name' => 'lm_padding', 'value' => '', 'dependency' => array( 'element' => 'pagination_style', 'value' => 'load_more', ), 'selectors' => array( '{{WRAPPER}} .load-more .next' => 'padding-top: {{TOP}};padding-right: {{RIGHT}};padding-bottom: {{BOTTOM}};padding-left: {{LEFT}};', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'number', 'heading' => __( 'Spacing (px)', 'porto-functionality' ), 'description' => __( 'Controls the spacing of load more button.', 'porto-functionality' ), 'param_name' => 'lm_spacing', 'suffix' => 'px', 'dependency' => array( 'element' => 'pagination_style', 'value' => 'load_more', ), 'selectors' => array( '{{WRAPPER}} .pagination-wrap' => 'margin-top: {{VALUE}}px;', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'colorpicker', 'heading' => __( 'Color', 'porto-functionality' ), 'description' => __( 'Controls the color of the button.', 'porto-functionality' ), 'param_name' => 'lm_color', 'dependency' => array( 'element' => 'pagination_style', 'value' => 'load_more', ), 'selectors' => array( '{{WRAPPER}} .load-more .next' => 'color: {{VALUE}};', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'colorpicker', 'heading' => __( 'Hover Color', 'porto-functionality' ), 'description' => __( 'Controls the hover color of the button.', 'porto-functionality' ), 'param_name' => 'lm_color_hover', 'dependency' => array( 'element' => 'pagination_style', 'value' => 'load_more', ), 'selectors' => array( '{{WRAPPER}} .load-more .next:hover' => 'color: {{VALUE}};', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'colorpicker', 'heading' => __( 'Background Color', 'porto-functionality' ), 'description' => __( 'Controls the background color of the button.', 'porto-functionality' ), 'param_name' => 'lm_back_color', 'dependency' => array( 'element' => 'pagination_style', 'value' => 'load_more', ), 'selectors' => array( '{{WRAPPER}} .load-more .next' => 'background-color: {{VALUE}};', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'colorpicker', 'heading' => __( 'Hover Background Color', 'porto-functionality' ), 'description' => __( 'Controls the hover background color of the button.', 'porto-functionality' ), 'param_name' => 'lm_back_color_hover', 'dependency' => array( 'element' => 'pagination_style', 'value' => 'load_more', ), 'selectors' => array( '{{WRAPPER}} .load-more .next:hover' => 'background-color: {{VALUE}};', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'colorpicker', 'heading' => __( 'Border Color', 'porto-functionality' ), 'description' => __( 'Controls the border color of the button.', 'porto-functionality' ), 'param_name' => 'lm_border_color', 'dependency' => array( 'element' => 'pagination_style', 'value' => 'load_more', ), 'selectors' => array( '{{WRAPPER}} .load-more .next' => 'border-color: {{VALUE}};', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'colorpicker', 'heading' => __( 'Hover Border Color', 'porto-functionality' ), 'description' => __( 'Controls the hover border color of the button.', 'porto-functionality' ), 'param_name' => 'lm_border_color_hover', 'dependency' => array( 'element' => 'pagination_style', 'value' => 'load_more', ), 'selectors' => array( '{{WRAPPER}} .load-more .next:hover' => 'border-color: {{VALUE}};', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'porto_param_heading', 'param_name' => 'filter_style', 'text' => __( 'Filters Style', 'porto-functionality' ), 'dependency' => array( 'element' => 'category_filter', 'not_empty' => true, ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'dropdown', 'heading' => __( 'Alignment', 'porto-functionality' ), 'param_name' => 'filter_align', 'description' => __( 'Controls filters\' alignment. Choose from Left, Center, Right.', 'porto-functionality' ), 'value' => array( __( 'Default', 'porto-functionality' ) => '', __( 'Left', 'porto-functionality' ) => 'flex-start', __( 'Center', 'porto-functionality' ) => 'center', __( 'Right', 'porto-functionality' ) => 'flex-end', ), 'dependency' => array( 'element' => 'category_filter', 'not_empty' => true, ), 'selectors' => array( '{{WRAPPER}} .sort-source' => 'justify-content: {{VALUE}};', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'number', 'heading' => __( 'Between Spacing (px)', 'porto-functionality' ), 'description' => __( 'Controls the spacing between filters.', 'porto-functionality' ), 'param_name' => 'filter_between_spacing', 'suffix' => 'px', 'dependency' => array( 'element' => 'category_filter', 'not_empty' => true, ), 'selectors' => array( '{{WRAPPER}} .sort-source li' => "margin-{$right}: {{VALUE}}px;", '{{WRAPPER}} .sort-source li' => 'margin-bottom: {{VALUE}}px;', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'number', 'heading' => __( 'Bottom Spacing (px)', 'porto-functionality' ), 'description' => __( 'Controls the spacing of the filters.', 'porto-functionality' ), 'param_name' => 'filter_spacing', 'suffix' => 'px', 'dependency' => array( 'element' => 'category_filter', 'not_empty' => true, ), 'selectors' => array( '{{WRAPPER}} .sort-source' => 'margin-bottom: {{VALUE}}px;', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'porto_dimension', 'heading' => __( 'Item Padding', 'porto-functionality' ), 'param_name' => 'filter_it_padding', 'responsive' => true, 'dependency' => array( 'element' => 'category_filter', 'not_empty' => true, ), 'selectors' => array( '{{WRAPPER}} .sort-source a' => 'padding-top: {{TOP}};padding-right: {{RIGHT}};padding-bottom: {{BOTTOM}};padding-left: {{LEFT}};', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'porto_dimension', 'heading' => __( 'Border Radius', 'porto-functionality' ), 'param_name' => 'filter_it_radius', 'dependency' => array( 'element' => 'category_filter', 'not_empty' => true, ), 'selectors' => array( '{{WRAPPER}} .sort-source a' => 'border-top-left-radius: {{TOP}};border-top-right-radius: {{RIGHT}};border-bottom-right-radius: {{BOTTOM}};border-bottom-left-radius: {{LEFT}};', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'porto_typography', 'heading' => __( 'Typography', 'porto-functionality' ), 'param_name' => 'filter_typography', 'dependency' => array( 'element' => 'category_filter', 'not_empty' => true, ), 'selectors' => array( '{{WRAPPER}} .sort-source a', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'colorpicker', 'heading' => __( 'Item Background Color', 'porto-functionality' ), 'description' => __( 'Controls the item\'s background color.', 'porto-functionality' ), 'param_name' => 'filter_normal_bgc', 'dependency' => array( 'element' => 'category_filter', 'not_empty' => true, ), 'selectors' => array( '{{WRAPPER}} .sort-source a' => 'background-color: {{VALUE}};', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'colorpicker', 'heading' => __( 'Item Color', 'porto-functionality' ), 'description' => __( 'Controls the item\'s color.', 'porto-functionality' ), 'param_name' => 'filter_normal_color', 'dependency' => array( 'element' => 'category_filter', 'not_empty' => true, ), 'selectors' => array( '{{WRAPPER}} .sort-source a' => 'color: {{VALUE}};', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'colorpicker', 'heading' => __( 'Item Active Background Color', 'porto-functionality' ), 'description' => __( 'Controls the item\'s active and hover background color.', 'porto-functionality' ), 'param_name' => 'filter_active_bgc', 'dependency' => array( 'element' => 'category_filter', 'not_empty' => true, ), 'selectors' => array( '{{WRAPPER}} .sort-source li.active > a, {{WRAPPER}} .sort-source a:hover, {{WRAPPER}} .sort-source a:focus' => 'background-color: {{VALUE}};', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'colorpicker', 'heading' => __( 'Item Active Color', 'porto-functionality' ), 'description' => __( 'Controls the item\'s active and hover color.', 'porto-functionality' ), 'param_name' => 'filter_active_color', 'dependency' => array( 'element' => 'category_filter', 'not_empty' => true, ), 'selectors' => array( '{{WRAPPER}} .sort-source li.active > a, {{WRAPPER}} .sort-source a:hover, {{WRAPPER}} .sort-source a:focus' => 'color: {{VALUE}};', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'textarea', 'heading' => __( 'Nothing Found Message', 'porto-functionality' ), 'param_name' => 'post_found_nothing', 'value' => __( 'It seems we can\'t find what you\'re looking for.', 'porto-functionality' ), 'admin_label' => true, 'group' => __( 'Advanced', 'porto-functionality' ), ), array( 'type' => 'porto_typography', 'heading' => __( 'Typography', 'porto-functionality' ), 'param_name' => 'nothing_msg_typography', 'dependency' => array( 'element' => 'post_found_nothing', 'not_empty' => true, ), 'selectors' => array( '{{WRAPPER}}.nothing-found-message', ), 'group' => __( 'Advanced', 'porto-functionality' ), ), array( 'type' => 'colorpicker', 'heading' => __( 'Color', 'porto-functionality' ), 'description' => __( 'Controls the color of message.', 'porto-functionality' ), 'param_name' => 'nothing_msg_color', 'dependency' => array( 'element' => 'post_found_nothing', 'not_empty' => true, ), 'selectors' => array( '{{WRAPPER}}.nothing-found-message' => 'color: {{VALUE}};', ), 'group' => __( 'Advanced', 'porto-functionality' ), ), array( 'type' => 'css_editor', 'heading' => __( 'CSS', 'porto-functionality' ), 'param_name' => 'css_design', 'group' => __( 'Design', 'porto-functionality' ), 'edit_field_class' => 'vc_col-sm-12 vc_column no-vc-background no-vc-border creative_link_css_editor', ), ), porto_vc_product_slider_fields( 'slider' ) ), ) ); } /** * Add archive preview controls for elementor */ public function register_elementor_preview_controls( $document ) { if ( ! $document instanceof Elementor\Core\DocumentTypes\PageBase && ! $document instanceof Elementor\Modules\Library\Documents\Page ) { return; } // Add Template Builder Controls $id = (int) $document->get_main_id(); if ( $id && 'archive' == get_post_meta( get_the_ID(), PortoBuilders::BUILDER_TAXONOMY_SLUG, true ) ) { $_post_types = get_post_types( array( 'public' => true, 'show_in_nav_menus' => true, ), 'objects' ); $post_types = array(); foreach ( $_post_types as $post_type => $object ) { if ( ! in_array( $post_type, array( 'page', 'product' ) ) ) { $post_types[ $post_type ] = sprintf( esc_html__( '%s Archive', 'porto-functionality' ), $object->labels->singular_name ); } } $document->start_controls_section( 'archive_preview_settings', array( 'label' => esc_html__( 'Preview Settings', 'porto-functionality' ), 'tab' => Controls_Manager::TAB_SETTINGS, ) ); $document->add_control( 'archive_preview_type', array( 'label' => esc_html__( 'Preview Dynamic Content as', 'porto-functionality' ), 'description' => __( '<span style="color: red;">Please save and refresh page for editing dynamic field after changing this option.</span>', 'porto-functionality' ), 'label_block' => true, 'type' => Controls_Manager::SELECT, 'default' => ! empty( $this->edit_post_type ) ? $this->edit_post_type : 'post', 'groups' => array( 'archive' => array( 'label' => esc_html__( 'Archive', 'porto-functionality' ), 'options' => $post_types, ), ), 'export' => false, ) ); $document->add_control( 'archive_preview_apply', array( 'type' => Controls_Manager::BUTTON, 'label' => esc_html__( 'Apply & Preview', 'porto-functionality' ), 'label_block' => true, 'show_label' => false, 'text' => esc_html__( 'Apply & Preview', 'porto-functionality' ), 'separator' => 'none', ) ); $document->end_controls_section(); } } /** * Find the registered post type * * @since 2.3.0 */ public function find_preview() { if ( $this->preview_mode ) { return; } if ( ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && 'elementor_ajax' == $_REQUEST['action'] ) || ( isset( $_REQUEST['post'] ) && PortoBuilders::BUILDER_SLUG == get_post_type( (int) $_REQUEST['post'] ) ) || ( function_exists( 'vc_is_inline' ) && vc_is_inline() ) ) { $post_id = 0; if ( ! empty( $_REQUEST['post'] ) ) { $post_id = (int) $_REQUEST['post']; } if ( ! empty( $_REQUEST['post_id'] ) ) { $post_id = (int) $_REQUEST['post_id']; } if ( ! $post_id ) { $post_id = get_the_ID(); } if ( 'archive' != get_post_meta( $post_id, PortoBuilders::BUILDER_TAXONOMY_SLUG, true ) ) { return; } $edit_post = get_post_meta( $post_id, 'preview_id', true ); $this->edit_post = $edit_post ? $edit_post : 'post'; $this->edit_post_type = $this->edit_post; $this->preview_mode = true; } } /** * Apply preview mode in ajax */ public function apply_preview_el_post() { check_ajax_referer( 'porto-elementor-nonce', 'nonce' ); update_post_meta( (int) $_REQUEST['post_id'], 'preview_id', sanitize_title( $_REQUEST['mode'] ) ); die; } /** * Apply preview mode in ajax - WP Bakery * * @since 2.3.0 */ public function apply_preview_wpb_post() { check_ajax_referer( 'porto-admin-nonce', 'nonce' ); update_post_meta( (int) $_REQUEST['post_id'], 'preview_id', sanitize_title( $_REQUEST['mode'] ) ); die; } /** * Archive Posts Grid Shortcode * * @since 2.3.0 */ public function shortcode_archive_posts_grid( $atts ) { if ( ! $this->preview_mode ) { $this->find_preview(); } if ( empty( $atts ) ) { $atts = array(); } if ( $this->preview_mode ) { if ( ! porto_is_archive() && ! ( is_singular( PortoBuilders::BUILDER_SLUG ) || ( isset( $_REQUEST['context'] ) && 'edit' == $_REQUEST['context'] ) || ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && 'elementor_ajax' == $_REQUEST['action'] ) || ( wp_doing_ajax() && empty( $_GET['vc_editable'] ) ) ) ) { return null; } $atts['post_type'] = $this->edit_post; $atts['preview_archive'] = true; } else { global $wp_query; $post_type = isset( $wp_query->query_vars ) && ! empty( $wp_query->query_vars['post_type'] ) ? $wp_query->query_vars['post_type'] : ''; if ( ! $post_type ) { $post_types_exclude = apply_filters( 'porto_condition_exclude_post_types', array( PortoBuilders::BUILDER_SLUG, 'attachment', 'elementor_library', 'page', 'ae_global_templates' ) ); $available_post_types = get_post_types( array( 'public' => true ) ); foreach ( $available_post_types as $p_type ) { $taxonomy_array = get_object_taxonomies( $p_type ); if ( ! in_array( $p_type, $post_types_exclude ) && ( $wp_query->is_post_type_archive( $p_type ) || ( ! empty( $taxonomy_array ) && $wp_query->is_tax( $taxonomy_array ) ) ) ) { $post_type = $p_type; break; } } } if ( ! $post_type ) { $post_type = 'post'; } if ( is_array( $post_type ) ) { $post_type = $post_type[0]; } $atts['post_type'] = $post_type; $atts['shortcode_type'] = 'archive'; } if ( $template = porto_shortcode_template( 'porto_posts_grid' ) ) { $internal_css = ''; if ( defined( 'WPB_VC_VERSION' ) && empty( $atts['page_builder'] ) ) { // Shortcode class $shortcode_class = ' wpb_custom_' . PortoShortcodesClass::get_global_hashcode( $atts, 'porto_ab_posts_grid', array( array( 'param_name' => 'spacing', 'selectors' => true, ), array( 'param_name' => 'p_align', 'selectors' => true, ), array( 'param_name' => 'p_margin', 'selectors' => true, ), array( 'param_name' => 'lm_width', 'selectors' => true, ), array( 'param_name' => 'lm_typography', 'selectors' => true, ), array( 'param_name' => 'lm_padding', 'selectors' => true, ), array( 'param_name' => 'lm_spacing', 'selectors' => true, ), array( 'param_name' => 'lm_color', 'selectors' => true, ), array( 'param_name' => 'lm_back_color', 'selectors' => true, ), array( 'param_name' => 'lm_border_color', 'selectors' => true, ), array( 'param_name' => 'lm_color_hover', 'selectors' => true, ), array( 'param_name' => 'lm_back_color_hover', 'selectors' => true, ), array( 'param_name' => 'lm_border_color_hover', 'selectors' => true, ), array( 'param_name' => 'filter_align', 'selectors' => true, ), array( 'param_name' => 'filter_between_spacing', 'selectors' => true, ), array( 'param_name' => 'filter_spacing', 'selectors' => true, ), array( 'param_name' => 'filter_it_padding', 'selectors' => true, ), array( 'param_name' => 'filter_it_radius', 'selectors' => true, ), array( 'param_name' => 'filter_typography', 'selectors' => true, ), array( 'param_name' => 'filter_normal_bgc', 'selectors' => true, ), array( 'param_name' => 'filter_normal_color', 'selectors' => true, ), array( 'param_name' => 'filter_active_bgc', 'selectors' => true, ), array( 'param_name' => 'filter_active_color', 'selectors' => true, ), array( 'param_name' => 'nothing_msg_typography', 'selectors' => true, ), array( 'param_name' => 'nothing_msg_color', 'selectors' => true, ), array( 'param_name' => 'dots_pos_top', 'selectors' => true, ), array( 'param_name' => 'dots_pos_bottom', 'selectors' => true, ), array( 'param_name' => 'dots_pos_left', 'selectors' => true, ), array( 'param_name' => 'dots_pos_right', 'selectors' => true, ), array( 'param_name' => 'dots_br_color', 'selectors' => true, ), array( 'param_name' => 'dots_abr_color', 'selectors' => true, ), array( 'param_name' => 'dots_bg_color', 'selectors' => true, ), array( 'param_name' => 'dots_abg_color', 'selectors' => true, ), array( 'param_name' => 'dots_original', 'selectors' => true, ), array( 'param_name' => 'dots_visible', 'selectors' => true, ), array( 'param_name' => 'nav_visible', 'selectors' => true, ), array( 'param_name' => 'nav_fs', 'selectors' => true, ), array( 'param_name' => 'nav_width', 'selectors' => true, ), array( 'param_name' => 'nav_height', 'selectors' => true, ), array( 'param_name' => 'nav_br', 'selectors' => true, ), array( 'param_name' => 'navs_h_origin', 'selectors' => true, ), array( 'param_name' => 'nav_h_pos', 'selectors' => true, ), array( 'param_name' => 'nav_v_pos', 'selectors' => true, ), array( 'param_name' => 'nav_color', 'selectors' => true, ), array( 'param_name' => 'nav_h_color', 'selectors' => true, ), array( 'param_name' => 'nav_bg_color', 'selectors' => true, ), array( 'param_name' => 'nav_h_bg_color', 'selectors' => true, ), array( 'param_name' => 'nav_br_color', 'selectors' => true, ), array( 'param_name' => 'nav_h_br_color', 'selectors' => true, ), array( 'param_name' => 'flick_opacity', 'selectors' => true, ), ) ); if ( isset( $_REQUEST['vc_editable'] ) && ( true == $_REQUEST['vc_editable'] ) ) { $style_array = apply_filters( 'porto_shortcode_render_internal_css', 'porto_ab_posts_grid', $atts ); if ( is_array( $style_array ) ) { foreach ( $style_array as $key => $value ) { if ( 'responsive' == $key ) { $internal_css .= $value; } else { $internal_css .= $key . '{' . $value . '}'; } } } } } elseif ( defined( 'ELEMENTOR_VERSION' ) ) { if ( empty( $atts['spacing'] ) ) { $atts['spacing'] = ''; } if ( ! empty( $atts['count'] ) && is_array( $atts['count'] ) ) { if ( isset( $atts['count']['size'] ) ) { $atts['count'] = $atts['count']['size']; } } } ob_start(); include $template; $result = ob_get_clean(); if ( $result && $internal_css ) { $first_tag_index = strpos( $result, '>' ); if ( $first_tag_index ) { $internal_css = porto_filter_inline_css( $internal_css, false ); if ( $internal_css ) { $result = substr( $result, 0, $first_tag_index + 1 ) . '<style>' . wp_strip_all_tags( $internal_css ) . '</style>' . substr( $result, $first_tag_index + 1 ); } } } return $result; } } } endif; PortoBuildersArchive::get_instance();
Save
Cancel