Visualizzare l'ultimo articolo di una categoria in una pagina
Voglio visualizzare in una pagina il contenuto dell'ultimo post di una categoria.
Per esempio, la categoria foo
ha i seguenti post:
- Hello World
- Hello Mars
- Foo bar
Considerando Foo Bar come l'ultimo articolo della categoria foo, il suo contenuto dovrebbe essere mostrato in una pagina:
<title>
<content>
Dove <title>
è Foo bar e <content>
è il contenuto del post.
Come posso farlo?
Sto avendo difficoltà a implementare la risposta di @Pieter. Ho aggiunto queste righe in functions.php
:
function latest_post() {
$args = array(
'posts_per_page' => 1, // abbiamo bisogno solo dell'ultimo post, quindi prendiamo solo quello
'cat' => '4' // Usa l'ID della categoria, può essere sostituito anche con category_name che usa lo slug della categoria
);
$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');
Nella pagina scrivo:
[latest_post]
Tuttavia, non appare nessun errore, ma il contenuto del post non viene visualizzato.
Puoi utilizzare WP_Query
per chiamare l'ultimo post da una categoria e visualizzarlo. Dai un'occhiata ai parametri delle categorie. Di default, WP_Query
utilizza post
come tipo di post e ordina i post per data, quindi possiamo escluderlo dalla query. Se hai bisogno di qualcos'altro, puoi semplicemente definirlo nei tuoi argomenti.
Puoi provare qualcosa come questo:
$args = array(
'posts_per_page' => 1, // abbiamo bisogno solo dell'ultimo post
'cat' => 'ID DELLA CATEGORIA', // Usa l'ID della categoria, puoi anche usare category_name con lo slug della categoria
//'category_name' => 'SLUG DELLA CATEGORIA FOO',
);
$q = new WP_Query( $args);
if ( $q->have_posts() ) {
while ( $q->have_posts() ) {
$q->the_post();
// I tuoi template tag e markup come:
the_title();
}
wp_reset_postdata();
}
Questo dovrebbe fornirti una base, che puoi modificare, personalizzare e utilizzare come preferisci. Se non sei sicuro dei parametri e dell'utilizzo, consulta la pagina del codex di WP_Query
per assistenza.
MODIFICA
Non sono davvero sicuro del perché tu abbia deciso di reinventare la ruota e utilizzare get_posts
quando ti ho mostrato un esempio funzionante di come usare WP_Query
. Il tuo utilizzo di get_posts
in combinazione con le proprietà di WP_Post
è completamente sbagliato:
Le proprietà di
WP_Post
non sono filtrate, quindi l'output è completamente non filtrato e non apparirà uguale all'output dei template tag comethe_title()
othe_content()
. Devi utilizzare i filtri appropriati su queste proprietà.title
econtent
sono proprietà non valide diWP_POST
. L'altra risposta è completamente sbagliata. Le proprietà corrette sonopost_title
epost_content
.Puoi utilizzare i template tag normalmente semplicemente usando
setup_postdata( $post );
e poiwp_reset_postdata()
successivamente.
Puoi provare il seguente codice:
function latest_post() {
$args = array(
'posts_per_page' => 1, // abbiamo bisogno solo dell'ultimo post
'cat' => '4' // Usa l'ID della categoria, puoi anche usare category_name con lo slug della categoria
);
$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');

Dove dovrei aggiungere questo codice? Questo punto non mi è ancora chiaro...

Devi aggiungerlo nel tuo template dove hai bisogno di visualizzare questo post. Non per essere scortese o antipatico, ma ci aspettiamo che tu conosca almeno le basi. :-)

Vedi la mia modifica. Da quello che vedo la dimensione dell'array è 1
che è quello che mi aspetto, però non capisco perché la funzione non restituisca il risultato atteso. Puoi controllare il codice (e magari aggiungere una versione funzionante nella tua risposta)? Grazie!

Puoi fare qualcosa del genere:::
$args = array(
'post_type' => '__post_type__',
'posts_per_page' => 1,
'orderby' => 'date',
'order' => 'ASC'
);
$posts = get_posts($args);
foreach($posts as $post):
echo $post->ID;
echo $post->title;
echo $post->content;
endforeach;

Dove dovrei aggiungere questo? Nel contenuto della pagina (modificando in modalità testo)?

nel template, parte del template o file functions se stai utilizzando scorciatoie
