Home » Articole » Articole » Calculatoare » Dezvoltarea web » WordPress » Limitări în API pentru scurtături în WordPress

Limitări în API pentru scurtături în WordPress

postat în: WordPress 0

API

Scurtături imbricate

Analizorul de scurtătură analizează în mod corect macro-urile scurtăturilor imbricate, cu condiția ca funcțiile lor de manipulare să le suporte prin apel recursiv do_shortcode():

[tag-a] [tag-b] [tag-c] [/tag-b] [/tag-a]

Cu toate acestea, analizorul va eșua în cazul în care un macro de scurtătură este folosit pentru a închide un alt macro cu același nume:

[tag-a] [tag-a] [/tag-a] [/tag-a]

Aceasta este o limitare a analizorului regexp necontextual utilizat de do_shortcode() – este foarte rapid, dar nu ține cont de nivelul de imbricări, deci nu se poate potrivi fiecare etichetă de deschidere cu eticheta de închidere corectă în aceste cazuri.

În versiunile viitoare ale WordPress, ar putea fi necesar pentru pluginuri care au o sintaxă de scurtătură imbricată să asigure că procesorul wptexturize() nu interferează cu codurile interioare. Se recomandă ca pentru o astfel de sintaxă complexă, filtrul no_texturize_shortcodes trebuie utilizat pe etichetele exterioare. În exemplele folosite aici, tag-a ar trebui să fie adăugat la lista de scurtături pentru a nu textura. În cazul în care conținutul lui tag-a sau tag-b încă mai trebuie să fie texturate, puteți apela wptexturize() înainte de a apela do_shortcode() așa cum este descris mai sus.

Nume neînregistrate

Unii autori de plugin au ales o strategie de a nu înregistra nume de scurtături, de exemplu pentru a dezactiva o scurtătură imbricată până când funcția de manipulare a scurtăturii părinte este apelată. Acest lucru poate avea consecințe nedorite, cum ar fi incapacitatea de a analiza valorile atributelor scurtăturii. De exemplu:

[tag-a unit=”north”] [tag-b size=”24″] [tag-c color=”red”] [/tag-b] [/tag-a]

Începând cu versiunea 4.0.1, în cazul în care un plugin nu reușește să înregistreze tag-b și tag-c ca scurtături valide, procesorul wptexturize() va obține următorul text înainte ca orice scurtătură să fie analizată:

[tag-a unit=”north”] [tag-b size=”24”] [tag-c color=”red”] [/tag-b] [/tag-a]

Scurtăturile neînregistrate ar trebui considerate text simplu normal care nu are nici o semnificație specială, și practica utilizării scurtăturilor neînregistrate este descurajată. Dacă trebuie să includeți codul brut între etichetele scurtăturii, cel puțin luați în considerare utilizarea filtrului no_texturize_shortcodes pentru a preveni texturarea conținutului lui tag-a:

add_shortcode( ‘tag-a’, ‘my_tag_a_handler’ );
add_filter( ‘no_texturize_shortcodes’, ‘ignore_tag_a’ );

function ignore_tag_a( $list ) {
$list[] = ‘tag-a’;
return $list;
}

Scurtături neînchise

În anumite cazuri analizorul de scurtătură nu poate utiliza corect ambele scurtături atât închise cât și neînchise. De exemplu, în acest caz, analizorul numai ca va identifica în mod corect a doua instanță a scurtăturii:

[tag] [tag] CONTENT
[/tag]

Cu toate acestea, în acest caz, analizorul va identifica ambele:

[tag] CONTENT
[/tag] [tag]

Cratime

Notă: Comportamentul descris mai jos care implică scurtături cu cratime (‘‘) încă se aplică în WordPress 3+. Acest lucru ar putea fi din cauza unui bug în do_shortcode() sau get_shortcode_regex().

Aveți grijă atunci când utilizați cratime în numele scurtăturilor. În următoarea instanță WordPress poate vedea a doua scurtătură de deschidere ca fiind echivalentă cu prima (de fapt WordPress vede prima parte înainte de cratimă):

[tag] [tag-a]

Totul depinde de care cod scurt este definitprimul. Dacă aveți de gând să utilizați cratime, atunci definiți cea mai scurtă scurtătură prima.

Pentru a evita acest lucru, utilizați o liniuță de subliniere sau pur și simplu niciun separator:

[tag] [tag_a] [tag] [taga]

Dacă prima parte a scurtăturii este diferită de alta, puteți evita folosirea cratimelor:

[tag] [tagfoo-a]

Important: Utilizarea cratimelor poate avea implicații de care să nu fiți conștienți; precum în cazul în care și alte scurtături instalate folosesc de asemenea cratime, utilizarea de cuvinte generice cu cratime poate provoca coliziuni (dacă scurtăturile sunt utilizate împreună în aceeași cerere):

// plugin-A
[is-logged-in]

// plugin-B
[is-admin]

Paranteze pătrate

Analizorul de scurtătură nu acceptă paranteze pătrate între atribute. Astfel, următoarea va eșua:

[tag attribute=”[O valoare oarecare]”]

Etichetele înconjurate de paranteze nu sunt încă pe deplin susținute de wptexturize() sau filtrele sale. Aceste coduri pot da rezultate neașteptate:

[Am pus un text la întâmplare lângă captarea mea. ]

Notă: Aceste limitări se pot schimba în versiunile viitoare ale WordPress, ar trebui să testați pentru a fi absolut sigur.

HTML

Începând cu versiunea 3.9.3, folosirea HTML este limitată în interiorul atributelor scurtăturii. De exemplu, acest cod scurt nu va funcționa corect, deoarece conține un caracter „>„:

[tag value1=”35″ value2=”25″ compare=”>”]

Versiunea 4.0 este concepută pentru a permite HTML validat, astfel încât aceasta va funcționa:

[tag description=”<b>Salutări</b>”]

Soluția propusă pentru limitările HTML este de a utiliza codificarea HTML pentru toate intrările de utilizator, și apoi adăugați decodarea HTML în manipulatorul de scurtătură personalizat. Funcțiile suplimentare API sunt planificate.

Utilizarea completă a HTML în atributele de scurtătură nu a fost niciodată susținută oficial, iar acest lucru nu va fi extins în versiunile viitoare.

Începând cu versiunea 4.2.3, limitări similare au fost plasate pe utilizarea de scurtături în interiorul HTML. De exemplu, această scurtătură nu va funcționa corect deoarece este imbricată într-un atribut de scripting:

<a onclick=”[tag]”>

Soluția propusă pentru atribute dinamice este de a proiecta o scurtătură care produce toate codurile HTML necesare, mai degrabă decât doar o singură valoare. Acest lucru va lucra mai bine:

[link onclick=”tag”]

De asemenea, notați că următoarea scurtătură nu mai este permis din cauza ănscrierii în ghilimele a atributului incorect:

<a title=”[tag attr=”id”]”>

Singura modalitate de a analiza acest HTML ca fiind valid este de a folosi ghilimele simple și duble într-un mod imbricat:

<a title=”[tag attr=’id’]”>

Numărul de înregistrări

API este cunoscut că devine instabil atunci când se înregistrează sute de scurtături. Dezvoltatorii de module ar trebui să dezvolte soluții care se bazează pe un număr mic de nume de scurtături. Această limitare s-ar putea schimba în versiunile viitoare.

Traducere din wordpress.org

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *