Как сделать результаты фильтрации и сортировки на новой странице

У меня есть фильтр (на основе пользовательского значения поля), и запрос сортировки появляется на каждой странице архива, которая работает очень хорошо. Я ищу сообщения, основанные на значении фильтра (время чтения менее 5 минут, например), а затем сортирует результаты по выбору пользователя. Это поисковый запрос Ajax, который отображает результаты на той же странице. Теперь я хочу, чтобы они интегрировались на главной странице, но я хочу, чтобы результаты отображались на новой странице. Как я могу достичь этого, поскольку я не знаю, какие изменения должны быть сделаны, несмотря на десятки статей, которые я прочитал? Вот форма и функции:

functions.php

function pm_add_search_form() { if (is_archive()) { ?> <!--Search form--> <div class="archive-filter-from"> <form action="<?php echo site_url() ?>/wp-admin/admin-ajax.php" method="POST" id="filter"> <?php //Pick current category id $cat_id = get_query_var('cat'); ?> <input type="hidden" name="postcat" id="hiddenField" value="<?php echo $cat_id = get_query_var('cat') ?>" /> <select name="readtimefilter"> <option value="" disabled>Read time</option> <option value="5">0-5 Minutes</option> <option value="10">6-10 Minutes</option> <option value="11">11+ Minutes</option> </select> <select name="sortbyfilter"> <option value="" disabled>Sort by</option> <option value="orderby=date&order=dsc">Newest</option> <option value="orderby=date&order=asc">Oldest</option> <option value="orderby=title&order=asc">Title Asc</option> <option value="orderby=title&order=dsc">Title Desc</option> <option value="orderby=comment_count&order=dsc">Most Comments</option> <option value="orderby=comment_count&order=asc">Least Comments</option> </select> <button>Refine</button> <input type="hidden" name="action" value="myfilter"> </form> </div> <!--End Search form--> <?php } } function pm_filter_function() { /* for taxonomies / categories*/ $cat_id_val = $_POST['postcat']; $args = array( 'cat' => $cat_id_val, ); /* Sort by*/ if (isset($_POST['sortbyfilter']) && $_POST['sortbyfilter']) { $order = $_POST['sortbyfilter']; switch ($order) { case 'orderby=date&order=dsc': $args['orderby'] = array( 'date' => 'DESC' ); break; case 'orderby=date&order=asc': $args['orderby'] = array( 'date' => 'ASC' ); break; case 'orderby=title&order=asc': $args['orderby'] = array( 'title' => 'ASC' ); break; case 'orderby=title&order=dsc': $args['orderby'] = array( 'title' => 'DESC' ); break; } } // Fiter by read time if (isset($_POST['readtimefilter']) && $_POST['readtimefilter']) { $args['meta_query'] = array( 'relation' => 'AND' ); } // AND means that all conditions of meta_query should be true if (isset($_POST['readtimefilter']) && $_POST['readtimefilter']) { $read_time = (int)$_POST['readtimefilter']; if ($read_time == 5) { $args['meta_query'][] = array( 'key' => 'post_read_time', 'value' => $read_time + 1, 'type' => 'numeric', 'compare' => '<' ); } elseif ($read_time == 10) { $args['meta_query'][] = array( 'key' => 'post_read_time', 'value' => array( 6, 11 ) , 'type' => 'numeric', 'compare' => 'between' ); } else { $args['meta_query'][] = array( 'key' => 'post_read_time', 'value' => $read_time, 'type' => 'numeric', 'compare' => '>' ); } } $query = new WP_Query($args); if ($query->have_posts()): while ($query->have_posts()): $query->the_post(); $query->set('category_name', $cat_id_val); pm_post_summary(); pm_add_archive_buttons(); endwhile; wp_reset_postdata(); else: echo 'No posts found'; endif; die(); } add_action('wp_ajax_myfilter', 'pm_filter_function'); add_action('wp_ajax_nopriv_myfilter', 'pm_filter_function');