Добрый день. Суть проблемы. Для вывода данных на страницу используется фильтр, $_POST параметры от пользователя. Для пагинации использую встроенную функцию: (для проверки вывел пост данные) PHP: print_r($_POST); the_posts_pagination(array( 'mid_size' => 1, 'prev_next' => true, ) ); То есть, первая страница данные есть, переходим на вторую, $_POST пустой. Решил передать пост данные таким образом: PHP: print_r($_POST); the_posts_pagination(array( 'mid_size' => 1, 'prev_next' => true, 'add_args' => $_POST ) ); Итак перехожу на вторую страницу и $_POST превращается, угадайте во что? в $_GET. Я удивился такой трансмогрификации. И Вот пишу вам сюда, подскажите как можно передать $_POST на следующую страницу чтобы он не изменился.
Протестируй на отдельной странице. Ссылка с параметрами в обоих случаях одинаковая? Ну должно по факту измениться только page=1 / 2 И проблема возникает только со 2-й страницей? А если обратно на 1-ю перейти? Теоретически может повлиять перенаправление, сверь ссылки в обоих случаях и/или добавь ещё какой-то параметр к ней))
@lastdays Нет, все в разы проще. Человек передает на страцу 1 используя пост данные. У него согласно его данным создается пагинация. Например такая: HTML: <a class="page-numbers" href="/page/1/">1</a> <a class="page-numbers" href="/page/2/">2</a> <a class="page-numbers" href="/page/3/">3</a> <a class="page-numbers" href="/page/2/">Далее</a> Человек жмет 2 или Далее, переходит на страницу страцу 2 . Естественно его пост данных на второй странице нет, его фильтр сбрасывается. Я вижу только решение с помощью js. Перехватить событие и перейти на 2ую страницу с пост данными Просто я думал что у этой функции the_posts_pagination есть какое то решение по поводу этого --- Добавлено --- @lastdays вообще если разбираешься в wp может что то посоветуешь, этот фильтр работает так: PHP: $custom_filter = new WP_Query($args); /* тут магия чтобы эта пагинация вообще работала */ $temp_query = $wp_query; $wp_query = NULL; $wp_query = $custom_filter; /* конец магии, даже не спрашивай на кой хрен это нужно */ if ( $custom_filter->have_posts() ) : while ( $custom_filter->have_posts() ) : $custom_filter->the_post(); endwhile endif; the_posts_pagination(array( 'mid_size' => 1, 'prev_next' => true, ) ); /* отголоски магии */ $wp_query = NULL; $wp_query = $temp_query;
Решил проблему таким образом, в интернетах такого нет, берите на заметку: PHP: <?php $custom_filter = new WP_Query($args); /* тут магия чтобы эта пагинация вообще работала */ $temp_query = $wp_query; $wp_query = NULL; $wp_query = $custom_filter; /* конец магии, даже не спрашивай на кой хрен это нужно */ if ( $custom_filter->have_posts() ) : while ( $custom_filter->have_posts() ) : $custom_filter->the_post(); endwhile endif; the_posts_pagination(array( 'mid_size' => 1, 'prev_next' => true, ) ); /* отголоски магии */ $wp_query = NULL; $wp_query = $temp_query; ?> <div id="form-container" style="display: none"></div> <script> jQuery('#my-form-pagination ul li a').click(function(event) { event.preventDefault(); var href = $(this).attr( "href" ); var obj = <?=json_encode($_POST)?>; $('#form-container').append( $('<form />', { action: href, method: 'POST' })); for (var prop in obj) { $('#form-container form').append( $('<input />', { name: prop, value: obj[prop] }) ); } $('#form-container form').submit(); }); </script> как побочный эффект от js есть задержка в одну секунду --- Добавлено --- Я пробовал не создавая dom объект, но не получилось так: Код (Javascript): var formData = new FormData(); for (var prop in obj) { formData.append(prop, obj[prop]); } formData.submit(); //не работает
Походу костыль. Не применительно к WP, а вообще это делается через Post-Redirect-Get. Т.е. ты уже в ответ на первый и единственный POST не должен ничего выводить, а преобразовывать POST-параметры фильтрации в GET-параметры (или во фрагмент пути) и делать по полученному адресу редирект. В постраничной навигации эти параметры должны наследоваться. P.S. Некоторые даже сразу GETом с формы делают.
Да костыль, но работает. По другому не получилось. Да с GET параметрами бы все работало. но url будет некрасивый, параметров много. --- Добавлено --- Сейчас чтобы не было задержки, пробую без записи формы на страницу
Тут поисковик не при делах. Есть POST форма поиска на сайте, по ней пользователь ищет данные. Там много параметров, например как тут слева https://www.svyaznoy.ru/catalog/phone/225 Пользователь выбрал фильтр. Но когда по отфильтрованым товарам он переходит на страницу 2, фильтр сбрасывается. И чтобы post не потерялся, прикрутил туда js. Из за этого теряется где то 0.5 секунд производительности.
На самом деле можно извратиться, и сделать пагинацию через post, а параметры передавать через hidden-ы, это наверное будет быстрее чем через js Но это реально извращение))) --- Добавлено --- //то есть вместо ссылок - сделать сабмиты, и отправлять каждый раз новую форму со скрытыми полями