Paginarea nu funcționează în template-ul de rezultate căutare

18 iul. 2013, 12:36:09
Vizualizări: 13.6K
Voturi: 0

Nu reușesc să fac paginarea să funcționeze corect în template-ul meu de rezultate căutare. Linkurile de pagină apar, dar când accesez pagina 2, primesc o eroare 404.

Search.php

<?php
global $wp_query;
$total_results = $wp_query->found_posts;
?>

<?php
if(!$wp_query) global $wp_query;
$search_refer = $_GET["post_type"];
if ($search_refer == 'archive') { load_template(TEMPLATEPATH . '/search-gallery.php');}
else{load_template(TEMPLATEPATH . '/search-standard.php');}
?>

Codul de Paginare în Functions.php

function pagination($pages = '', $range = 4){  
 $showitems = ($range * 2)+1;  

 global $paged;
 if(empty($paged)) $paged = 1;

 if($pages == '')
 {
     global $wp_query;
     $pages = $wp_query->max_num_pages;
     if(!$pages)
     {
         $pages = 1;
     }
 }   

 if(1 != $pages)
 {
     echo "<div class=\"pagination\"><span>Pagina ".$paged." din ".$pages."</span>";
     if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo "<a href='".get_pagenum_link(1)."'>&laquo; Prima</a>";
     if($paged > 1 && $showitems < $pages) echo "<a href='".get_pagenum_link($paged - 1)."'>&lsaquo; Anterior</a>";

     for ($i=1; $i <= $pages; $i++)
     {
         if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems ))
         {
             echo ($paged == $i)? "<span class=\"current\">".$i."</span>":"<a href='".get_pagenum_link($i)."' class=\"inactive\">".$i."</a>";
         }
     }

     if ($paged < $pages && $showitems < $pages) echo "<a href=\"".get_pagenum_link($paged + 1)."\">Următoarea &rsaquo;</a>";  
     if ($paged < $pages-1 &&  $paged+$range-1 < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($pages)."'>Ultima &raquo;</a>";
     echo "</div>\n";
 }
}

Template-ul de Rezultate Căutare

<?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $search_query = array(
        'posts_per_page' => '10',
        'paged' => $paged,
        );
    $wp_query = new WP_Query($search_query);

    if ($wp_query->have_posts()) : while ($wp_query->have_posts()) : $wp_query->the_post(); ?>


<div class="courseContent coursesLayout alumniMainContent alumniSpacing newsBoxMore">
        <div class="courseContentHolder alumniContentHolder newsBoxMainHolder">
            <div class="newsMainImage">
                <?php the_post_thumbnail(); ?>
            </div>

            <div class="alumniHeading newsMainHeading">
                <h5><?php the_title();?></h5>
            </div>

            <div class="alumniContent newsMainContent">
                <?php the_excerpt(); ?> 
            </div>
        </div>
        <span class="readmoreButton" style="display: inline !important;"><a title="Premii Studenți" href="<?php the_permalink();?>">Citește mai mult</a></span>
</div><?php edit_post_link('Editează'); ?>
<?php endwhile; ?><?php else : ?>       
    <p class="notfoundtext">Ne pare rău, nu s-au găsit rezultate care să corespundă căutării. Încercați din nou?</p>
<?php endif; ?>     

<?php pagination(); ?>

Aveți sugestii?

1
Comentarii

Aceasta este marcată ca fiind o duplicată, dar nu există nicio legătură către un alt răspuns.

strattonn strattonn
31 oct. 2014 00:35:33
Toate răspunsurile la întrebare 2
1

Pagina 1 care se repetă este de obicei o problemă legată de wp_query. O eroare 404 este o problemă de permalinkuri - încearcă să le setezi la valorile implicite și verifică dacă problema persistă. Dacă nu, atunci revino la setările personalizate și problema ar trebui să fie rezolvată.

Dacă permalinkurile implicite îți dau o eroare 404 pe pagina a doua, atunci trebuie să analizăm mai atent codul de paginare. Personal, sunt fan al codului lui Justin Tadlock pentru că este impecabil.

https://github.com/justintadlock/hybrid-core/blob/master/extensions/loop-pagination.php

18 iul. 2013 13:08:30
Comentarii

Am schimbat structura permalinkurilor înapoi la cea standard și a făcut același lucru, problema cu eroarea 404, apoi am încercat codul lui Justin Tadlock dar afișează un comportament ciudat, are pagina 1 care se repetă și linkul către pagina 1 este evidențiat indiferent pe ce pagină mă aflu!

RoseCoder RoseCoder
18 iul. 2013 13:24:43
7

Suprascrieți variabila $wp_query în cadrul șablonului de căutare. Aceasta înseamnă că interogarea principală care rulează înainte de încărcarea șablonului de căutare va fi dez sincronizată cu variabila $wp_query din șablon. Acest lucru poate cauza erori 404.

Deoarece singurul lucru pe care îl faceți este modificarea parametrului posts_per_page, un simplu callback pre_get_posts va rezolva cel puțin o parte din această problemă.

function alter_search_ppp_wpse_106961($qry) {
  if ($qry->is_main_query() && $qry->is_search()) {
    $qry->set('post_per_page',10);
  }
}
add_action('pre_get_posts','alter_search_ppp_wpse_106961');

Cu această funcție implementată, nu mai aveți nevoie și ar trebui să eliminați următorul cod:

$search_query = array(
    'posts_per_page' => '10',
    'paged' => $paged,
    );
$wp_query = new WP_Query($search_query);

Nu știu de ce ați implementat propria soluție de paginare și nu pot spune doar privind codul dacă acesta va genera probleme în structura URL-urilor, dar vă sugerez să analizați funcția paginate_links

18 iul. 2013 17:08:30
Comentarii

Mulțumesc, m-am gândit că poate suprascria $wp_query. Am încercat pre_get_posts dar nu a făcut nimic

RoseCoder RoseCoder
19 iul. 2013 10:35:33

"nu a făcut nimic" nu este foarte descriptiv.

s_ha_dum s_ha_dum
19 iul. 2013 16:35:45

Codul pe care l-ai dat nu a produs nicio schimbare în ceea ce privește funcționarea paginării. Când am efectuat o căutare, nu a limitat la 10 postări pe pagină, a afișat toate. Am încercat să elimin paginarea personalizată și să adaug paginate_links dar nu a făcut nimic. E mai bine acum?

RoseCoder RoseCoder
19 iul. 2013 21:11:32

Care este numele fișierului tău de șablon de căutare .php?

s_ha_dum s_ha_dum
19 iul. 2013 21:22:16

Am search.php care conține codul din întrebarea mea originală, care direcționează către alte două șabloane, iar cel pe care vreau să funcționeze paginarea se numește search-standard.php

RoseCoder RoseCoder
19 iul. 2013 21:27:42

Încearcă din nou. A fost o greșală de tipar. Dacă tot nu funcționează, probabil condiția is_search nu este îndeplinită din cauza modului în care jonglezi cu șabloanele.

s_ha_dum s_ha_dum
19 iul. 2013 21:39:25

Mulțumesc, am încercat și testat dar fără succes! Poate voi renunța la idee, dar vă mulțumesc foarte mult pentru ajutor, apreciez enorm!

RoseCoder RoseCoder
19 iul. 2013 22:13:23
Arată celelalte 2 comentarii