QUERY_POST和分页,在经过大量研究后仍然停滞不前

时间:2012-05-20 作者:Dan

我需要为一些自定义帖子分页。。。我不明白为什么,但当我进入下一页时,我会得到404分。这是我的代码:

$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;

query_posts( array( \'post_type\' => \'s_stories\', \'posts_per_page\' => 4 , \'paged\'=>$paged) );

if (have_posts()){ 

while (have_posts()) { the_post(); ?>


<div class="post">
<h2 class="title"><a href="<?php echo get_permalink($post->ID); ?>"><?php the_title(); ?></a></h2>
<?php the_excerpt(); ?>

</div> <!-- end post -->

<div class="clear"></div>

<?php } }  ?>

<div class="paging">


    <div style="float:left; font-weight:bold"><?php next_posts_link(\'&laquo; Previous Story\') ?></div>
    <div style="float:right; font-weight:bold"><?php previous_posts_link(\'Next Story &raquo;\') ?></div>

</div>
我有“分页”值和帖子导航,知道现在发生了什么吗。。。。?

谢谢:)

3 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

Don\'t use query_posts. 这是一个典型的例子,说明了当您这样做时会发生什么:)

基本上,当WordPress接收到url时,它会将其解释为一个查询,然后查询数据库以查找结果(如果有),并提供一个适当的模板(如果没有结果,则提供404.php)。

如果它碰巧到达您的模板页面,系统会告诉它放弃该查询,然后启动一个新的查询(这是浪费),并将中断分页。

基本上分页添加了paged 当前url的查询变量-此新url(例如,它应该将您带到第2页)-构成了接收第2页的查询的基础-但地址栏中的url不是您要查找的内容(因为您放弃了该内容,然后使用query_posts. 最终的结果是,执行了一个您并不真正想要的查询,但没有结果,因此提供了404模板,并使用您的query_posts 永远无法到达。

查看上面的链接帖子,了解query_post, 但由于这是您要使用的“主查询”(基于接收到的url的查询)pre_get_posts.

SO网友:Adam

Try this...

<?php
  global $paged; global $wp_query;
  $temp = $wp_query; $wp_query= null; $wp_query = new WP_Query();
  $wp_query->query(\'showposts=XX&post_type=POST_TYPE_NAME\'.\'&paged=\'.$paged);
  while ($wp_query->have_posts()) : $wp_query->the_post(); 
?>

    // do your content output here...

<?php endwhile; ?>

   // do pagination here...

<?php $wp_query = null; $wp_query = $temp;?>
SO网友:Rarst

query_posts() 一般情况下不应使用,尤其是当您试图弄乱分页时。

分页和404逻辑都发生在模板文件之前(和query_posts() 甚至开始加载。

要调整页面的主查询,最好的选项之一是使用pre_get_posts

结束

相关推荐

The pagination doesn't work

我已经创建了一个新的WordPress主题,我完成了。。但我有一个问题。我无法进行分页。我使用“wp paginate”插件,并在索引中添加了以下代码。php:<?php if(function_exists(\'wp_paginate\')) { wp_paginate(); } ?> 但这对我的网站不起作用。前端和标记中仍然没有任何内容。我能做什么?这是我的索引。php: <?php get_header(); ?>