the_content în WordPress

Hooks folosite des WordPress 0.71

Filtrul prin care trece conținutul unui articol după ce este citit din baza de date și înainte de a fi afișat.

Sintaxă
apply_filters( 'the_content', string $content )
add_filter( 'the_content', 'dex_functie' );

Ce face the_content

Filtrul the_content primește conținutul articolului curent ca text HTML și trebuie să-l întoarcă. Prin el nucleul aplică, de exemplu, wpautop (paragrafe automate) și do_shortcode (shortcode-uri, cu prioritatea 11). Tu îl poți folosi ca să adaugi conținut înainte sau după articol.

Documentația recomandă verificarea is_main_query() și in_the_loop(): fără ele, modifici și conținutul afișat în bucle secundare (bară laterală, articole similare, subsol). Filtrul este aplicat și în alte locuri, de exemplu în răspunsurile REST și în feed-uri.

get_the_content() întoarce conținutul fără acest filtru; the_content() îl aplică.

Parametri

Parametru Descriere
$content Conținutul articolului curent (HTML).

Ce returnează

Funcția ta trebuie să întoarcă conținutul, modificat sau nu.

Exemple

Exemplul 1: O casetă după fiecare articol

Caseta apare doar pe pagina unui articol (is_singular( 'post' )), în bucla principală. În celelalte locuri conținutul rămâne neschimbat.

add_filter( 'the_content', 'dex_caseta_dupa_articol' );

function dex_caseta_dupa_articol( $content ) {
    if ( is_singular( 'post' ) && in_the_loop() && is_main_query() ) {
        $content .= '<div class="dex-caseta">' . esc_html( 'Te așteptăm la o cafea în Iași, pe strada Lăpușneanu.' ) . '</div>';
    }
    return $content;
}

Ce afișează pagina

<div class="dex-caseta">Te așteptăm la o cafea în Iași, pe strada Lăpușneanu.</div>

Exemplul 2: Timpul de citire deasupra articolului

Numărăm cuvintele (bucățile separate prin spații) din textul fără etichete HTML și presupunem 200 de cuvinte pe minut. Pentru un articol de 560 de cuvinte, ceil( 2.8 ) dă 3. Modificatorul u din expresia regulată tratează corect textul UTF-8 cu diacritice.

add_filter( 'the_content', 'dex_timp_citire' );

function dex_timp_citire( $content ) {
    if ( ! is_singular( 'post' ) || ! in_the_loop() || ! is_main_query() ) {
        return $content;
    }
    $text    = trim( wp_strip_all_tags( $content ) );
    $cuvinte = '' === $text ? 0 : count( preg_split( '/\s+/u', $text ) );
    $minute  = max( 1, (int) ceil( $cuvinte / 200 ) );
    return '<p class="dex-timp">Timp de citire: ' . $minute . ' min</p>' . $content;
}

Ce afișează pagina

<p class="dex-timp">Timp de citire: 3 min</p>

Greșeli frecvente

  • echo în loc de return: textul apare deasupra articolului (sau în altă parte), iar conținutul dispare dacă funcția nu întoarce nimic.
  • Fără verificări: caseta apare în rezumate, în widget-uri, în buclele de articole similare și în răspunsurile REST. Folosește is_singular(), in_the_loop(), is_main_query().
  • Apelezi the_content() sau apply_filters( 'the_content', ... ) în interiorul propriului filtru: filtrul se apelează pe el însuși la nesfârșit.

Comenzi înrudite

  • add_filter: Leagă o funcție de un filtru: WordPress îi dă o valoare, iar funcția întoarce valoarea modificată.
  • apply_filters: Trece o valoare prin toate funcțiile legate de un filtru și întoarce rezultatul final; cu un nume nou, creează un filtru propriu.
  • remove_action: Scoate o funcție legată de o acțiune sau de un filtru; callback-ul și prioritatea trebuie să fie identice cu cele de la adăugare.
  • add_shortcode: Înregistrează un shortcode, de exemplu [dex_pret valoare=”25″], înlocuit în conținut cu HTML-ul întors de funcția ta.
  • have_posts / the_post: Bucla WordPress (The Loop): have_posts() verifică dacă mai sunt articole, the_post() îl pregătește pe următorul.