WP查询foreach循环 - 重复相同的帖子

时间:2014-04-03 00:28:29

标签: php wordpress loops

我花了好几个小时 - 希望知道一点PHP的人可以轻松解决它。

我有一个Wordpress查询循环,需要连接在一起。它有点工作,但我要求6个帖子,所有6个都是一样的!

这是返回重复帖子的代码段:

////* New tab *//////

$args = array( 'numberposts' => 6, 'orderby' => 'post_date' );
$postslist = get_posts( $args );
$content .= '<div class="tab" id="new"><ul>';

foreach ($postslist as $post) :  setup_postdata($post);

  $content .= '<li><a href="' .  get_permalink() . '"</a>' . get_the_title() . '</a></li>';

endforeach; 

$content .= '</ul></div>';
return $content; // prints all the contents stringed together

此代码生成此列表:

http://i.imgur.com/xNyvE0w.png

任何帮助表示赞赏......感谢。

1 个答案:

答案 0 :(得分:0)

看起来您的代码示例来自函数内部。

a)请试试这个:

// ... cut ...
global $post;  
$args = array( 'posts_per_page' => 6, 'orderby' => 'post_date' );
$postslist = get_posts( $args );
$content .= '<div class="tab" id="new"><ul>';
foreach ( $postslist as $post ) :  setup_postdata( $post );
    $content .= sprintf( '<li><a href="%s">%s</a></li>',  
                          get_permalink(),
                          get_the_title() );
endforeach; 
$content .= '</ul></div>';
wp_reset_postdata();
return $content; // prints all the contents stringed together

我添加了global $post声明,因此setup_postdata( $post )可以修改全局$post对象。

b)或试试这个:

// ... cut ...
$args = array( 'posts_per_page' => 6, 'orderby' => 'post_date' );
$postslist = get_posts( $args );
$content .= '<div class="tab" id="new"><ul>';
foreach ( $postslist as $post ) :
    $content .= sprintf( '<li><a href="%s">%s</a></li>',  
                          get_permalink( $post->ID ),
                          get_the_title( $post->ID ) );
endforeach; 
$content .= '</ul></div>';
return $content; // prints all the contents stringed together

我使用帖子ID作为get_permalink()get_the_title()的输入参数。

c)您还可以使用原始帖子标题:$post->post_title,或者如果您想通过the_title过滤器使用:

echo apply_filters( 'the_title', $post->post_title );

所以要把它包起来:

请注意get_the_title()基于get_post(),如果您不使用输入参数,那么它将尝试使用全局$post对象:

if ( empty( $post ) && isset( $GLOBALS['post'] ) )
    $post = $GLOBALS['post'];

因此,如果不修改辅助循环中的全局对象,则始终获得相同的全局post对象标题(通常来自主查询)。

希望这有帮助。