I wrote a shortcode that displayed author profiles based on id. For example [user-profile id=”1″] would display the profile block defined in user-profile.php for author 1. It worked (even with multiple instances on the same page).
function user_profile( $atts, $content = null ) {
extract(shortcode_atts(array('id' => ''), $atts));
include 'user-profile.php';
}
…except the shortcode output was showing up before other entry content regardless of its place in the code. To solve this I added this fix:
function user_profile( $atts, $content = null ) {
extract(shortcode_atts(array('id' => ''), $atts));
function get_user_profile() { include 'user-profile.php'; }
ob_start();
get_user_profile();
$output_string = ob_get_contents();
ob_end_clean();
return $output_string;
}
…which worked to solve the positioning problem but broke multiple instances of the shortcode. [user-profile id=”1″] works but [user-profile id=”1″] [user-profile id=”2″] breaks itâthe page just stops loading at that point.
How can I modify this to allow multiple instances?
Try this way:
Problem solved! I updated the code in user-profile.php code so that it was all PHP and did not use any echos. Then I changed the shortcode function to: