Abrufen der Anzahl eines Shortcodes, der verschachtelt ist

Nehmen wir an, ich habe einen Shortcode verschachtelt, bei dem der äußerste Shortcode nur HTML ist, aber der innere Code ist derjenige, der die Daten anzeigt.

[outer_shortcode][inner_code url="#" title="Hello"][/outer_shortcode] 

In diesem Fall ist die Anzahl der inneren Elemente eins. Im folgenden:

 [outer_shortcode][inner_code url="#" title="Hello"][inner_code url="#2" title="Hello2"][/outer_shortcode] 

Die innere Zählung ist zwei.

Wie kann ich dies bei den functionen feststellen, mit denen ich arbeite?

Ich habe momentan (äußerer Shortcode, der das innere nennt):

 return '
';

Und als innerlich:

  $the_stuff .= '
  • '; $the_stuff .= ''.$title.''; $the_stuff .= '
  • '; return $the_stuff;

    Das ist, was ich will. Um die Listenelemente zu zählen . Wie kann ich das erreichen?

    Solutions Collecting From Web of "Abrufen der Anzahl eines Shortcodes, der verschachtelt ist"

    Hier ist ein sehr, sehr grober Code, der dir den Anfang machen sollte:

     add_shortcode('outer_shortcode',function($attts,$content){return 1;}); add_shortcode('inner_code',function($attts,$content){return 1;}); $str = '[outer_shortcode][inner_code url="#" title="Hello"][inner_code url="#2" title="Hello2"][/outer_shortcode]'; $reg = get_shortcode_regex(); preg_match_all('~'.$reg.'~',$str,$matches); var_dump($matches); preg_match_all('~'.$reg.'~',$matches[5][0],$matches2); var_dump($matches2); 

    Was passiert, ist, dass Sie die Zeichenkette analysieren, die dem äußeren Kurzwort entspricht und diesen “auseinanderzieht”. Sie müssen dann den Inhalt des Shortcodes analysieren (Array-Element 5), um die zwei inneren Shortcodes zu analysieren. count($matches[0][0]) sollte 2 sein. Einfach ist das Prinzip, aber es gibt viele Möglichkeiten, wie es schief gehen könnte. Sie möchten eine Menge Fehlerüberprüfung durchführen und möchten möglicherweise über die Arrays iterieren, anstatt die erste Übereinstimmung, $matches[5][0] , anzunehmen, wie ich es getan habe.

    Wenn Sie sich die Quelle für get_shortcode_regex , können Sie sehen, was die verschiedenen Teile dieses komplizierten Arrays bedeuten:

     199 * 1 - Ein extra [um das umgehen von Shortcodes mit Double [[]] zu ermöglichen
     200 * 2 - Der Kurzwahlname
     201 * 3 - Die Shortcode-Argumentliste
     202 * 4 - Das selbstschließende /
     203 * 5 - Der Inhalt eines Shortcodes, wenn ein Inhalt umgebrochen wird.
     204 * 6 - Extra], um das Ausbrechen von Shortcodes mit Double [[]] zu ermöglichen
    

    Wenn du machst, was ich denke, machst du wahrscheinlich so etwas:

     add_shortcode( 'outer_shortcode', function($atts,$content){ $reg = get_shortcode_regex(); preg_match_all('~'.$reg.'~',$content,$matches); echo count($matches[0]); return do_shortcode($content); } ); add_shortcode( 'inner_code', function($atts,$content){ $the_stuff = '
  • '; $the_stuff .= ''.$atts['title'].''; $the_stuff .= '
  • '; return $the_stuff; } ); // now test it $str = '[outer_shortcode][inner_code url="#" title="Hello"][inner_code url="#2" title="Hello2"][/outer_shortcode]'; echo do_shortcode($str);

    Ich denke, Sie können den Rest des Markups ausfüllen.