Ce face get_template_part
get_template_part() împarte șabloanele temei în bucăți refolosibile: cardul unui articol, antetul unei secțiuni. Dai un $slug (calea fără .php) și, opțional, un $name. WordPress caută întâi {slug}-{name}.php, apoi {slug}.php; fiecare nume e căutat mai întâi în tema copil, apoi în tema părinte. Primul fișier găsit este inclus.
Din WordPress 5.5 poți trimite date prin al treilea parametru, $args. În fișierul inclus ele sunt disponibile în variabila $args (de exemplu $args['pret']). Variabilele locale din fișierul care cheamă funcția nu sunt vizibile acolo, pentru că fișierul se include din interiorul unei funcții.
Funcția afișează direct conținutul fișierului; nu întoarce HTML-ul. Dacă nu găsește niciun fișier, întoarce false, fără eroare.
Parametri
| Parametru | Descriere |
|---|---|
$slug |
Calea generică a fișierului, relativă la temă și fără extensie (de exemplu 'template-parts/card'). |
$name |
Varianta specializată: pentru card-produs.php dai 'produs'. Implicit null. |
$args |
Tablou cu date trimise șablonului, citite acolo din $args (din WordPress 5.5). Implicit array(). |
Ce returnează
Nimic când încarcă fișierul; false dacă nu există niciun șablon potrivit.
Exemple
Exemplul 1: Card de produs cu date trimise prin $args
Primul bloc este în șablonul paginii, al doilea este fișierul template-parts/card-produs.php din tema copil.
<?php
// În single-produs.php
get_template_part( 'template-parts/card', 'produs', array(
'pret' => 25,
'moneda' => 'lei',
) );
// În template-parts/card-produs.php
?>
<div class="card-produs">
<h2><?php the_title(); ?></h2>
<p class="pret"><?php echo esc_html( $args['pret'] . ' ' . $args['moneda'] ); ?></p>
</div>
Ce afișează pagina
<div class="card-produs">
<h2>Cană ceramică</h2>
<p class="pret">25 lei</p>
</div>
Exemplul 2: Șablon diferit pentru fiecare tip de conținut
Pentru un produs se încarcă content-produs.php; pentru un tip fără fișier propriu (de exemplu post) se folosește content.php. Rezultatul este pentru o arhivă cu un singur produs.
<?php
// În archive-produs.php
while ( have_posts() ) :
the_post();
get_template_part( 'template-parts/content', get_post_type() );
endwhile;
// În template-parts/content-produs.php
?>
<article class="produs">
<h2><?php the_title(); ?></h2>
</article>
Ce afișează pagina
<article class="produs">
<h2>Cafea boabe 250 g</h2>
</article>
Greșeli frecvente
- Scrii extensia în slug (
'template-parts/card.php'): WordPress cautăcard.php.phpși nu găsește nimic. - Folosești în șablonul inclus o variabilă definită în fișierul care l-a chemat: nu e vizibilă. Trimite datele prin
$args. - Te aștepți ca funcția să întoarcă HTML-ul: ea îl afișează. Dacă ai nevoie de el ca șir, înconjoară apelul cu
ob_start()șiob_get_clean().
Comenzi înrudite
have_posts / the_post: Bucla WordPress (The Loop): have_posts() verifică dacă mai sunt articole, the_post() îl pregătește pe următorul.WP_Query: Clasa care interoghează articole, pagini și tipuri personalizate după criterii: tip, categorie, câmpuri, ordine, paginare.register_post_type: Înregistrează un tip de conținut personalizat (produse, evenimente, rețete), cu meniu propriu în administrare.