Come utilizzare gli Shortcode all'interno dei tag HTML?

5 ott 2016, 17:38:55
Visualizzazioni: 55K
Voti: 5

Ho provato a includere gli shortcode con un parametro nell'output HTML raw, come mostrato di seguito:

<a href="https://example.com/folder/edit.php?action=someaction&id=[foocode parameter='value']&edittoken=[foocode parameter='othervalue']">linktext</a>

Questo causa il crash della funzione PHP do_shortcode().

È davvero impossibile fare questo tipo di operazioni con gli shortcode?

La descrizione del metodo contiene un avviso:

Gli utenti con capability unfiltered_html potrebbero ottenere output inaspettati se le parentesi angolari sono nidificate nei tag.

Tuttavia, il crash di PHP non è il tipo di output inaspettato che dovrebbe poter accadere.

PS: La funzione che viene chiamata è

function echocode( $atts ){
    return "Hello World";
}

e aggiunta come

add_shortcode("foocode", "echocode");

La funzione non viene mai eseguita. (Non viene stampato nessun echocode iniziale)

2
Commenti

Una callback per shortcode non deve eseguire echo di alcun elemento, deve restituire una stringa.

fuxia fuxia
5 ott 2016 18:07:16

Anche senza eseguire echo e con il metodo che restituisce semplicemente "", si verifica comunque un crash.

ApolloLV ApolloLV
5 ott 2016 18:20:10
Tutte le risposte alla domanda 5
4

gli shortcode non sono consentiti negli attributi HTML, gli shortcode non sono un linguaggio di programmazione, sono segnaposto per contenuti HTML appropriati.

5 ott 2016 18:18:48
Commenti

In realtà sono consentiti, poiché il metodo ha un'opzione per ignorare o meno gli shortcode all'interno dei tag HTML. Se non fossero consentiti, il metodo dovrebbe ignorare tutti gli shortcode all'interno dei tag HTML per garantire la stabilità.

ApolloLV ApolloLV
5 ott 2016 18:24:04

se sei l'esperto perché lo chiedi? :( non sono consentiti, punto. Puoi scrivere il tuo parser di contenuti se vuoi usando qualsiasi API desideri, ma se mai intendessi che un utente lo utilizzi realmente, fallirà. Questa è una funzionalità introdotta nella versione 4.3 o 4.4, prima era possibile, ed è stata cambiata a causa di "abusi" del tipo che mostri nel tuo codice. Potresti farli funzionare, ma questo non è supportato dal core, quindi non saprai mai quando ciò che fai inizierà a fallire

Mark Kaplun Mark Kaplun
5 ott 2016 18:28:38

Grazie, era esattamente il tipo di approfondimento che cercavo :D

ApolloLV ApolloLV
5 ott 2016 18:50:01

felice di aiutare, non prendere troppo sul serio il mio broncio ;)

Mark Kaplun Mark Kaplun
5 ott 2016 18:52:49
0

Spero che questo possa aiutare qualcuno:

Invece di fare questo: <a href="https://example.com/folder/edit.php?action=someaction&id=[foocode parameter='value']&edittoken=[foocode parameter='othervalue']">linktext</a>

Puoi fare questo: [foocode parameter1=value parameter2=othervalue] e poi fare questo:

add_shortcode( 'foocode', 'prefix_foocode' );

function prefix_foocode( $atts ) {

    // Normalizza $atts, imposta i valori predefiniti e fai ciò che vuoi con $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

Per quel che vale, gli shortcode che non accettano parametri sembrano funzionare all'interno dei tag HTML. Sono quelli con parametri che non funzionano.

Esempio: <a href="https://example.com/folder/edit.php?action=someaction&id=[foocode parameter='value']&edittoken=[foocode parameter='othervalue']">linktext</a> non funziona

Esempio: <a href="https://example.com/folder/edit.php?action=someaction&id=[foocode]&edittoken=[foo-other-code]">linktext</a> funziona (almeno per me)

Ho utilizzato uno shortcode semplice come questo per visualizzare il percorso delle immagini sul mio sito, così non devo ricordarmi il percorso ogni volta (non uso il media manager).

Spero che questo aiuti qualcuno che potrebbe imbattersi in questa domanda in futuro.

9 lug 2017 16:13:14
Commenti

Sembra che l'utilizzo degli stessi apici per l'attributo HTML e per gli attributi dello shortcode crei problemi. <a href="[mytest attribute='1234']">test</a> funziona, così come <a href="[mytest attribute=1234]">test</a> oppure <a href='[mytest attribute="1234"]'>test</a>.

janh janh
30 gen 2018 10:57:08

Buono a sapersi. Non ricordo se l'avevo già provato prima, ma è possibile che abbiano modificato o corretto qualcosa dall'estate scorsa quando ho scritto questo codice. Grazie per il contributo.

Crazycoolcam Crazycoolcam
30 gen 2018 14:55:06
2

Per favore prova con questo-

<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']"); ?>">testo del link</a>
5 ott 2016 19:40:11
Commenti

Questo potrebbe funzionare se codificato in un file o una funzione (function.php, un template, ecc.), ma non funzionerebbe se codificato nell'editor TinyMCE poiché il PHP viene automaticamente rimosso lì.

Ian Ian
19 mar 2017 06:37:56

@Ian esattamente - lo scopo degli shortcode è permettere agli utenti finali (editor) di aggiungere contenuti dinamici nell'editor; usare php sconfiggerebbe completamente lo scopo.

Peter Kionga-Kamau Peter Kionga-Kamau
27 dic 2018 20:56:04
0

Per eseguire lo shortcode all'interno dell'elemento HTML grezzo, dovresti trovare la funzione di callback che viene chiamata tramite lo shortcode e poi far visualizzare quella funzione nell'elemento HTML grezzo.

Ad esempio, se il tuo shortcode è [foo_code], allora individua quale funzione viene richiamata quando questo shortcode viene eseguito cercando l'add_shortcode() relativo (in questo caso [foo_code])-

add_shortcode('foo_code', 'foo_callback_function');

Ora, una volta identificata la funzione richiamata, puoi semplicemente visualizzarla nell'HTML grezzo come:

[echo foo_callback_function();]

Per maggiori dettagli sul perché questo funziona, consulta questa risposta. Spero sia utile!

18 mar 2018 18:48:42