Articole recente pe o pagină statică de start
Doresc să am o pagină statică de start pe site-ul meu WordPress. Am configurat deja acest lucru și am adăugat un pic de conținut, iar următorul pas este să afișez 5 articole recente sub conținut. Ca pagină normală acest lucru nu este o problemă, dar imediat ce setez pagina ca pagină statică de start, articolele dispar.
După ore întregi de căutare, am aflat că am nevoie de 'bucle multiple' în șablonul meu. Am găsit câteva exemple și am încercat să le implementez în șablonul meu fără succes. Cred că am codul pentru a aduce articolele recente, dar cred că am probleme cu marcajul și etichetele de șablon pentru a afișa efectiv articolele.
Sper că nu este prea complicat de înțeles și apreciez foarte mult orice ajutor. Am lucrat la acest aspect timp de 2 zile fără niciun progres. Pot furniza orice cod necesar din șabloane sau orice altceva.
Site-ul meu - www.completemuscleandfitness.com
Ok, iată ce am până acum
<?php
// Argumentele pentru a obține 5 articole recente
$args = array( 'numberposts' => '5' );
$recent_posts = wp_get_recent_posts( $args );
foreach( $recent_posts as $recent ){
echo '<li><a href="' . get_permalink($recent["ID"]) . '" title="Vezi '.esc_attr($recent["post_title"]).'" >' . $recent["post_title"].'</a> </li> ';
}
care arată așa - www.completemuscleandfitness.com
Cum pot face să arate frumos ca celelalte pagini cu articole?

În primul rând, Bine ai venit!
Presupun că folosești fișierul front-page.php
pentru a afișa pagina ta principală.
Ce trebuie să faci, este să adaugi următorul cod în fișierul tău front-page.php
:
<h2>Postări recente</h2>
<ul>
<?php
$args = array( 'numberposts' => '5' );
$recent_posts = wp_get_recent_posts( $args );
foreach( $recent_posts as $recent ){
echo '<li><a href="' . get_permalink($recent["ID"]) . '" title="Vezi '.esc_attr($recent["post_title"]).'" >' . $recent["post_title"].'</a> </li> ';
}
?>
</ul>
Mai multe informații despre wp_get_recent_posts()
le găsești aici.
Fișierul tău de template va arăta cam așa:
<div id="main">
<div class="new_post">
...
</div>
</div>
Poți încerca să pui acest cod în <div id="main">
chiar înainte de tag-ul de închidere </div>
:
<div id="main">
<div class="new_post">
...
</div>
<h2>Postări recente</h2>
<ul>
<?php
$args = array( 'numberposts' => '5' );
$recent_posts = wp_get_recent_posts( $args );
foreach( $recent_posts as $recent ){
echo '<li><a href="' . get_permalink($recent["ID"]) . '" title="Vezi '.esc_attr($recent["post_title"]).'" >' . $recent["post_title"].'</a> </li> ';
}
?>
</ul>
</div>

Mulțumesc pentru răspuns! Deoarece am o pagină de start statică, folosesc în prezent un șablon numit page-home-2.php. Pot să introduc codul acolo? Partea dificilă pentru mine este să știu unde să introduc codul în șablon?

Poți adăuga codul în page-home-2.php
. Voi edita răspunsul meu pentru tine adăugând o scurtă descriere unde să plasezi acest cod.

Puteți crea propria șablon personalizat pentru pagina de start, la fel ca index.php
în directorul temei active.
În acel fișier puteți crea propria interogare personalizată și puteți parcurge rezultatele.
Ex.
<h2>Postări recente</h2>
<ul>
<?php
$query = new WP_Query( array ( 'orderby' => 'date', 'order' => 'DESC' ) );
while ( $query->have_posts() ) :
$query->the_post();
echo '<li>' . get_the_title() . '</li>';
endwhile;
?>
</ul>
Aceasta poate fi considerată o implementare de bază. Puteți merge mai departe după necesități.
Ex.
<?php
// Interogarea
$the_query = new WP_Query( $args );
// Bucla
while ( $the_query->have_posts() ) :
$the_query->the_post();
echo '<li>' . get_the_title() . '</li>';
endwhile;
/* Restabilirea datelor originale Post
* NB: Deoarece folosim new WP_Query, nu interferăm cu
* $wp_query original și nu este nevoie să fie resetat.
*/
wp_reset_postdata();
/* A doua interogare (fără variabilă globală) */
$query2 = new WP_Query( $args2 );
// A doua buclă
while( $query2->have_posts() ):
$query2->next_post();
echo '<li>' . get_the_title( $query2->post->ID ) . '</li>';
endwhile;
// Restabilirea datelor originale Post
wp_reset_postdata();
?>
Puteți obține mai multe informații aici. Iar pentru parametri multipli ai interogării, consultați acest link.

Mulțumesc pentru ajutor, tocmai am inserat primul cod în index.php pentru a crea un șablon personalizat. Acum afișez postări recente, dar fără link-uri și sunt doar o mică listă deasupra conținutului meu. Cum pot face ca postările să fie afișate ca pe alte pagini de blog, precum aceasta - http://completemuscleandfitness.com/index.php/training/

Aceasta depinde în totalitate de structura DOM a temei tale curente. Adică, de modul în care logica de prezentare este scrisă prin PHP și HTML. De exemplu, poți copia și lipi întreaga logică de afișare a postărilor în bucla ta personalizată, în loc de instrucțiunea echo '<li>' . get_the_title() . '</li>';
și poți elimina înfășurătoarea ul
pentru aceasta.
Sper că acest lucru te ajută.

Primesc multe sugestii, apreciez foarte mult. Cred că înțeleg parțial ce spui. Cred că aici am ajuns la un punct mort. Am avut deja postări recente afișate, dar nu reușesc să înțeleg cum să le afișez corect. Pur și simplu nu-mi pot da seama. Dacă aș posta un alt șablon de blog din tema, mă poate ajuta cineva pe baza acestuia?

Nu înțeleg ce încerci să spui. Poți să explici mai detaliat, te rog?

ok, pot afișa postările recente pe pagina mea statică, dar arată haotic. Probabil trebuie să inserez niște cod în pagina mea personalizată pentru ca postările să apară în formatul normal al temei. Doar că nu am idee ce cod să pun și unde, acest cod probabil ar putea veni de la un alt șablon al temei? Întreb dacă pot posta un șablon al temei, poți să mă ajuți să pun codul unde trebuie?

Mulțumesc! În primul rând, acesta este codul pe care îl am până acum în șablonul meu personalizat, acesta afișează postări dar fără formatare - http://pastebin.com/Qq08Z3Fp Următorul este șablonul blogului din tema mea - http://pastebin.com/uJyfbEeg

Am modificat codul și iată linkul http://pastebin.com/ubhyxpJV. Doar fă o copie de rezervă a fișierului șablon existent și lipește acest cod integral și cred că ești gata de utilizare.

Mulțumesc pentru eforturile tale, Rohit, am lipit codul în șablonul meu personalizat și l-am activat, dar postările recente nu apar pe pagina mea principală?

Am făcut câteva modificări. Vezi aici http://pastebin.com/QrcBXW0N. Încearcă să înlocuiești acest cod cu cel existent și testează.

Ne apropiem de soluție! Acum afișează postările recente aproape cum ar trebui, dar le repetă astfel încât apar 3 postări continuu. De asemenea, conținutul original al paginii a dispărut. Din nou, nu-ți pot spune cât de mult apreciez ajutorul tău.

Parcurge diferiți parametri ai interogării și cred că vei reuși să o configurezi. Poți consulta parametrii aici. Încearcă să modifici parametrii pentru a obține numărul necesar de postări conform criteriilor tale.

Ok, mulțumesc, voi încerca. Un ultim lucru, ai vreo idee cum pot afișa din nou celelalte conținuturi? Postările acum acaparează tot conținutul

Da, sigur. Doar adaugă această linie <?php get_template_part('home'); ?>
după <?php
/*
Template Name: Custom Homepage
*/
?>
și ar trebui să funcționeze. Încearcă și dacă nu funcționează, te rog să-mi arăți codul din fișierul tău home.php
din directorul temei active. Verifică dacă fișierul există. Dacă nu, încearcă să afli care șablon este încărcat pentru linia de cod pe care ți-am sugerat-o.

ok, acum apare, dar ca o pagină separată, destul de ciudat - www.completemuscleandfitness.com Iată codul șablonului - http://pastebin.com/3xDU9w3R și iată home.php-ul meu - http://pastebin.com/XELee582

La fel ca în pasul anterior, fă o copie de rezervă a fișierului și încearcă să înlocuiești codul cu acesta, apoi testează.

la fel ca înainte, dar meta-informațiile din footer au dispărut. Îmi pare rău că sunt atât de dificil...

Ai o problemă în structura DOM. Eu pot vedea partea de footer. Verifică structura corectă DOM și cred că asta va rezolva problema.

Dacă nu greșesc, cred că lucrați mult prea din greu.
Mi se pare că widget-ul "postări recente" ar trebui să fie tot ce aveți nevoie.
Exemplu:
"Știri recente" este widget-ul "postări recente".
(Acest site este încă în construcție - de aceea am "test" în subdomeniu.)
