在页面中显示某个类别的最新帖子

时间:2015-03-09 作者:Ionică Bizău

我想在页面中显示类别中的最新帖子内容。

例如,类别foo 拥有以下职位:

你好,世界你好,考虑到Foo bar是Foo类别的最新文章,其内容应呈现在一个页面中:

<title>
<content>
在哪里<title> 是Foo bar和<content> 是帖子内容。

我该怎么做?

我正在努力实现@Pieter\'s答案。我在中添加了这些行functions.php:

function latest_post() {  
    $args = array(
       \'posts_per_page\' => 1, // we need only the latest post, so get that post only
       \'cat\' => \'4\' // Use the category id, can also replace with category_name which uses category slug
    );

    $str = "";
    $posts = get_posts($args);

    foreach($posts as $post):
       $str = $str."<h2>".$post->title."</h2>";
       $str = $str."<p class=\'post-content-custom\'>".$post->content."</p>";
    endforeach;

    return $str;
}

add_shortcode(\'latest_post\', \'latest_post\');
在页面中,我会:

[latest_post]
但是,不会出现错误,但不会显示帖子内容。

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

你可以利用WP_Query 调用类别中的最新帖子并显示它。看看category parameters. 默认情况下,WP_Query 使用post 由于按发布日期发布的发布类型和订单,因此我们可以将其从查询中排除。如果你需要其他东西,你可以在你的论点中定义它们

你基本上可以试试这样的

$args = array(
    \'posts_per_page\' => 1, // we need only the latest post, so get that post only
    \'cat\' => \'ID OF THE CATEGORY\', // Use the category id, can also replace with category_name which uses category slug
    //\'category_name\' => \'SLUG OF FOO CATEGORY,
);
$q = new WP_Query( $args);

if ( $q->have_posts() ) {
    while ( $q->have_posts() ) {
    $q->the_post();        
        //Your template tags and markup like:
        the_title();
    }
    wp_reset_postdata();
}
这应该为您提供一个基础,您可以根据需要修改、自定义和使用它。如果您不确定参数和用法,请查看WP_Query codex page 寻求帮助

编辑我真的不知道你为什么决定重新发明轮子get_posts 我向您展示了一个如何使用WP_Query. 您对的使用get_posts 结合WP_Post 属性完全错误

WP_Post 属性是未过滤的,因此此操作的输出是完全未过滤的,并且看起来与模板标记的输出不同,如the_title()the_content(). 必须对这些属性使用适当的过滤器

  • titlecontent 的属性无效WP_POST. 另一个答案是完全错误的。是的post_titlepost_content

    只需使用setup_postdata( $post ); 然后使用wp_reset_postdata() 之后

    您可以尝试以下方法

    function latest_post() {  
        $args = array(
           \'posts_per_page\' => 1, // we need only the latest post, so get that post only
           \'cat\' => \'4\' // Use the category id, can also replace with category_name which uses category slug
        );
    
        $str = "";
        $posts = get_posts($args);
    
        foreach($posts as $post):
           $str = $str."<h2>". apply_filters( \'the_title\', $post->post_title) ."</h2>";
           $str = $str."<p class=\'post-content-custom\'>". apply_filters( \'the_content\', $post->post_content ) ."</p>";
        endforeach;
    
        return $str;
    }
    
    add_shortcode(\'latest_post\', \'latest_post\');
    

  • SO网友:Jorge Y. C. Rodriguez

    您可以这样做:::

     $args = array(
            \'post_type\' => \'__post_type__\',
            \'posts_per_page\' => 1,
            \'orderby\' => \'date\',
            \'order\' => \'ASC\'
    
            );
    
    $posts = get_posts($args);
    foreach($posts as $post):
     echo $post->ID;
     echo $post->title;
     echo $post->content;
    endforeach;
    

    结束

    相关推荐

    如何使用PRE_GET_POSTS挂接和IS_POST_TYPE_ARCHIVE更改查询

    需要:我正在尝试使用GET参数过滤自定义帖子类型归档,以便根据帖子标记的术语将帖子分为两组。如何:到目前为止,我决定使用pre_get_posts 钩子,在呈现此自定义帖子类型的存档时更改查询。问题是:我使用的代码不起作用。我似乎找不到问题,但它肯定不起作用。也许有人对这个钩子有更多的经验可以告诉我我错过了什么:function event_type_filter( $query ) { if ( is_post_type_archive( \'event\' ) ) {