カテゴリから最新の投稿内容をページに表示したい。
たとえば、カテゴリfoo
には、以下の投稿があります。
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]
ただし、エラーは表示されませんが、投稿内容は表示されません。
カテゴリから最新の投稿を呼び出して表示するために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()
のようなテンプレートタグからの出力と同じには見えません。これらのプロパティには適切なフィルタを使用する必要があります
title
とcontent
はWP_POST
の無効なプロパティです。他の答えは全く間違っています。 post_title
とpost_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');