Cum folosesc Shortcode-uri în interiorul tag-urilor HTML?

5 oct. 2016, 17:38:55
Vizualizări: 55K
Voturi: 5

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)

2
Comentarii

Chiar și fără a folosi echo și metoda returnând doar "", tot se blochează.

ApolloLV ApolloLV
5 oct. 2016 18:20:10
Toate răspunsurile la întrebare 5
4

shortcode-urile nu sunt permise în atributele HTML, shortcode-urile nu sunt un limbaj de programare, ele sunt substituenți pentru conținut HTML corect.

5 oct. 2016 18:18:48
Comentarii

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.

ApolloLV ApolloLV
5 oct. 2016 18:24:04

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

Mark Kaplun Mark Kaplun
5 oct. 2016 18:28:38

Mulțumesc, exact acest tip de perspectivă căutam :D

ApolloLV ApolloLV
5 oct. 2016 18:50:01

mă bucur să te ajut, nu lua prea în serios morocănoasa mea ;)

Mark Kaplun Mark Kaplun
5 oct. 2016 18:52:49
0

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;
}
18 mar. 2017 23:59:22
2

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.

9 iul. 2017 16:13:14
Comentarii

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>.

janh janh
30 ian. 2018 10:57:08

Bine de știut. Nu îmi amintesc dacă am încercat asta înainte, dar este posibil să fi schimbat sau reparat ceva de vara trecută când am scris asta. Mulțumesc pentru contribuție.

Crazycoolcam Crazycoolcam
30 ian. 2018 14:55:06
2

Vă rugăm să încercați acest lucru-

<a href="https://example.com/folder/edit.php?action=someaction&id=<?php echo do_shortcode("[foocode parameter='value']"); ?>&edittoken=<?php echo do_shortcode("[foocode parameter='othervalue']"); ?>">linktext</a>
5 oct. 2016 19:40:11
Comentarii

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.

Ian Ian
19 mar. 2017 06:37:56

@Ian exact - scopul shortcode-urilor este să permită utilizatorilor finali (editorilor) să adauge conținut dinamic în editor; utilizarea PHP împotrivește complet acest scop.

Peter Kionga-Kamau Peter Kionga-Kamau
27 dec. 2018 20:56:04
0

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ă!

18 mar. 2018 18:48:42