Wordpress 分页不适用于过滤器

问题描述 投票:0回答:1

我遇到了 WordPress 分页问题。我有一个查询,它会生成帖子列表:

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

其中

$wynik
是带有帖子 id 的数组。该数组是基于过滤器创建的,用户可以使用它来过滤帖子。

当不使用过滤器时,分页工作正常,因此会显示查询中的所有帖子。但是,当我使用一些过滤器并想要显示例如自定义字段中具有特定值的帖子时,分页工作起来很奇怪。我的查询工作正常,我可以在自定义字段中显示具有特定值的帖子,但分页仍然认为查询已满,因此即使我只有 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(); ?>

任何帮助都会很棒,谢谢!

php wordpress pagination
1个回答
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;

这是重要的部分,可能你会错过。

© www.soinside.com 2019 - 2024. All rights reserved.