web-dev-qa-db-ja.com

Wp_get_recent_postsを使用した空の抜粋

最後の投稿をタイトル付きで表示するための簡単なショートコードです。

add_shortcode('latest3', function(){
    $recent_posts = wp_get_recent_posts(
            array(
                'numberposts'   => 3,
                'orderby'       => 'post_date',
                'order'         => 'DESC',
                'post_type'     => 'post',
                'post_status'   => 'publish'
            ), ARRAY_A);

    $output = '<h2>Latest posts</h2>';
    foreach ( $recent_posts as $recent ) {
        $output .= '<h3>'.$recent["post_title"].'</h3>';
        $output .= $recent["post_excerpt"];
    }
    return $output;
});

しかし、何らかの理由で抜粋出力が空になっています。 print_r($recents)は、実際にはpost_excerptという名前の配列キーがあることを示していますが、常に空の状態で表示されています。

2
Th3Alchemist

投稿の明示的な抜粋はありませんので、post_excerptの値は空です。投稿抜粋が空の場合、the_excerpt()は投稿コンテンツから抜粋を生成しますが、基本的にwp_get_recent_posts()のラッパーである関数get_posts()は生成しません。

3
Nicolai

このコードはうまくいくかもしれません、私はthe_post()関数がすることに似たpostオブジェクトを作成するためにsetup_postdataを使っています、それで今あなたはループで持っている関数を使うことができます。

$recent_posts = wp_get_recent_posts(
            array(
                'numberposts'   => 3,
                'orderby'       => 'post_date',
                'order'         => 'DESC',
                'post_type'     => 'post',
                'post_status'   => 'publish'
            ), OBJECT);

    $output = '<h2>Latest posts</h2>';
    foreach ( $recent_posts as $recent ) {
        setup_postdata($recent);
        $output .= '<h3>'.get_the_title().'</h3>';
        $output .= get_the_excerpt();
    }
    wp_reset_postdata();
    return $output;
4
Tomás Cot