Wie man mehrere verschachtelte Shortcodes mit verschiedenen Tags behandelt?

Hallo, ich bin ziemlich neu in der Kurzwahlprogrammierung und habe mich gefragt, ob es möglich ist, den folgenden verschachtelten Shortcode mit verschiedenen Shortcode-Tags zu verarbeiten:

[review] [title]Sample Review[/title] [image]http://localhost/wordpress/wp-content/uploads/2016/04/picture.jpg[/image] [criteria title="Criteria 1" score="100"] [criteria title="Criteria 2" score="90"] [criteria title="Criteria 3" score="80"] [/review] 

Um diesen beabsichtigten HTML-Block zu erzeugen:

 

Sample Review

Criteria 1 - 100

Criteria 2 - 90

Criteria 3 - 80

90

Ich verstehe, dass ich rekursiv verwenden muss do_shortcodes ($ content), aber dies tun wird alle shortcodes von $ contents aufrufen und wird Folgendes erzeugen:

 

Sample Review

Criteria 1 - 100

Criteria 2 - 90

Criteria 3 - 80

...

Shortcodes sind folgende:

 function makeTitle( $atts, $content = null ) { return '

'.$content. '

'; } add_shortcode('title', 'makeTitle'); function makeImage( $atts, $content = null ) { return ' '; } add_shortcode('image', 'makeImage'); function makeCriteria( $atts, $content = null ) { extract(shortcode_atts( array( 'title' => 'Criteria', 'score' => '0', ), $atts )); return '

'.$title. ' - ' .$score. '

'; } add_shortcode('criteria', 'makeCriteria'); function makeReview( $atts , $content = null ) { return '
'.do_shortcode($content).'
'; ... } add_shortcode('review', 'makeReview');

Was ich wollte ist auf dem ersten do_shortcode ($ content) sollte nur do_shortcode für [title] [/ title] sein. Vielen Dank!

Solutions Collecting From Web of "Wie man mehrere verschachtelte Shortcodes mit verschiedenen Tags behandelt?"

Ich würde Ihre Verwendung von Shortcode Nesting als eine schlechte Idee bezeichnen, was Sie wirklich brauchen, ist ein Überdenken Ihrer Strategie.

Es ist nicht schlecht, Shortcodes zu verschachteln, aber Shortcodes sollten unabhängige Entitäten sein, und in Ihrer Struktur werden die inneren natürlich davon abhängen, dass sie “innerlich” sind und keinen Nutzen für sich haben. Ein falsches Kopieren und Einfügen, ein an der falschen Stelle hinzugefügtes Zeichen und die gesamte Struktur schlägt fehl, ohne dass der Benutzer über Werkzeuge zum Debuggen verfügt.

Wenn es sich bei Ihrem coreinhalt um eine Rezension handelt, fügen Sie einfach eine Metabox hinzu, in der alle relevanten Daten enthalten sein können, und verwenden Sie einfach einen [review] -Shortcode, um sie anzuzeigen.

Für verschachtelten do_shortcode müssen Sie do_shortcode für Ihren $content do_shortcode .

 function makeTitle( $atts, $content ) { ob_start(); ?> 

< ?php echo do_shortcode( $content ); ?>

< ?php return ob_get_clean(); }