Problem:
当我访问www.example时。com?cat=4或通过自定义菜单选择类别,或从类别小部件中选择类别,它只显示第一页,而不在底部显示导航。如果我使用索引也是一样的。php或类别slug。php作为模板。为了测试,当我访问www.example时。com?年份=2012有效。此外,www.example。com?类别=4(&;paged=2个作品。所以它一定是有类别的。
My setup:Wordpress 3.5,免费WP tube主题,SQLite
Relevant code:指数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; ?>
注意:您可以看到我正在使用
&cat=4
在查询中。它与
category_name=video
因为我只想在主页上显示视频。而且,我希望能够从自定义菜单中选择该类别,在这种情况下,不会显示页面导航。
What I have tried:
制作
$wp_query = null
然后在循环之前进行新查询。
http://wordpress.org/support/topic/next-page-navigation-doesnt-work.基本上任何变化
<?php
$myqueryname = $wp_query;
$wp_query = null;
$wp_query = new WP_Query();
$wp_query->query(\'showposts=5\'.\'&paged=\'.$paged);
?>
不起作用。
根据WP pagenavi和论坛的创建者的建议添加$paged:
<?php $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1; ?>
<?php query_posts("cat=-11&paged=\'.$paged);; ?>
不起作用。
Testings:除了问题的“问题”部分的简单内容外,我还做了print_r($wp_query)
一路看问题从哪里开始,它从一开始就开始,即当我把print_r($wp_query)
作为标题中的第一行。php。所以,问题不在于主题的自定义查询,对吗?我对工作$wp\\u查询和不工作$wp\\u查询进行了比较。这是代码的相关比较部分:Working$wp\\u查询:
[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
非工作$wp\\u查询:
[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: 这是自定义查询之前的比较!在自定义
query_posts()
它们是相同的。因此,问题不在$wp\\u查询中。此外,从索引。php代码
get_next_posts_link(\'Previous\')
选择类别窗体菜单或
?category_name=video
Conclusion:在使用默认查询的模板文件之前发生了一些事情,但我不知道发生了什么。有人能帮我显示页面导航吗?
Edit #2: 自get_next_posts_link(\'Previous\')
返回NULL我知道这是关于$wp_query->max_num_pages;
该数字必须大于1才能显示导航。所以我通过输入代码进行测试<pre><?php echo $wp_query->max_num_pages; ?></pre>
查看它何时从1更改为>1。我发现在工作版本中<?php endwhile; wp_reset_query(); ?>
在非工作状态下,它不会改变。
最合适的回答,由SO网友:cikatomo 整理而成
我找到了一个部分解决方法。由于索引中的查询对象。php是我使用serialize to template of choice(在本例中是类别视频)传输它的正确方法。php。
在索引中。php我放在上面
<?php $s = serialize($wp_query);
file_put_contents(\'query\',$s); ?>
和分类视频。php我输入
<?php $u = file_get_contents(\'query\');
$wp_the_query = unserialize($u); ?>
这不是解决方案,但它是一种变通方法,页面导航现在正在显示并部分工作。导航上的数字不能正确显示当前页面,但“上一页”和“下一页”都能正常工作,单击页码也能正常工作。这是Wp PageNavi插件。
Edit: 我还固定了页码。由于某种原因wp_reset_query()
$wp_query->get(\'paged\')
返回了错误的号码,不要问我为什么,我不知道。因此,我从之前获取$paged,并在wp\\u reset\\u查询之后设置新的查询变量。
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);
现在,WP pagenavi显示正确的页码。
EDIT: 问题在于PDO插件和Sqlite,我对其进行了测试。