Shortcode gibt nicht alle gewünschten Markups aus

Ich habe Probleme, meinen Shortcode zur Ausgabe des gesamten Markups zu bekommen – aus irgendeinem Grund wird nur ein Teil davon ausgegeben.

Ich habe folgende function:

function shortcode_container($atts, $content = null) { $type = isset($atts['type']) ? $atts['type'] : ''; $margintop = isset($atts['margintop']) ? $atts['margintop'] : ''; $marginbottom = isset($atts['marginbottom']) ? $atts['marginbottom'] : ''; $output = ''; $output .= '
'; $output .= '
'; $output .= '
'; $output .= apply_filters('the_content', $content); $output .= '
'; $output .= '
'; $output .= '
'; return $output; }

Ich möchte im WP WYSIWYG schreiben können:

 [container] Text [/container] 

So wird es ausgegeben als:

 
Text

Der Code gibt derzeit nur den

und nichts anderes, keinen

oder

.

Meine vollständige functions.php Datei ist hier .

Solutions Collecting From Web of "Shortcode gibt nicht alle gewünschten Markups aus"

Ich habe gerade diesen Code getestet und es scheint zu funktionieren. Wie andere bereits erwähnt haben, fehlt am Ende des unteren Rands ein Semikolon, das Sie semantisch korrekt hinzufügen könnten.

Damit der Code beim Eingeben in den WYSIWYG genau so ausgegeben wird, wie Sie wollen, ohne dass zusätzliche p-Tags den Text umschließen, sollten Sie einen Filter hinzufügen, der die

-Tags ersetzt:

 /* Shortcode Content Filter */ if ( ! function_exists( 'the_content_filter' ) ) : function the_content_filter($content) { $block = join("|",array('container')); $rep = preg_replace("/(

)?\[($block)(\s[^\]]+)?\](< \/p>|
)?/","[$2$3]",$content); $rep = preg_replace("/(

)?\[\/($block)](< \/p>|
)?/","[/$2]",$rep); return $rep; } add_filter("the_content", "the_content_filter"); endif;

Ansonsten im Editor:

 [container] Text [/container] 

Dies wird ausgegeben:

 

Test

Ich mache oft eine Ausgabepufferung, und das funktioniert für mich. Schauen wir uns dieses Beispiel an. Nicht getestet.

Und esc_attr() kümmert sich um alle Arten von Flucht wegen schlechter Benutzereingaben.

 < ?php /** * Container shortcode * * Outputs a container wrapping the content. * * @param array $atts Array of shortcode attributes. * @param string $content Content within a shortcode. * @return string The formatted content. */ function wpse_228875_shortcode( $atts, $content ) { $atts = shortcode_atts( array( 'type' => '', 'margintop' => '', 'marginbottom' => '', ), $atts, 'container' ); $type = isset($atts['type']) ? $atts['type'] : ''; $margintop = isset($atts['margintop']) ? $atts['margintop'] : ''; $marginbottom = isset($atts['marginbottom']) ? $atts['marginbottom'] : ''; //start output buffering ob_start(); ?> 
< ?php /** * Using do_shortcode() will allow you * to use another shortcode within the * container shortcode. */ echo do_shortcode( apply_filters( 'the_content', $content ) ); ?>
< ?php //cleanup the buffering and return everything within return ob_get_clean(); } add_shortcode( 'container', 'wpse_228875_shortcode', 10, 2 );

Fußnote: Was ist Ausgabepufferung?

Ohne Ausgabepufferung (der Standard) wird Ihr HTML in Teilen an den Browser gesendet, während PHP durch Ihr Skript verarbeitet. Bei der Ausgabepufferung wird Ihr HTML in einer Variablen gespeichert und am Ende des Skripts als ein Stück an den Browser gesendet.

Quelle: https://stackoverflow.com/a/2832179/1743124