Übergabe von Variablen in verschachtelten Shortcodes

Wie kann ich das style Attribut von [boxes] shortcode an [box] shortcodes übergeben, ohne globale Variablen zu verwenden? Ich möchte keine globalen Variablen verwenden, weil ich in einigen Artikeln gesehen habe, dass die Verwendung globaler Variablen eine schlechte Methode ist.

 [boxes style="style-one"] [box][/box] [box][/box] [box][/box] [box][/box] [/boxes] 

Solutions Collecting From Web of "Übergabe von Variablen in verschachtelten Shortcodes"

Wenn ich so etwas machen würde, würde ich tatsächlich 2 Shortcodes erstellen. Eine für die “Boxen” und eine für die innere “Box”. Ich glaube, dass das der einzige Weg ist, der plausibel ist.

Wenn Sie eine für die äußere Box erstellen, stellen Sie sicher, dass Sie do_shortcode () verwenden; um die Inhaltsvariable herum. Wenn Sie do_shortcode () nicht verwenden, können Sie Shortcodes [] nicht innerhalb eines anderen Shortcodes verwenden.

 add_shortcode('boxes', 'shortcode_boxes'); add_shortcode('box', 'shortcode_box'); function shortcode_boxes($args, $content = null) { extract(shortcode_atts(array( 'style' => '' ), $args)); return '
'. do_shortcode($content) .'
'; } function shortcode_box($args, $content = null) { extract(shortcode_atts(array( 'id' => '' ), $args)); return '
'. do_shortcode($content) .'
'; }

Dies ist in HTML5 gemacht, aber Sie könnten nur Artikel und Abschnitt zu Div ändern und alles wäre in Ordnung.

Verwendung:

 [boxes class="blue"] [box id="one"]content[/box] [box id="two"]content[/box] [/boxes] 

Sie werden die Textversion im Editor anstelle von Visual verwenden wollen, es sei denn, Sie haben einen Umschreibfilter, um die Leerzeichen zu fixieren. Wenn nicht, müssen Sie verwenden

 [boxes style="blue"] [box id="one"] content [/box] [box id="two"] content [/box] [/boxes] 

Lassen Sie mich wissen, wenn Sie irgendwelche Probleme, Fragen oder Bedenken haben.

—Bearbeiten—

Stil mit class ersetzt:

 

Die class sollte in Ihrer style.css eingestellt sein, in diesem Beispiel blau.

 .blue { /* class style */ }