Echo HTML in benutzerdefiniertem Shortcode

Ich habe einen Shortcode geschrieben, den ich zu verfeinern versuche. Es erhält im Grunde nur eine Liste von Lesezeichen und druckt sie. Aber ich muss HTML hinzufügen, abhängig von dem Typ, der definiert ist.

extract(shortcode_atts(array('cat' => '', 'type' => ''), $atts)); $bookmarks = get_bookmarks( array( 'orderby' => 'name', 'order' => 'ASC', 'category' => $cat )); if (is_single()){ if($type == 'audio'){echo '
Audio
';} if($type == 'video'){echo '
Video
';} foreach ( $bookmarks as $bookmark ) { printf( ' https://wordpress.stackexchange.com/questions/137787/echo-html-in-custom-shortcode/%s', $bookmark->link_url, $bookmark->link_name, $bookmark->link_name, $bookmark->link_name ); } echo '
'; }

Je nachdem, ob ich den Typ als Audio oder Video definiere, sollte er HTML entsprechend dem Typ ausgeben. Aber ich bin mir nicht sicher, warum das nicht funktioniert.

Jede Hilfe wäre willkommen.

Vielen Dank.

Solutions Collecting From Web of "Echo HTML in benutzerdefiniertem Shortcode"

Ich weiß nicht, was “das nicht funktioniert” bedeutet, aber ein Shortcode sollte nichts echo . Sie sollten eine Zeichenfolge verketten und return .

 if (is_single()){ $str = ''; if($type == 'audio'){ $str .= '
Audio
'; } if($type == 'video'){ $str .= '
Video
'; } foreach ( $bookmarks as $bookmark ) { $str .= sprintf( ' https://wordpress.stackexchange.com/questions/137787/echo-html-in-custom-shortcode/%s', $bookmark->link_url, $bookmark->link_name, $bookmark->link_name, $bookmark->link_name ); } $str .= '
'; } return $str;

Ich sehe nichts anderes offensichtlich falsch, obwohl der Code, den du gepostet hast, unvollständig ist, also vermute ich, dass das das Problem ist.