next_post_link()函数在wordpress中给出相同的帖子URL

时间:2011-04-06 11:33:10

标签: wordpress

当我在下面的代码中写下最近的帖子,然后在为下一个和上一个链接编写代码之后,那个函数会给我相同的帖子链接。如果我发表评论“ $ tags = wp_get_post_tags($ post-> ID); ”这一行,那么它将打印下一个帖子链接。我该如何解决这个错误?请帮帮我。

                <?php
                    //for use in the loop, list 5 post titles related to first tag on current post

                    $tags = wp_get_post_tags($post->ID);
                    if ($tags) {
                      echo '<div class="articlecontent font16 bold fontgray">Related Posts</div>';
                      $first_tag = $tags[0]->term_id;
                      $args=array(
                        'tag__in' => array($first_tag),
                        'post__not_in' => array($post->ID),
                        'showposts'=>5,
                        'caller_get_posts'=>1
                       );
                      $my_query = new WP_Query($args);
                      if( $my_query->have_posts() ) {
                        echo '<div class="articlecontent"><ul>';
                        while ($my_query->have_posts()) : $my_query->the_post(); ?>
                          <li><a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
                          <?php
                        endwhile;
                        echo "</ul></div>";
                      }
                    }
                ?>   

                <div class="nextprevbar">
                    <div class="prevtopic"><?php

                        previous_post_link( '%link', '<img border="0" alt="" src="'.get_template_directory_uri().'/images/prev-bullet.gif">' . _x( '&nbsp;', 'Previous post link', 'twentyten' ) . ' %title' ); ?></div>
                    <div class="nexttopic"><?php next_post_link( '%link', '%title &nbsp;<img border="0" alt="" src="'.get_template_directory_uri().'/images/next-bullet.gif">' . _x( '&nbsp;', 'Next post link', 'twentyten' ) . '</span>' ); ?></div>
                </div>

1 个答案:

答案 0 :(得分:2)

问题必须出在$post变量中。在执行此行之前:

 while ($my_query->have_posts()) : $my_query->the_post(); ?>

$post var保存当前的帖子数据(我猜这段代码在single.php里面?)。但是在这一行之后,在循环内部,$post var一个接一个地保存您的各种近期帖子(当您调用$post时设置the_post()变量)。

在该循环之后(endwhile下方),$post将保存在该循环中检索的最后一篇文章的数据。

previous_post_link()next_post_link()需要访问$post以获取当前帖子的参考信息,但他们会将您最近发布的帖子的最后一篇文章作为参考,而不是通过你的用户。

我不知道这个页面的html结构是什么,但我会把最近的帖子列表放在导航链接之后(下一篇,以前的帖子)。如果我是对的,这将解决问题,在我看来,它在语义上会更清晰。

或者你也可以试试这个:

添加以下行:

$currentPost = clone $post;

在:

$my_query = new WP_Query($args);

并添加以下行:

<?php $post = $currentPost; ?>

在您拨打下一个和上一个帖子链接功能之前。