Come utilizzare gli Shortcode all'interno dei tag HTML?
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)
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à.

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

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;
}

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.

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

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

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!
