Verschachtelte Shortcodes

Ich benutze 2 Plugins in meinem WordPress-Blog – WP-Mitglieder und Dropbox Folder Share . Ich möchte so etwas machen:

[dropbox-foldershare-hyno link="[wp-members field="some_link"]" ver_como='lista'] 

Ist das möglich?

Solutions Collecting From Web of "Verschachtelte Shortcodes"

Sie können keine Shortcodes wie diese verwenden. Der Parser würde das nicht so lesen, wie du willst.

Aber es gibt eine Problemumgehung: Hijack das dropbox-foldershare-hyno , führen Sie die callbackfunktion für die wp-members auf dem Link aus und übergeben Sie das Ergebnis an den ursprünglichen dropbox-foldershare-hyno Callback.

Beispielcode, nicht getestet:

 // wait until the other plugins are loaded add_action( 'wp_loaded', 'wpse_100100_shortcode_magic' ); function wpse_100100_shortcode_magic() { add_shortcode( 'dropbox-foldershare-hyno', 'wpse_100100_shortcode_replacement' ); } function wpse_100100_shortcode_replacement( $atts ) { global $bvwidget; if ( isset ( $atts['link'] ) ) $atts['link'] = wpmem_shortcode( array( 'field' => $atts['link'] ) ); return $bvwidget->replace_shortcode( $atts ); } 

Jetzt können Sie den Shortcode [dropbox-foldershare-hyno] und einen Wert für das [dropbox-foldershare-hyno] , das von WP [dropbox-foldershare-hyno] konvertiert werden soll, bevor Dropbox Folder Share es in die Hände bekommt.

Wie wir es in naher Zukunft machen können 😉

Wenn das dropbox-foldershare-hyno Plugin WordPress 3.6 dropbox-foldershare-hyno wird, können wir dropbox-foldershare-hyno tun:

 add_filter('shortcode_atts_dfh','overwrite_dfh_atts',10,3); function overwrite_dfh_atts($out, $pairs, $atts){ if($atts['link']) $out['link'] = do_shortcode( sprintf( '[wp-members field="%s"]', esc_attr( $atts['link'] ) ) ); return $out; } 

Überschreiben des Linkattributs von Shortcode:

 [dropbox-foldershare-hyno link="some value for the wp-member field attribute"] 

shortcode, wenn der entsprechende shortcode_atts_{$shortcode} Filter shortcode_atts_dfh .

Sie können hier mehr darüber lesen.

Verschachtelte Shortcodes funktionieren nur unter bestimmten Umständen:

  • Nur beigefügte Shortcodes können verschachtelt werden. Mit anderen Worten, der Stil von [shortcode] Inhalt [/ shortcode]. Selbstschließende Shortcodes wie [shortcode attribute = “foo”] können nicht verschachtelt werden.
  • Auch in diesem Fall muss der äußere do_shortcodes() korrekt eingerichtet werden, indem do_shortcodes() für den zurückgegebenen Inhalt do_shortcodes() wird. (ref: Shortcodes API: Verschachtelte Shortcodes )

In Ihrem Beispiel lautet die Antwort wahrscheinlich nein, aufgrund des ersten Punktes oben. Aber Sie müssen die Dokumentation für Ihre spezifischen Plugins überprüfen, um zu sehen, ob der Autor weitere Optionen für die Verwendung der jeweiligen Shortcodes zur Verfügung stellt.