Intereting Posts
Запрос SQL для возврата категорий и категорий родителей Как сортировать результаты из таблицы пользовательских баз данных Следующие сообщения Предыдущие сообщения только для стандартного почтового формата Включая style.css в Child Theme Как отображать только две категории Вместо отображения всех категорий повторно отправить имя пользователя и пароль с помощью настраиваемой кнопки Галерея IDS и титры: скрыть / показать на основе идентификатора показать скрытую ul, если li активна родная галерея wordpress – ссылка на разные размеры изображения? Написать письмо Показать последнее сообщение в полном объеме, выдержки из старых сообщений Можно ли использовать функции WordPress в шаблоне страницы? Отображение постоянного значка Google Plus на всех страницах моего сайта Получить результат запроса в соответствии с объединенным массивом Есть ли виджет WordPress для моей веб-страницы?

Ajax Pagination на фильтре Ajax

Следуя этому замечательному учебному пособию, я выполнил разбивку на страницы Ajax с помощью прокрутки: https://www.billerickson.net/infinite-scroll-in-wordpress/ .

Теперь я добавил второй вызов Ajax, чтобы отфильтровать сообщения по категориям, и я хотел бы сделать pagination также для фильтрованных сообщений.

Поэтому я решил сделать что-то подобное в функции filter_posts () в functions.php:

function filter_posts() { global $wp_query; $args['category_name'] = $_POST['passed_slug_via_ajax']; query_posts($args); [loop] wp_send_json_success( $data ); }; 

Я думал, что таким образом, т.е. используя query_posts , текущий запрос global $wp_query; был изменен, чтобы включить фильтр $args['category_name'] , поэтому, когда я запускаю функцию «больше сообщений», она будет разбивать на страницы отфильтрованные результаты:

 // more posts" function function more_posts() { global $wp_query; $args['paged'] = $_POST['passed_page_via_ajax']; query_posts($args); [loop] wp_send_json_success( $data ); }; 

Ни в коем случае: функция tiggered more_posts() не применяет фильтр …

Поэтому я попытался вручную изменить global $wp_query; таким образом, в функции filter_posts() :

 function filter_posts() { global $wp_query; $args['category_name'] = $_POST['passed_slug_via_ajax']; query_posts($args); [loop] $wp_query->set( "category_name", $_POST['passed_slug_via_ajax'] ); wp_send_json_success( $data ); }; 

Но это не работает …

Возможно, я не понял, как global $wp_query; оно работает?

Solutions Collecting From Web of "Ajax Pagination на фильтре Ajax"

Как блестяще отметил @Milo, в WordPress нет такой вещи, как глобальный объект запроса.

Поэтому я решил проблему через JS, например:

  var isFiltered = false; var filters; $(load_more_button).click(function(e) { load_more_handler(e); }); $(filters_form).submit(function(e) { filter_handler(e); }); function filter_handler(e) { isFiltered = true; filters = $(this).serialize(); var data = { action: 'ajax_filter', query: php_vars.query, // // query is got from wp_localize_script() filters: filters }; $.post(php_vars.adminAjaxUrl, data, function(res) { [etc] }; function load_more_handler(e) { var data = { action: 'ajax_load_more', query: php_vars.query, // query is got from wp_localize_script() page: page, isFiltered: isFiltered, filters: filters }; $.post(php_vars.adminAjaxUrl, data, function(res) { [etc] }; 

и в functions.php что-то вроде:

 function ajax_load_more_posts() { $args = isset( $_POST['query'] ) ? array_map( 'esc_attr', $_POST['query'] ) : array(); if( isset($_POST['isFiltered']) && ( $_POST['isFiltered'] ) ) { $filters = $_POST['filters']; $args = wp_parse_args(get_ajax_filters($filters), $args); // get_ajax_filters() is a custom utility function of mine to combine filters passed by Ajax and $args }; [loop] wp_die(); } ; add_action( 'wp_ajax_ajax_load_more', 'ajax_load_more_posts' ); add_action( 'wp_ajax_nopriv_ajax_load_more', 'ajax_load_more_posts' );