Visualizzare l'ultimo articolo di una categoria in una pagina

9 mar 2015, 10:28:58
Visualizzazioni: 36K
Voti: 6

Voglio visualizzare in una pagina il contenuto dell'ultimo post di una categoria.

Per esempio, la categoria foo ha i seguenti post:

    1. Hello World
    1. Hello Mars
    1. 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.

0
Tutte le risposte alla domanda 2
4

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 come the_title() o the_content(). Devi utilizzare i filtri appropriati su queste proprietà.

  • title e content sono proprietà non valide di WP_POST. L'altra risposta è completamente sbagliata. Le proprietà corrette sono post_title e post_content.

  • Puoi utilizzare i template tag normalmente semplicemente usando setup_postdata( $post ); e poi wp_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');
9 mar 2015 10:52:53
Commenti

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

Ionică Bizău Ionică Bizău
9 mar 2015 10:54:17

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

Pieter Goosen Pieter Goosen
9 mar 2015 10:59:45

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!

Ionică Bizău Ionică Bizău
11 mar 2015 21:56:07

Per favore, consulta il mio aggiornamento

Pieter Goosen Pieter Goosen
12 mar 2015 10:09:12
3
-1

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;
9 mar 2015 10:39:17
Commenti

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

Ionică Bizău Ionică Bizău
9 mar 2015 10:44:47

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

Jorge Y. C. Rodriguez Jorge Y. C. Rodriguez
9 mar 2015 10:49:04

Puoi modificare il tuo post con i passaggi completi per integrare questo? Non sono il migliore in PHP, ma seguendo i passaggi dovrebbe funzionare.

Ionică Bizău Ionică Bizău
9 mar 2015 10:53:06