Ok, so I’ve created a short code which echo’s some of the output; the problem I discovered is that the values must be returned instead of echo’d. I’m having problems converting the shortcode to return the date instead..
I’ve tried and it breaks my shortcode..
What would this shortcode code look like if it returned the code correctly instead of echo’ing it?
// [service slug="foobar"]
function services_shortcode( $atts ) {
// Attributes
extract( shortcode_atts(
array(
'slug' => '',
), $atts )
);
if ( isset( $slug ) ) {
$args = array( 'post_type' => 'cbd_services', 'name' => $slug ); // -1 Shows ALL Posts
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
$custom = get_post_custom($post->ID);
$galleryPhotos = unserialize($custom["gallery_photos"][0]);
?>
<div class="accordion closed">
<h4 class="accordionTitle"><?php the_title(); ?><span>+</span></h4>
<div class="accordionContent">
<?php the_content(); ?>
<?php if(!empty($galleryPhotos)){
foreach($galleryPhotos as $photo){ ?>
<div class="photoContainer">
<a class="fresco" data-fresco-group="<?php echo $slug; ?>" href="<?php echo $photo['gallery_imagesrc']; ?>">
<div class="hover">#makeitbigger</div><img src="<?php echo get_template_directory_uri(); ?>/thumb.php?src=<?php echo urlencode($photo['gallery_imagesrc']); ?>&w=452&h=275&zc=1" />
<span class="photoCaption"><?php echo $photo['gallery_title']; ?></span>
</a>
</div>
<?php }
} ?>
</div>
</div>
<?php endwhile; wp_reset_query();
}}
add_shortcode( 'service', 'services_shortcode' );
Just define a variable, and concat all html as string and return it.
And dont forget to
ob_end_clean()
so it wont echo your code!Wish i could add a comment to @Shazzad’s answer, But i have to post an answer:
The easiest way is to use buffering. You might have already used
ob_start()
andob_get_contents()
PHP native function. So your code would be –