У меня проблема с разбиением на страницы Wordpress. У меня есть запрос, который генерирует списки сообщений:Wordpress pagination не работает с фильтрами
$args = array('post_type' => 'post', 'post__in' => $wynik, 'cat' => 10,'paged' => $paged);
$the_query=new WP_Query($args);
Где $wynik
массив с идентификатором сообщений. Этот массив создается на основе фильтров, с помощью которого пользователь может фильтровать сообщения.
Пейджирование отлично работает, если фильтры не используются, поэтому отображаются все сообщения из запроса. Но когда я использую некоторые фильтры и хочу отображать, например, сообщения с определенными значениями в настраиваемых полях, разбиение на страницы работает странно. Мой запрос работает отлично, я могу отображать сообщения с определенными значениями в настраиваемых полях, но разбиение на страницы по-прежнему считает, что запрос заполнен, поэтому, даже если у меня есть, например, только 5 результатов, разбиение на страницы все еще есть, и когда я нажимаю вторую страницу, вторая страница сообщений и теряет фильтры.
Это все на странице категории. Мои фильтры форма выглядит следующим образом (это часть):
<form role="form" action="<?php echo esc_url(home_url('/')); ?>?cat=10" method="post" id="formFiltr">
<div class="filter" id="skipfilter">
<div class="row">
<div class="large-18 columns">
<h3>Użyj filtrów, aby szybko odnaleźć interesujący Cię nabór:</h3>
</div>
</div>
<div class="row">
<div class="large-18 columns">
<span style="line-height: 30px; display: block;" class="filter-title">Pokaż według</span>
<div class="row">
<div class="large-18 columns">
<label for="wszystkie-nabory" title="Zaznacz, aby wyświetlić tylko ogłoszenia o naborach wniosków">
<input type="radio" value="4" onchange="" id="wszystkie-nabory" name="ogloszenie" onclick="this.form.submit();" <?php if (($_POST['ogloszenie']) == 4) echo 'checked';?>>
Ogłoszenia o naborach wniosków
</label>
</div>
<div class="large-18 columns">
<label for="tylko-wyniki">
<input type="radio" value="5" onchange="" id="tylko-wyniki" title="Zaznacz, aby wyświetlić tylko wyniki naborów wniosków" name="ogloszenie" onclick="this.form.submit();" <?php if (($_POST['ogloszenie']) == 5) echo 'checked';?>>
Tylko wyniki naborów wniosków
</label>
</div>
</div>
</div>
</div>
<div class="row">
<div class="large-18 small-9 columns">
<label class="filter-title" for="filter_Temat">Temat</label>
<?php
$wynikiQS = get_custom('wnioski_tematy');
$wynikiQS = explode('|',$wynikiQS);
?>
<select class="help MIRFiszkaFiltryTematNaboru" onchange="this.form.submit();" id="filter_Temat" name="temat">
<option style="padding-left:15px;" value=""> Wszystkie </option>
<?php foreach ($wynikiQS as $wynikQS) {
$wynikQS = (string)$wynikQS;
if (($_POST['temat']) == $wynikQS) echo '<option value="'.$wynikQS.'" class="filterItem" selected>'.$wynikQS.'</option>';
else echo '<option value="'.$wynikQS.'" class="filterItem">'.$wynikQS.'</option>';
} ?>
</select>
</div>
<div class="large-18 small-9 columns">
<label class="filter-title" for="filter_Wojewodztwo">Priorytet</label>
<?php
$wynikiQS1 = get_custom('wnioski_priorytety');
$wynikiQS1 = explode('|',$wynikiQS1);
?>
<select class="help MIRFiltryWojewodztwo" onchange="this.form.submit();" id="filter_Wojewodztwo" name="priorytet">
<option style="padding-left:15px;" value=""> Wszystkie </option>
<?php foreach ($wynikiQS1 as $wynikQS) {
if (($_POST['priorytet']) == $wynikQS) echo '<option value="'.$wynikQS.'" class="filterItem" selected>'.$wynikQS.'</option>';
else echo '<option value="'.$wynikQS.'" class="filterItem">'.$wynikQS.'</option>';
}?>
</select>
</div>
<div class="large-18 small-9 columns">
<label class="filter-title" for="filter_Program">Działanie</label>
<?php
$wynikiQS2 = get_custom('wnioski_dzialania');
$wynikiQS2 = explode('|',$wynikiQS2);
?>
<select class="help MIRFiszkaFiltryProgram" onchange="this.form.submit();" id="filter_Program" name="dzialanie">
<option style="padding-left:15px;" value=""> Wszystkie </option>
<?php foreach ($wynikiQS2 as $wynikQS) {
if (($_POST['dzialanie']) == $wynikQS) echo '<option value="'.$wynikQS.'" class="filterItem" selected>'.$wynikQS.'</option>';
else echo '<option value="'.$wynikQS.'" class="filterItem">'.$wynikQS.'</option>';
}?>
</select>
</div>
</div>
Генерация $wynik
:
///////////////// temat
if (!empty($_POST['temat'])) {
$temat = trim($_POST['temat']); // usuwamy spację z początku i końca, żeby działało zapytanie!!!!
$resultsT = $wpdb->get_results('SELECT post_id FROM wp_postmeta WHERE meta_key = "temat" AND meta_value = "'.$temat.'"', OBJECT);
if (!empty($resultsT))
{
$i = 0;
foreach ($resultsT as $result) {$wynikQ[$i] = $result->post_id; $i++;}
$wynik2 = $wynikQ; //szukanie elementów wspolnych dla wojewodztwa i wynik/ogloszenie
}
else $wynik2 = array();
}
else $wynik2 = $wynikr; //podstawianie pełnej tabiicy jesli nie ma wynikow wyszukiwania
///////////////// dzialanie
if (!empty($_POST['dzialanie'])) { //sprawdzanie wojewodztwa
$dzialanie = trim($_POST['dzialanie']);
$resultsD = $wpdb->get_results('SELECT post_id FROM wp_postmeta WHERE meta_key = "dziaania" AND meta_value = "'.$dzialanie.'"', OBJECT);
if (!empty($resultsD))
{
$i = 0;
foreach ($resultsD as $result) {$wynikQ[$i] = $result->post_id; $i++;}
$wynik3 = $wynikQ; //szukanie elementów wspolnych dla wojewodztwa i wynik/ogloszenie
}
else $wynik3 = array();
}
else $wynik3 = $wynikr; //podstawianie pełnej tabiicy jesli nie ma wynikow wyszukiwania
////////////////// priorytet
if (!empty($_POST['priorytet'])) { //sprawdzanie wojewodztwa
$priorytet = trim($_POST['priorytet']);
$resultsP = $wpdb->get_results('SELECT post_id FROM wp_postmeta WHERE meta_key = "priorytet" AND meta_value = "'.$priorytet.'"', OBJECT);
if (!empty($resultsP))
{
$i = 0;
foreach ($resultsP as $result) {$wynikQ[$i] = $result->post_id; $i++;}
$wynik1 = $wynikQ; //szukanie elementów wspolnych dla wojewodztwa i wynik/ogloszenie
}
else $wynik1 = array();
}
else $wynik1 = $wynikr; //podstawianie pełnej tabiicy jesli nie ma wynikow wyszukiwania
$wynik = array_intersect($wynikr,$wynik1, $wynik2, $wynik3, $wynik4, $wynik5, $wynik6, $wynikData);
И запрос:
if (!empty($wynik))
{
$args = array('post_type' => 'post', 'post__in' => $wynik, 'cat' => 10,'paged' => $paged);
$the_query=new WP_Query($args);
$data=serialize($the_query);
$encoded=htmlentities($data);
if ($the_query->have_posts()) : ?>
<section class="large-12 columns applications-content" aria-relevant="all" aria-atomic="true" aria-live="assertive">
<div id="inp">
<h2 class="filter-headline">
Dostępne <b><?php echo $the_query->found_posts;?> ogłoszeń naborów wniosków</b> ze wszystkich kategorii<br>
</h2>
<ul id="applications-list">
<?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
<?php $meta = get_post_meta(get_the_ID());
//print_r($meta);
$program = $meta['program'][0];
$dzialanie = $meta['dzialanie'][0];
$url = get_the_permalink();
$dataOD = $meta['termin_naboru_wniosku_rozpoczcie'][0];
$dataDO = $meta['termin_naboru_wniosku_zakoczenie'][0];
?>
<!-- Właściwe wyniki wyszukiwania -->
<li class="row">
<div class="large-18 columns">
<div onclick="<?php echo $url;?>';" style="border-color: #d60582" class="info">
<div>
<?php $nr_p = explode(' ',$program);
echo $program;
?>
<strong class="small">
<?php $nr_d = explode(' ',$dzialanie);
echo $nr_d[0];
?>
</strong>
</div>
</div>
<div class="right-info">
<a class="title" href="<?php echo $url;?>"><?php echo get_the_title();?></a>
<p>
<span class="status">
<?php
if ($dataOD > $today) $status = 'Planowany';
if ($dataDO < $today) $status = 'Zakończony';
if (($dataOD <= $today) && ($dataDO >= $today)) $status = 'Aktualny';
echo $status; ?>
</span>
<span aria-label="Data naboru wniosków" class="date">
<i class="icon ico-blackclock"></i>
<span>od</span>
<span> <?php echo $dataOD;?></span>
<span>do</span>
<span> <?php echo $dataDO;?></span>
</span>
</p>
</div>
</div>
</li>
<?php endwhile; ?>
</ul>
<ul class="pager pagenav">
<?php wp_pagenavi(); ?>
</ul>
</div> <!-- #inp -->
</section>
<?php wp_reset_postdata(); ?>
Любая помощь будет здорово, спасибо!
Спасибо за ваш ответ, но, к сожалению, это не поможет. Тем не менее, когда я использую фильтры, разбиение на страницы использует полный запрос. Другие идеи? – Sunrise
Хорошо, я думаю, что проблема в том, что, когда я нажимаю, например, ссылку на вторую страницу, моя переменная '$ _POST' arent't отправлена. И фильтр сбрасывается. Но как я могу вспомнить эти переменные? Я не могу использовать get вместо post. – Sunrise
вам нужно отредактировать ссылку на страницы ... вам нужно отправить $ _get данные снова с той же ссылкой в pagination –