web-dev-qa-db-fra.com

Afficher le dernier message d'une catégorie dans une page

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:

    1. Bonjour le monde
    1. Bonjour mars
    1. Foo Bar

Considérant Foo Bar le dernier article de foo category, son contenu doit être rendu dans une page:

<title>
<content>

<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.

2
Ionică Bizău

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.

MODIFIER

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