我花了好几个小时 - 希望知道一点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
此代码生成此列表:
任何帮助表示赞赏......感谢。
答案 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对象标题(通常来自主查询)。
希望这有帮助。