Shortcode funktioniert nicht, ändert die HTML-Reihenfolge

Mein Shortcode ist ein Durcheinander, er ändert die Reihenfolge. Das ist mein Code:

add_shortcode( 'recent-portfolio', 'brechting_recent_portfolio' ); function brechting_recent_portfolio( $atts ) { extract( shortcode_atts( array( 'numbers' => '5', ), $atts ) ); $rposts = new WP_Query( array( 'post_type' => 'portfolio', 'posts_per_page' => $numbers, 'orderby' => 'date' ) ); if ( $rposts->have_posts() ) { $html = '
'; while( $rposts->have_posts() ) { $rposts->the_post(); if ( has_post_thumbnail()) { $html .= sprintf( '', the_post_thumbnail_url( 'full' ), the_title_attribute(), //get_the_title() the_post_thumbnail() ); }} $html .= '
'; } wp_reset_query(); return $html; }

Dies ist die Ausgabe:

 
http://localhost:8888/wp-content/uploads/2017/08/geboortekaart-Bart.pngGeboortekaartje Barthttp://localhost:8888/wp-content/uploads/2017/08/lejo.pngLejo

Wenn ich get_title() , funktioniert es auch, aber wenn ich die vorgestellte bildbasierte function verwende, ändert sich die Reihenfolge …

Kann mir bitte jemand helfen?

Solutions Collecting From Web of "Shortcode funktioniert nicht, ändert die HTML-Reihenfolge"

the_post_thumbnail_url() gibt die URL zurück. Sie sollten functionen verwenden, die get_the_... am Anfang ihrer Namen haben, da functionen, die mit the_... im Allgemeinen den Inhalt wiedergeben.

Also, Ihr sprintf sollte get_the_post_thumbnail_url() wie sprintf verwenden:

  $html .= sprintf( '', get_the_post_thumbnail_url( get_the_ID(), 'full' ), the_title_attribute( 'echo=0' ), //get_the_title() //the_post_thumbnail() ); 

In diesem Fall hat the_title_attribute() jedoch keine get_the_... -Version, soweit ich weiß. Sie können das Echo jedoch deaktivieren, indem Sie es als Argument an die function übergeben.

Verwenden Sie auch wp_reset_postdata(); anstelle von wp_reset_query() . Letzteres sollte verwendet werden, wenn Sie query_posts() (was Sie nicht verwenden sollten!).