我初始化了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;
我有三个帖子,作者姓名&#34; me&#34;。当我加载主页(http://localhost/wordpress/)时,它会在正确的锚标记内显示这三个帖子的标题。但是当我点击标题时,它会将我带到帖子页面(http://localhost/wordpress/hello-world/)。问题在这里。这篇帖子页面也将这三个标题显示为主页。但我只想到我点击的帖子的标题。
但是,当我使用简单的以下代码时,它正常工作。
<?php
if(have_posts()){
while (have_posts()) {
the_post();
?>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br />
<?php
}
}
?>
&#13;
初始化WP_Query对象后发生了什么。任何人都可以解释一下。
答案 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。