启动WP_Query对象后,所有发布的永久链接都显示相同的页面

时间:2016-09-26 13:12:07

标签: wordpress loops permalinks posts

我初始化了WP_Query对象并使用该对象来显示帖子信息。但是,当我去任何帖子的永久链接时,它显示主页而不是该帖子页面。这是我的index.php代码:



<?php
	$myWpQuery = new WP_Query(array( 'author_name' => 'me' ));
	if($myWpQuery->have_posts()){
		while ($myWpQuery->have_posts()) {
			$myWpQuery->the_post();
			?>
				<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br />
			<?php
		}
	}
?>
&#13;
&#13;
&#13;

我有三个帖子,作者姓名&#34; me&#34;。当我加载主页(http://localhost/wordpress/)时,它会在正确的锚标记内显示这三个帖子的标题。但是当我点击标题时,它会将我带到帖子页面(http://localhost/wordpress/hello-world/)。问题在这里。这篇帖子页面也将这三个标题显示为主页。但我只想到我点击的帖子的标题。

但是,当我使用简单的以下代码时,它正常工作。

&#13;
&#13;
<?php
	if(have_posts()){
		while (have_posts()) {
			the_post();
			?>
				<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br />
			<?php
		}
	}
?>
&#13;
&#13;
&#13;

初始化WP_Query对象后发生了什么。任何人都可以解释一下。

2 个答案:

答案 0 :(得分:0)

我认为您缺少数据设置。看看下面的例子(取自wordpress.org),你的查询应该是这样的:

<ul>
<?php
  global $post;
  $args = array( 'numberposts' => 5, 'offset'=> 1, 'category' => 1 );
  $myposts = get_posts( $args );
  foreach( $myposts as $post ) :
    setup_postdata($post); ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
  endforeach; 
  wp_reset_postdata();
?>
</ul>

https://codex.wordpress.org/Function_Reference/setup_postdata - 这里看一下例1 https://wordpress.stackexchange.com/questions/99597/what-does-setup-postdata-post-do - 有关setup_postdata()函数的信息

如果不设置postdata,您的循环可能会存储上一次迭代的数据。这同样适用于新WP_Query 而不是get_posts()。

答案 1 :(得分:0)

因为您在查询中使用the_post(),所以需要在还原主查询循环的全局$ post变量后重置。使用WP_Query()时执行此操作的正确方法是在您的自定义循环之后调用wp_reset_postdata()

<?php
$myWpQuery = new WP_Query(array( 'author_name' => 'me' ));

if($myWpQuery->have_posts()){

    while ($myWpQuery->have_posts()) {

        $myWpQuery->the_post();

        ?>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br />
        <?php

    }

  // Restore original Post Data
   wp_reset_postdata();

} else {

  // No posts found

}

我不确定这是否会导致您的问题,但这肯定是需要解决的问题。请参阅https://codex.wordpress.org/Function_Reference/wp_reset_postdata