Afișează ultima postare dintr-o categorie într-o pagină
Vreau să afișez într-o pagină conținutul ultimei postări dintr-o categorie.
De exemplu, categoria foo
are următoarele postări:
- Hello World
- Hello Mars
- Foo bar
Considerând că Foo Bar este cel mai recent articol din categoria foo, conținutul său ar trebui să fie afișat într-o pagină:
<title>
<content>
Unde <title>
este Foo bar și <content>
este conținutul postării.
Cum pot face acest lucru?
Am dificultăți în implementarea răspunsului lui @Pieter. Am adăugat aceste linii în functions.php
:
function latest_post() {
$args = array(
'posts_per_page' => 1, // avem nevoie doar de ultima postare, deci obținem doar acea postare
'cat' => '4' // Folosește ID-ul categoriei, poate fi înlocuit și cu category_name care folosește slug-ul categoriei
);
$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');
În pagină folosesc:
[latest_post]
Cu toate acestea, nu apare nicio eroare, dar nici conținutul postării nu este afișat.
Puteți utiliza WP_Query
pentru a obține ultimul post dintr-o categorie și a-l afișa. Consultați parametrii pentru categorii. În mod implicit, WP_Query
folosește post
ca tip de post și sortează postările după dată, așa că putem exclude aceste detalii din interogare. Dacă aveți nevoie de altceva, puteți defini argumentele dorite.
Puteți încerca ceva de genul:
$args = array(
'posts_per_page' => 1, // avem nevoie doar de ultimul post
'cat' => 'ID-UL CATEGORIEI', // Folosiți ID-ul categoriei, sau puteți înlocui cu category_name care folosește slug-ul categoriei
//'category_name' => 'SLUG-UL CATEGORIEI FOO',
);
$q = new WP_Query( $args);
if ( $q->have_posts() ) {
while ( $q->have_posts() ) {
$q->the_post();
//Tag-urile și markup-ul template-ului, de exemplu:
the_title();
}
wp_reset_postdata();
}
Aceasta este o bază pe care o puteți modifica și personaliza după nevoile dumneavoastră. Dacă nu sunteți sigur de parametri sau utilizare, consultați pagina Codex pentru WP_Query
pentru ajutor.
EDITARE
Nu sunt sigur de ce ați decis să reinventați roata și să folosiți get_posts
când v-am arătat un exemplu funcțional de utilizare a WP_Query
. Folosirea get_posts
împreună cu proprietățile WP_Post
este complet greșită.
Proprietățile
WP_Post
sunt nefiltrate, așa că rezultatul va fi complet nefiltrat și nu va arăta la fel ca output-ul din tag-urile de template precumthe_title()
sauthe_content()
. Trebuie să folosiți filtrele corespunzătoare pentru aceste proprietăți.title
șicontent
sunt proprietăți invalide aleWP_POST
. Celălalt răspuns este complet greșit. Proprietățile corecte suntpost_title
șipost_content
.Puteți folosi tag-urile de template în mod normal folosind
setup_postdata( $post );
și apoiwp_reset_postdata()
după aceea.
Puteți încerca următoarele:
function latest_post() {
$args = array(
'posts_per_page' => 1, // avem nevoie doar de ultimul post
'cat' => '4' // Folosiți ID-ul categoriei, sau puteți înlocui cu category_name care folosește slug-ul categoriei
);
$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');

Unde ar trebui să adaug acest cod? Încă nu este clar pentru mine...

Trebuie să-l adaugi în template-ul tău acolo unde ai nevoie să afișezi acest articol. Nu vreau să fiu nepoliticos, dar ne așteptăm să cunoști măcar elementele de bază. :-)

Vezi ediția mea. Din câte văd, dimensiunea array-ului este 1
, ceea ce e de așteptat, dar nu înțeleg de ce funcția nu returnează rezultatul așteptat. Poți verifica codul (și poate adăuga o versiune funcțională în răspunsul tău)? Mulțumesc!

Puteți face ceva de genul acesta:::
$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;

Unde ar trebui să adaug asta? În conținutul paginii (editând în modul text)?

în template, partea de template sau fișierul functions.php dacă folosești scurtături
