Problème:
Lorsque je fais www.example.com?cat=4 ou que je choisis une catégorie dans un menu personnalisé ou à partir du widget de catégorie, il affiche uniquement la première page sans navigation en bas, là où il est supposé être. C'est la même chose si j'utilise index.php ou category-slug.php comme modèle. Pour le test, quand je fais www.example.com?year=2012 cela fonctionne. Www.example.com?cat=4&paged=2 fonctionne également. Donc, il doit y avoir quelque chose avec les catégories.
Ma configuration:Wordpress 3.5, Gratuit WP thème du tube, SQLite
Code pertinent:/ index.php
<?php get_header(); ?>
<!-- code to get theme options and setup $orderby -->
query_posts($query_string.$orderby.'&cat=4'); //in this case showing category with navigation works
if (have_posts()) : ?>
<?php $i=0; while (have_posts()) : the_post(); $i++; ?>
<!-- code for displaying posts -->
<?php if($i%3==0) : ?><div class="clear"></div><?php endif; ?>
<?php endwhile; wp_reset_query(); ?>
<?php
$next_page = get_next_posts_link('Previous');
$prev_pages = get_previous_posts_link('Next');
if(!empty($next_page) || !empty($prev_pages)) :
?>
<!-- navigation -->
<div class="navigation">
<?php if(!function_exists('wp_pagenavi')) : ?>
<div class="alignleft"><?php echo $next_page; ?></div>
<div class="alignright"><?php echo $prev_pages; ?></div>
<?php else : wp_pagenavi(); endif; ?>
</div>
<!-- /navigation -->
<?php endif; ?>
Remarque: vous pouvez voir que j'utilise le &cat=4
dans la requête. C'est la même chose que category_name=video
parce que je veux afficher uniquement les vidéos sur la page d'accueil. Mais aussi, je veux pouvoir choisir cette catégorie dans un menu personnalisé, auquel cas la navigation dans les pages n’est pas affichée.
Ce que j'ai essayé:
Faire $wp_query = null
puis faire une nouvelle requête avant la boucle. http://wordpress.org/support/topic/next-page-navigation-doesnt-work . Fondamentalement, toute variation de cette
<?php
$myqueryname = $wp_query;
$wp_query = null;
$wp_query = new WP_Query();
$wp_query->query('showposts=5'.'&paged='.$paged);
?>
Ça ne marche pas.
Ajout de $ pagré comme suggéré par le créateur de WP-pagenavi et des forums:
<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ?>
<?php query_posts("cat=-11&paged='.$paged);; ?>
Ça ne marche pas.
Tests:en plus des plus simples dans la partie "problème" de la question que j’ai faite print_r($wp_query)
pour voir où le problème commence et qui commence tout de suite, c.-à-d. quand je mets print_r($wp_query)
comme première ligne de header.php. Donc, le problème ne réside pas dans la requête personnalisée du thème, n'est-ce pas? Je l'ai fait pour le travail $ wp_query et ne pas travailler $ wp_query puis comparé. Voici la partie de comparaison pertinente du code: Working $ wp_query:
[category_name] =>
[cat] => 4
...
**//most important part**
[found_posts] => 382
[max_num_pages] => 43
...
[request] => SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') ORDER BY wp_posts.post_date DESC LIMIT 0, 9
...
//here shows code for some posts even if not displaying them, because they're not in the cat=4 or category_name=video
non-travail $ wp_query:
[category_name] => video
[cat] => 4
...
**//most important part**
[found_posts] => 1
[max_num_pages] => 1
...
[tax_query] => WP_Tax_Query Object
(
[queries] => Array
(
[0] => Array
(
[taxonomy] => category
[terms] => Array
(
[0] => video
)
[include_children] => 1
[field] => slug
[operator] => IN
)
)
[relation] => AND
)
...
[query] => Array
(
[category_name] => video
)
[request] => SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) WHERE 1=1 AND ( wp_term_relationships.term_taxonomy_id IN (4) ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 9
...
//this $wp_query doesn't show code for the posts which are not from video category
...
[queried_object] => objArray Object
(
[term_id] => 4
[name] => Video
[slug] => video
[term_group] => 0
[term_taxonomy_id] => 4
[taxonomy] => category
[description] =>
[parent] => 0
[count] => 379
[cat_ID] => 4
[category_count] => 379
[category_description] =>
[cat_name] => Video
[category_nicename] => video
[category_parent] => 0
)
Edit # 1:Ceci est la comparaison AVANT la requête personnalisée! Lorsque j'ai vidé $ wp_query à l'intérieur de la boucle, après la fonction query_posts()
personnalisée, ils sont identiques. Donc, le problème ne réside pas dans la $ wp_query. De même, depuis le code index.php, get_next_posts_link('Previous')
renvoie NULL lorsque vous choisissez un menu de formulaire de catégorie ou ?category_name=video
Conclusion:il se passe quelque chose avant les fichiers modèles avec la requête par défaut, mais je ne sais pas quoi. Quelqu'un peut-il m'aider à afficher la navigation de page?
Edit # 2:Depuis que get_next_posts_link('Previous')
renvoie NULL, je savais que le $wp_query->max_num_pages;
avait quelque chose de particulier. Ce nombre devait être supérieur à 1 pour afficher la navigation. J'ai donc testé en mettant le code <pre><?php echo $wp_query->max_num_pages; ?></pre>
pour voir quand il passe de 1 à> 1. J'ai découvert que dans la version de travail, il change après la <?php endwhile; wp_reset_query(); ?>
et qu'il ne fonctionne pas, il ne change pas.
J'ai trouvé une solution partielle. Puisque l'objet de requête dans index.php est le bon, je l'ai transféré à l'aide de l'option serialize to template de choix, dans ce cas category-video.php.
Dans index.php je mets en haut
<?php $s = serialize($wp_query);
file_put_contents('query',$s); ?>
et dans category-video.php je mets
<?php $u = file_get_contents('query');
$wp_the_query = unserialize($u); ?>
Ce n'est pas la solution, mais c'est une solution de contournement et la navigation dans les pages est affichée et fonctionne partiellement maintenant. Les numéros de navigation n’affichent pas correctement la page actuelle, mais les versions précédentes et suivantes fonctionnent et vous pouvez également cliquer sur le numéro de page. C'est le plugin Wp-PageNavi.
Édition: Je fixe également les numéros de page. Pour une raison quelconque, après que wp_reset_query()
$wp_query->get('paged')
ait retourné un mauvais numéro, ne me demandez pas pourquoi, je ne sais pas. J'ai donc pris $ paged d'avant et défini une nouvelle requête après wp_reset_query.
query_posts($query_string.$orderby);
$my_page = $wp_query->get('paged')
/*code for looping the posts*/
wp_reset_query();
set_query_var('paged',$my_page);
Maintenant, le WP-pagenavi affiche les numéros de page corrects.
EDIT: le problème est dans le plugin PDO et Sqlite, je l'ai testé.