get_template_part în WordPress

Interogări și bucla WordPress 3.0

Încarcă o bucată de șablon din temă (de exemplu template-parts/card-produs.php), cu prioritate pentru tema copil.

Sintaxă
get_template_part( string $slug, string|null $name = null, array $args = array() ): void|false

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() și ob_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.