settings['posts_num'] ) + 1; } else { $start_from = false; } if ( jet_engine()->has_elementor() ) { Elementor\Plugin::instance()->frontend->start_excerpt_flag( null ); } $render_instance->posts_loop( $posts, $widget_settings, $base_class, $equal_cols_class, $start_from ); $response['html'] = ob_get_clean(); self::maybe_add_enqueue_assets_data( $response ); $response = apply_filters( 'jet-engine/ajax/listing_load_more/response', $response, $widget_settings ); wp_send_json_success( $response ); } /** * Get whole listing through AJAX */ public function get_listing() { $query = ! empty( $_REQUEST['query'] ) ? $_REQUEST['query'] : array(); $widget_settings = ! empty( $_REQUEST['widget_settings'] ) ? $_REQUEST['widget_settings'] : array(); $response = array(); /* This code has been moved to the `add_settings_to_request` method. if ( $queried_id && 'WP_Post' === $queried_obj_type ) { global $post; $post = get_post( $queried_id ); } */ $_widget_settings = $widget_settings; $is_lazy_load = ! empty( $widget_settings['lazy_load'] ) ? filter_var( $widget_settings['lazy_load'], FILTER_VALIDATE_BOOLEAN ) : false; // Reset `lazy_load` to avoid looping. if ( $is_lazy_load ) { $widget_settings['lazy_load'] = ''; if ( jet_engine()->has_elementor() ) { Elementor\Plugin::instance()->frontend->start_excerpt_flag( null ); } } if ( empty( $widget_settings['lisitng_id'] ) ) { wp_send_json_success( array( 'html' => __( 'Request data is incorrect', 'jet-engine' ) ) ); } ob_start(); $render_instance = jet_engine()->listings->get_render_instance( 'listing-grid', $widget_settings ); /* The setup of current object has been moved to the `add_settings_to_request` method. if ( $is_lazy_load && $queried_id ) { switch ( $queried_obj_type ) { case 'WP_Post': jet_engine()->listings->data->set_current_object( get_post( $queried_id ) ); break; case 'WP_Term': jet_engine()->listings->data->set_current_object( get_term( $queried_id ) ); break; } } */ if ( $is_lazy_load && ! empty( $query ) && empty( $query['query_id'] ) ) { // for Archive pages jet_engine()->listings->data->set_listing_by_id( $widget_settings['lisitng_id'] ); if ( isset( $query['suppress_filters'] ) ) { $query['suppress_filters'] = filter_var( $query['suppress_filters'], FILTER_VALIDATE_BOOLEAN ); } $posts_query = new WP_Query( $query ); $posts = $posts_query->posts; $render_instance->posts_query = $posts_query; $render_instance->query_vars['page'] = $posts_query->get( 'paged' ) ? $posts_query->get( 'paged' ) : 1; $render_instance->query_vars['pages'] = $posts_query->max_num_pages; $render_instance->query_vars['request'] = $query; $render_instance->posts_template( $posts, $widget_settings ); } else { $render_instance->render_content(); } $response['html'] = ob_get_clean(); self::maybe_add_enqueue_assets_data( $response ); $response = apply_filters( 'jet-engine/ajax/get_listing/response', $response, $_widget_settings, $query ); wp_send_json_success( $response ); } public function find_element_recursive( $elements, $element_id ) { foreach ( $elements as $element ) { if ( $element_id === $element['id'] ) { return $element; } if ( ! empty( $element['elements'] ) ) { $element = $this->find_element_recursive( $element['elements'], $element_id ); if ( $element ) { return $element; } } } return false; } public static function maybe_add_enqueue_assets_data( &$response ) { if ( isset( $_REQUEST['isEditMode'] ) && filter_var( $_REQUEST['isEditMode'], FILTER_VALIDATE_BOOLEAN ) ) { return; } // Ensure registered `jet-plugins` script. if ( ! wp_script_is( 'jet-plugins', 'registered' ) ) { jet_engine()->frontend->register_jet_plugins_js(); } wp_scripts()->done[] = 'jquery'; wp_scripts()->done[] = 'jet-plugins'; wp_scripts()->done[] = 'jet-engine-frontend'; $scripts = wp_scripts()->queue; $styles = wp_styles()->queue; if ( ! empty( $scripts ) ) { $response['scripts'] = array(); foreach ( (array) $scripts as $script ) { ob_start(); wp_scripts()->do_items( $script ); $script_html = ob_get_clean(); $response['scripts'][ $script ] = $script_html; } } if ( ! empty( $styles ) ) { $response['styles'] = array(); foreach ( (array) $styles as $style ) { ob_start(); wp_styles()->do_items( $style ); $style_html = ob_get_clean(); $response['styles'][ $style ] = $style_html; } } } } }