Je souhaite afficher dans la page le contenu du dernier message d'une catégorie.
Par exemple, la catégorie foo
a les posts suivants:
Considérant Foo Bar le dernier article de foo category, son contenu doit être rendu dans une page:
<title>
<content>
Où <title>
est Foo bar et <content>
est le contenu de la publication.
Comment puis-je faire ceci?
J'ai du mal à mettre en œuvre la réponse de @Pieter . J'ai ajouté ces lignes dans 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');
Dans la page que je fais:
[latest_post]
Cependant, aucune erreur ne s'affiche, mais le contenu de la publication ne s'affiche pas.
Vous pouvez utiliser WP_Query
pour appeler le dernier message de la catégorie et l’afficher. Regardez les paramètres de catégorie . Par défaut, WP_Query
utilise post
comme type de publication et les commandes publication par date de publication afin que nous puissions l'exclure de la requête. Si vous avez besoin de quelque chose d'autre, vous pouvez simplement les définir dans vos arguments
Vous pouvez essentiellement essayer quelque chose comme ça
$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();
}
Cela devrait vous fournir une base, vous pouvez le modifier, le personnaliser et l’utiliser à votre guise. Si vous n'êtes pas sûr des paramètres et de l'utilisation, consultez la WP_Query
page de codex } pour obtenir de l'aide.
Je ne sais vraiment pas pourquoi vous avez décidé de réinventer la roue et d’utiliser get_posts
où, comme je vous ai montré un exemple concret de l’utilisation de WP_Query
. Votre utilisation de get_posts
en conjonction avec les propriétés WP_Post
est complètement fausse
Les propriétés WP_Post
ne sont pas filtrées. Par conséquent, la sortie de cette propriété est totalement non filtrée et ne sera pas identique à la sortie des balises de modèle telles que the_title()
ou the_content()
. Vous devez utiliser les filtres appropriés sur ces propriétés
title
et content
sont des propriétés invalides de WP_POST
. L'autre réponse est complètement fausse. C'est post_title
et post_content
Vous pouvez utiliser les balises de modèle comme d'habitude en utilisant simplement setup_postdata( $post );
, puis en utilisant wp_reset_postdata()
par la suite.
Vous pouvez essayer ce qui suit
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');