Cum folosesc Shortcode-uri în interiorul tag-urilor HTML?
Am încercat să includ shortcode-uri cu un parametru în output-ul HTML brut, așa cum este arătat mai jos:
<a href="https://example.com/folder/edit.php?action=someaction&id=[foocode parameter='value']&edittoken=[foocode parameter='othervalue']">text link</a>
Aceasta face ca funcția PHP do_shortcode()
să se blocheze.
Chiar nu este posibil să faci astfel de lucruri cu shortcode-uri?
Descrierea metodei conține în sine o avertizare:
Utilizatorii cu capabilitatea
unfiltered_html
pot obține output neașteptat dacă parantezele unghiulare sunt imbricate în tag-uri.
Cu toate acestea, blocarea PHP nu este tipul de output neașteptat care ar trebui să poată să apară.
PS: Funcția care este apelată este
function echocode( $atts ){
return "Salut Lume";
}
și adăugată ca
add_shortcode("foocode", "echocode");
Funcția nu rulează niciodată. (Nu se afișează niciun început de echocode)
De fapt, sunt permise, deoarece metoda are o opțiune pentru a ignora sau nu shortcode-urile din interiorul tag-urilor HTML. Dacă nu ar fi permise, metoda ar trebui să ignore toate shortcode-urile din interiorul tag-urilor HTML din motive de stabilitate.

dacă ești expertul, de ce întrebi? :( nu sunt permise, punct. Poți să-ți scrii propriul parser de conținut dacă vrei, folosind orice API dorești, dar dacă intenționezi ca un utilizator să-l folosească vreodată, va eșua. Aceasta este o caracteristică a versiunii 4.3 sau 4.4, înainte de asta era posibil, și a fost schimbată din cauza "abuzurilor" de tipul celor pe care le arăți în codul tău. Poate că vei reuși să-l faci să funcționeze, dar acest lucru nu este suportat de nucleu, așa că nu vei ști niciodată când ceea ce faci va începe să eșueze

Sper că acest lucru îi va ajuta pe cineva:
În loc să faceți asta: <a href="https://example.com/folder/edit.php?action=someaction&id=[foocode parameter='value']&edittoken=[foocode parameter='othervalue']">linktext</a>
Puteți face asta: [foocode parameter1=value parameter2=othervalue]
și apoi să faceți asta:
add_shortcode( 'foocode', 'prefix_foocode' );
function prefix_foocode( $atts ) {
// Normalizează $atts, setează valorile implicite și faci ce dorești cu $atts.
$html = '<a href="https://example.com/folder/edit.php?action=someaction&id=' . $atts['parameter1'] .'&edittoken=' . $atts['parameter2'] . '">linktext</a>';
return $html;
}

Pentru ceea ce merită, shortcode-urile care nu acceptă niciun parametru par să funcționeze în tag-urile HTML. Cele care au parametri nu funcționează.
Exemplu: <a href="https://example.com/folder/edit.php?action=someaction&id=[foocode parameter='value']&edittoken=[foocode parameter='othervalue']">linktext</a>
nu funcționează
Exemplu: <a href="https://example.com/folder/edit.php?action=someaction&id=[foocode]&edittoken=[foo-other-code]">linktext</a>
funcționează (cel puțin pentru mine)
Am folosit un shortcode simplu ca acesta pentru a afișa calea imaginilor pe site-ul meu, astfel încât să nu trebuiască să-mi amintesc calea de fiecare dată (nu folosesc managerul de media).
Sper că acest lucru îi va ajuta pe cei care ar putea da peste această întrebare mai târziu.

Se pare că folosirea acelorași ghilimele pentru atributul HTML și pentru atributele shortcode-ului creează probleme. <a href="[mytest attribute='1234']">test</a>
funcționează, la fel ca <a href="[mytest attribute=1234]">test</a>
sau <a href='[mytest attribute="1234"]'>test</a>
.

Aceasta ar putea funcționa dacă ar fi codată într-un fișier sau funcție (function.php, un șablon etc.), dar nu ar funcționa dacă ar fi codată în editorul TinyMCE, deoarece PHP este eliminat automat de acolo.

Pentru a executa shortcode-ul în interiorul unui element HTML brut, va trebui să găsiți funcția de callback care este apelată prin intermediul shortcode-ului și apoi să afișați acea funcție în elementul HTML brut.
De exemplu, dacă shortcode-ul tău este [foo_code]
, atunci află care funcție este apelată atunci când acest shortcode este executat, găsind add_shortcode() pentru acest shortcode (în acest caz [foo_code])-
add_shortcode('foo_code', 'foo_callback_function');
Acum, când știi care funcție este apelată, poți simplu să afișezi această funcție în HTML-ul brut astfel:
[echo foo_callback_function();]
Pentru mai multe detalii despre de ce funcționează, verifică acest răspuns. Sper că te ajută!
