)->query->encode_provider_data( $this->get_id(), $query_id ); return $args; } /** * Get provider name */ public function get_name() { return __( 'JetEngine', 'jet-smart-filters' ); } /** * Get provider ID */ public function get_id() { return 'jet-engine'; } /** * Get filtered provider content */ public function ajax_get_content() { if ( ! function_exists( 'jet_engine' ) ) { return; } add_filter( 'jet-engine/listing/grid/posts-query-args', array( $this, 'add_query_args' ), 10, 2 ); if ( jet_engine()->has_elementor() ) { Elementor\Plugin::instance()->frontend->start_excerpt_flag( null ); } $attrs = isset( $_REQUEST['settings'] ) ? $this->sanitize_settings( $_REQUEST['settings'] ) : array(); $render = jet_engine()->listings->get_render_instance( 'listing-grid', $attrs ); $render->render(); } /** * Get provider wrapper selector */ public function get_wrapper_selector() { return apply_filters( 'jet-smart-filters/providers/jet-engine/selector', '.jet-listing-grid.jet-listing' ); } /** * Get provider list selector */ public function get_list_selector() { return '.jet-listing-grid__items'; } /** * Get provider list item selector */ /* public function get_item_selector() { return '.jet-listing-grid__item'; } */ /** * Action for wrapper selector - 'insert' into it or 'replace' */ public function get_wrapper_action() { return 'replace'; } /** * If added unique ID this paramter will determine - search selector inside this ID, or is the same element */ public function in_depth() { return true; } /** * Pass args from reuest to provider */ public function apply_filters_in_request() { $args = jet_smart_filters()->query->get_query_args(); if ( ! $args ) { return; } add_filter( 'jet-engine/listing/grid/posts-query-args', array( $this, 'add_query_args' ), 20, 2 ); } /** * Updates the arguments based on the offset parameter */ public function query_maybe_has_offset( $args ) { if ( isset( $args['offset'] ) ){ add_filter( 'found_posts', array( $this, 'adjust_offset_pagination' ), 1, 2 ); if ( isset( $args['paged'] ) ) { $args['offset'] = $args['offset'] + ( ( $args['paged'] - 1 ) * $args['posts_per_page'] ); } } return $args; } /** * Adjusts page number shift */ function adjust_offset_pagination( $found_posts, $query ) { $found_posts = (int) $found_posts; $offset = (int) $query->get( 'offset' ); if ( $query->get( 'jet_smart_filters' ) && ! empty( $offset ) ){ $paged = $query->get( 'paged' ); $posts_per_page = $query->get( 'posts_per_page' ); if ( 0 < $paged ){ $offset = $offset - ( ( $paged - 1 ) * $posts_per_page ); } return $found_posts - $offset; } return $found_posts; } /** * Add custom query arguments */ public function add_query_args( $args, $widget ) { if ( 'jet-listing-grid' !== $widget->get_name() ) { return $args; } if ( ! jet_smart_filters()->query->is_ajax_filter() ) { $settings = $widget->get_settings(); if ( empty( $settings['_element_id'] ) ) { $query_id = 'default'; } else { $query_id = $settings['_element_id']; } $request_query_id = jet_smart_filters()->query->get_current_provider( 'query_id' ); if ( $query_id !== $request_query_id ) { return $args; } // Replace global wp_query if is archive template $is_archive_template = isset( $settings['is_archive_template'] ) ? $settings['is_archive_template'] : false; $is_archive_template = filter_var( $is_archive_template, FILTER_VALIDATE_BOOLEAN ); if ( $is_archive_template ) { global $wp_query; $archive_query_vars = array_merge( $wp_query->query_vars, jet_smart_filters()->query->get_query_args() ); $archive_query_vars = $this->query_maybe_has_offset( $archive_query_vars ); $wp_query = new WP_Query( $archive_query_vars ); return $archive_query_vars; } } if ( jet_smart_filters()->query->is_ajax_filter() ) { remove_filter( 'jet-engine/listing/grid/posts-query-args', array( $this, 'add_query_args' ), 10, 2 ); } $query_args = jet_smart_filters()->utils->merge_query_args( $args, jet_smart_filters()->query->get_query_args() ); $query_args = $this->query_maybe_has_offset( $query_args ); return $query_args; } } }