Domanda

Sto avendo un bug molto particolare con impaginazione :( Sto cercando di visualizzare 4 posti per pagina per una categoria con lumaca "lastest-news".

La funzione di impaginazione sembra funzionare correttamente. Ci sono 33 messaggi. L'impaginazione viene costruito correttamente con 9 pagine e link di seguente formato: categoria / / lastest-news / page //

La cosa interessante è che funziona correttamente (la visualizzazione di 4 messaggi per pagina) dalla pagina 1-4 compreso. Tuttavia, per le pagine 5-9 non funziona affatto. Non sembra nemmeno di servire il modello ... l'unico errore che ho potuto individuare sia della pagina che dice "Nulla trovati per Categoria Lastest-news Page 5".

Vorrei capire se non funziona affatto, ma per il modo casuale 4 pagine e non più?

Vorrei davvero davvero apprezzare alcun aiuto! Ho spendere circa oltre 4 ore cercando di capire ciò che è sbagliato e mi rode.

Grazie per un aiuto:)

Sto utilizzando il seguente codice per la query:

<?php 
$page = get_query_var('paged');
$posts_on_page = new WP_Query("posts_per_page=4&category_name=lastest-news&paged=".$page);

//loop to display every one of 4 posts

//pagination
pagination($posts_on_page->max_num_pages);
?>

sto usando la funzione di impaginazione da questo post: http://www.kriesi.at/archives/how-to-build-a-wordpress-post-pagination-without-plugin

Questa è la funzione (che sembra funzionare bene):

function pagination($pages = '', $range = 2){  
 $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'>";
     if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo "<a href='".get_pagenum_link(1)."'>&laquo;</a>";
     if($paged > 1 && $showitems < $pages) echo "<a href='".get_pagenum_link($paged - 1)."'>&lsaquo;</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)."'>&rsaquo;</a>";  
     if ($paged < $pages-1 &&  $paged+$range-1 < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($pages)."'>&raquo;</a>";
     echo "</div>\n";
 }
}
È stato utile?

Soluzione

WordPress fa il suo propria query in ogni pagina. È necessario modificare la query, invece di crearne uno nuovo. Quello che succede ora è che WordPress fa una query con i messaggi normali per pagina di 10, ma non si fa nulla con questi risultati e fare la propria query. Questo funziona ... fino WordPress va oltre post # 33, che è il numero di pagina 4.

  1. WordPress interroga 1-10, il modello di query 1-4
  2. WordPress interroga 11-20, il modello di query 5-8
  3. WordPress interroga 21-30, il modello interroga 9-12
  4. WordPress interroga 31-40, il modello interroga 13-16
  5. WordPress interroga 41-50, ma ottiene alcun risultato, in modo che dà 404. Il modello non viene caricato.

Così, invece si dovrebbe modificare la query standard che WordPress eseguirà, ponendo questo nella vostra functions.php o in un plugin:

add_action( 'pre_get_posts', 'wpse7687_pre_get_posts' );
function wpse7687_pre_get_posts( &$wp_query ) {
    if ( $wp_query->is_category && 'latest-news' == $wp_query->get_queried_object()->slug ) {
        $wp_query->set( 'posts_per_page', 4 );
    }
}

Altri suggerimenti

In base a @Jan Fabry risposta ho modificare la sintassi un po '. Funziona bene. Grazie Jan per la spiegazione !!!

add_action( 'pre_get_posts', 'wpse7687_pre_get_posts' );
function wpse7687_pre_get_posts( &$wp_query ) {
  if ($wp_query->query_vars['category_name'] == 'latest-news'){
    $wp_query->query_vars['posts_per_page'] = 4;
  }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a wordpress.stackexchange
scroll top