当查询类别时,页面导航不显示

时间:2013-01-19 作者:cikatomo

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(); ?> 在非工作状态下,它不会改变。

1 个回复
最合适的回答,由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,我对其进行了测试。

结束

相关推荐

Dropdown Menu for Query_Posts

我可以使用查询帖子成功地查询帖子结果,例如。。。<?php // The Query query_posts(\"gdsr_sort=rating\"); // The Loop while ( have_posts() ) : the_post(); ?> <?php get_template_part( \'content\', get_post_format() ); ?> <?php