add_shortcode în WordPress

Înregistrează un shortcode, de exemplu [dex_pret valoare="25"], înlocuit în conținut cu HTML-ul întors de funcția ta.

Sintaxă
add_shortcode( string $tag, callable $callback )

Ce face add_shortcode

Un shortcode este un marcaj între paranteze drepte pe care autorul îl scrie în conținut. Când WordPress îl întâlnește, cheamă funcția înregistrată cu add_shortcode() și pune în loc textul întors de ea. Funcția primește trei argumente: atributele ($atts), conținutul dintre etichete ($content, null dacă lipsește) și numele shortcode-ului.

Funcția trebuie să ÎNTOARCĂ textul, nu să-l afișeze cu echo. Pentru atribute cu valori implicite folosești shortcode_atts(), care păstrează doar atributele cunoscute. Numele atributelor ajung mereu cu litere mici.

Un nume de shortcode poate avea o singură funcție: dacă două pluginuri înregistrează același nume, câștigă ultimul încărcat. De aceea e bine să folosești un prefix. Numele nu poate conține spații sau caracterele & / < > [ ] =. Într-un șablon PHP rulezi un shortcode cu do_shortcode().

Parametri

Parametru Descriere
$tag Numele shortcode-ului căutat în conținut (de exemplu 'dex_pret').
$callback Funcția chemată: primește $atts, $content și $shortcode_tag și întoarce un șir.

Ce returnează

Nimic. Funcția ta (callback-ul) întoarce textul care înlocuiește shortcode-ul.

Exemple

Exemplul 1: Shortcode cu atribute și valori implicite

În conținut autorul scrie [dex_pret valoare="25"]; moneda lipsă primește valoarea implicită „lei”.

<?php
add_shortcode( 'dex_pret', 'dex_shortcode_pret' );

function dex_shortcode_pret( $atts ) {
    $atts = shortcode_atts(
        array(
            'valoare' => '0',
            'moneda'  => 'lei',
        ),
        $atts,
        'dex_pret'
    );

    return '<span class="pret">' . esc_html( $atts['valoare'] . ' ' . $atts['moneda'] ) . '</span>';
}

Ce afișează pagina

<span class="pret">25 lei</span>

Exemplul 2: Shortcode cu conținut între etichete

Pentru [dex_nota]Comenzile se ridică din Iași.[/dex_nota], textul dintre etichete vine în $content.

<?php
add_shortcode( 'dex_nota', 'dex_shortcode_nota' );

function dex_shortcode_nota( $atts, $content = null ) {
    if ( null === $content ) {
        return '';
    }
    return '<div class="nota">' . wp_kses_post( $content ) . '</div>';
}

Ce afișează pagina

<div class="nota">Comenzile se ridică din Iași.</div>

Greșeli frecvente

  • Folosești echo în funcția shortcode-ului: textul apare în altă parte a paginii (de obicei deasupra conținutului). Întoarce șirul cu return.
  • Scrii atributul cu majuscule (valoareMax) și îl cauți la fel în cod: WordPress îl transmite ca valoaremax.
  • Pui atributele direct în HTML fără escaping; ele vin de la autor și pot conține ghilimele sau etichete.
  • Alegi un nume generic (pret) care intră în conflict cu shortcode-ul altui plugin.

Comenzi înrudite

  • the_content: Filtrul prin care trece conținutul unui articol după ce este citit din baza de date și înainte de a fi afișat.
  • esc_html: Escapează textul pentru afișare în HTML: transformă < > & și ghilimelele în entități, ca să nu fie interpretate ca cod.
  • wp_kses: Păstrează doar etichetele și atributele HTML permise și elimină restul (scripturi, atribute on*, protocoale nesigure).
  • add_filter: Leagă o funcție de un filtru: WordPress îi dă o valoare, iar funcția întoarce valoarea modificată.