web-dev-qa-db-ja.com

カテゴリ内の最新の投稿をページに表示する

カテゴリから最新の投稿内容をページに表示したい。

たとえば、カテゴリfooには、以下の投稿があります。

    1. こんにちは世界
    1. こんにちは火星
    1. フーバー

Foo Bar foo カテゴリーの最新の記事を考えると、その内容はページにレンダリングされるべきです。

<title>
<content>

<title> Foo bar で、<content>は投稿内容です。

これどうやってするの?


@Pieter の答えを実装するのに苦労しています。これらの行を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
Ionică Bizău

カテゴリから最新の投稿を呼び出して表示するためにWP_Queryを使用することができます。 カテゴリパラメータ を見てください。デフォルトでは、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ページ を参照してください。

編集

なぜ車輪を再発明し、get_postsを使うことにしたのか、よくわかりません。ここでは、WP_Queryの使い方の実用的な例を示しました。 get_posts プロパティと組み合わせたWP_Postの使用はまったく間違っています

  • WP_Postプロパティはフィルタ処理されていないため、ここからの出力はまったくフィルタ処理されておらず、the_title()the_content()のようなテンプレートタグからの出力と同じには見えません。これらのプロパティには適切なフィルタを使用する必要があります

  • titlecontentWP_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');
4
Pieter Goosen