2015-05-13 3 views
0

У меня проблема с разбиением на страницы 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(); ?> 

Любая помощь будет здорово, спасибо!

ответ

0
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
$args = array('post_type' => 'post', 
       'post__in' => $wynik, 
       'cat'  => 10, 
       'paged'  => $paged 
      ); 
$the_query=new WP_Query($args); 

попробуйте этот.

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 

Это важная деталь, возможно, вас упущено.

+0

Спасибо за ваш ответ, но, к сожалению, это не поможет. Тем не менее, когда я использую фильтры, разбиение на страницы использует полный запрос. Другие идеи? – Sunrise

+0

Хорошо, я думаю, что проблема в том, что, когда я нажимаю, например, ссылку на вторую страницу, моя переменная '$ _POST' arent't отправлена. И фильтр сбрасывается. Но как я могу вспомнить эти переменные? Я не могу использовать get вместо post. – Sunrise

+0

вам нужно отредактировать ссылку на страницы ... вам нужно отправить $ _get данные снова с той же ссылкой в ​​pagination –

Смежные вопросы