打印帖子标题的快捷码

时间:2014-06-15 作者:Brett

我正在尝试制作一个快捷码来打印一个帖子标题列表。这就是我目前的情况:

function test( $atts , $content = null ){

    $args = array( \'posts_per_page\' => 3 );
    $lastposts = get_posts( $args );
    foreach ( $lastposts as $post )
    {
        setup_postdata( $post );
        echo the_title();
    } 
}
add_shortcode( \'test\', \'test\' );
我的问题是,它所做的只是打印调用快捷码的页面标题,而不是打印帖子的标题。我肯定我错过了一些基本的东西,但经过两个小时的努力,我想是时候换一双眼睛来看看了。

2 个回复
最合适的回答,由SO网友:JMau 整理而成

我知道这个问题已经得到了回答,答案也解决了这个问题,但我发现对于任何想学习WordPress的新手来说都很糟糕,所以我给出了我的答案,希望它会更好:

get_posts() 如果我能完成这项工作,我会使用simplequery,对于二次循环,我更喜欢创建自己的WP\\U查询独立实例Engelen是对的wp_reset_postdata() 这里使用$content 在这里也是不必要的,它不是一个封闭的短代码,短代码返回一些东西。它决不应该自己输出一些东西。这可能会引发不可预测的bug。这和add_filter()

add_shortcode( \'post_title\', \'wpse_149667_post_title_sc\' );
function wpse_149667_post_title_sc( $atts ){

    $args      = array( \'posts_per_page\' => 3 );

    $lastposts = new WP_Query( $args );

    if( $lastposts->have_posts() ) :

     $output    = \'<ul>\';

      while( $lastposts->have_posts() ) : $lastposts->the_post();

         $output .= \'<li>\'.get_the_title($lastposts->post->ID).\'</li>\';

      endwhile;

     $output .= \'</ul>\';

    else : 

        $output = \'There is currently no post to retrieve!\';

    endif;

    wp_reset_postdata();// more appropriate here

    return $output;
}
希望这能提供更多的解释。

SO网友:Matt Royal

Try like this:

function test( $atts , $content = null ){

    $args = array( \'posts_per_page\' => 3 );

    $lastposts = get_posts( $args );

    foreach ( $lastposts as $post )  {
        echo get_the_title($post->ID);
    } 

    wp_reset_postdata();
}
add_shortcode( \'test\', \'test\' );
结束

相关推荐

Sort posts by activity date

我有一个不同日期发布的帖子列表我可以按日期订购邮件$loop_args = array( \'post_type\' => \'post\', \'order_by\' => \'date\', \'order\' => \'ASC\' ) 如果帖子有评论,我如何按评论日期订购帖子。因此,请按活动对帖子进行排序