Care este cea mai bună metodă de a activa shortcode-uri imbricate?
Este aceasta cea mai bună metodă de a activa shortcode-uri imbricate?:
add_filter( 'the_content', 'do_shortcode' );
Găsesc continuu rezultate contradictorii și vreau să fiu sigur că nu voi strica altceva!

http://codex.wordpress.org/Shortcode_API#Nested_Shortcodes
Tot ce trebuie să știi despre shortcodurile imbricate în WordPress

Care menționează "cu condiția ca funcțiile lor de gestionare să o suporte prin apelarea recursivă a do_shortcode()" - Deci, a face așa cum mai sus nu ar fi calea de urmat?

Poate o întrebare mai potrivită ar fi, dacă setarea acesteia mai sus la prioritatea implicită (10) ar cauza probleme de care nu sunt conștient?

Linia de cod pe care ai postat-o este inutilă. Adaugi funcția do_shortcode la filtrul the_content. WordPress face deja asta automat. Aplicarea din nou nu va face lucrurile recursive. După cum spune codex-ul: "cu condiția ca funcțiile lor de gestionare să o suporte prin apelarea recursivă a do_shortcode()"

Sunt doar câteva shortcode-uri diferite pentru coloane, ele nu se bazează pe do_shortcode($content) în interiorul shortcode-urilor. Funcționează cu filtrul schimbat la prioritatea 10, dar cred că o să le rescriu să folosească do_shortcode($content) așa cum este specificat. Apreciez răspunsurile tale rapide.

Iată un răspuns specific, pentru a evita dependența de documentația oficială WP din celălalt răspuns (care, se pare, nu oferă instrucțiuni explicite oricum).
Folosește do_shortcode() pe input
Iată un exemplu de înregistrare a unui shortcode care suportă shortcode-uri imbricate în interiorul său:
function register_example_shortcode_with_nesting($atts, $text) {
$output = do_shortcode($text);
return $output;
}
add_shortcode('example_shortcode_with_nesting', 'register_example_shortcode_with_nesting');
Acest shortcode s-ar folosi astfel:
[example_shortcode_with_nesting]
[nested_shortcode]
[other_nested_shortcode]
[/example_shortcode_with_nesting]
Ingredientul cheie, desigur, este rularea conținutului $text
(care vine între tag-urile de deschidere și închidere ale shortcode-ului) prin do_shortcode()
. În mod implicit, WP ia primul shortcode pe care îl vede, apoi ignoră orice shortcode-uri din interiorul acestuia, așa că trebuie să-i spunem să "caute din nou", iar acest cod face exact asta.
Desigur, exemplul de mai sus nu face nimic util, va trebui să acționezi asupra $output
folosind $atts
etc. pentru a-l face să facă ceva.
Avertismente despre imbricarea shortcode-urilor cu tag-uri de închidere
- Această metodă suportă shortcode-uri în interior care au tag-uri de închidere, adică cele care au conținut $text.
- Dar poate da greș dacă ai mai multe shortcode-uri de același tip imbricate ca frați.
- Dacă ai același shortcode de mai multe ori, WP se poate încurca în privința a cui "tag de deschidere" se aplică cui "tag de închidere", și va aplica automat prima instanță la prima închidere.
Deci, iată regula mea de bază: Dacă un shortcode imbricat are un tag de închidere, acesta trebuie să fie fie primul, singurul de acest tip, fie toate shortcode-urile imbricate corespunzătoare trebuie să aibă tag-uri de închidere.
Deci un exemplu ca acesta nu va da ceea ce te aștepți:
[example_shortcode_with_nesting]
[nested_shortcode id=1]
[nested_shortcode id=2][/nested_shortcode]
[/example_shortcode_with_nesting]
Ce se întâmplă? Primești primul shortcode cu id=1
randat cu [/nested_shortcode]
ca tag de închidere, iar shortcode-ul cu id=2
ca conținut nerandat! Iată!
Deci, cum am spus mai sus, fie evită să ai același shortcode de mai multe ori, fie asigură-te că TOATE au atât tag-uri de deschidere, cât și de închidere!

Al meu nu este chiar un răspuns, dar deoarece am pierdut mult timp pe această întrebare, aș dori să subliniez un aspect evidențiat de răspunsul lui jerclarke: dacă shortcode-ul imbricat și cel pe care îl conține sunt același, codul nu va funcționa.
După cum se precizează în documentație:
Parserul de shortcode-uri gestionează corect macro-urile de shortcode imbricate, cu condiția ca funcțiile lor de manipulare să o suporte prin apelarea recursivă a do_shortcode():
[tag-a]
[tag-b]
[tag-c]
[/tag-b]
[/tag-a]
Cu toate acestea, parserul va eșua dacă un macro de shortcode este folosit pentru a încadra un alt macro cu același nume:
[tag-a]
[tag-a]
[/tag-a]
[/tag-a]
