You have this code in your shortcode function:
if( count($posts) ):
echo '<ul id="portfolio-grid" class="portfolio-grid unstyled '.$post_columns.'-cols">';
foreach( $posts as $post ) : setup_postdata( $post );
?>
<li>
<a href="https://wordpress.stackexchange.com/questions/104016/<?php the_permalink(); ?>" data-largesrc="<?php if ( has_post_thumbnail() ) { echo ub_featured_img_url('portfolio-fullsize'); } else { ?>http://placehold.it/600&text=<?php _e('No Thumbnails', 'une_boutique'); } ?>" data-title="<?php the_title() ?>" data-button="<?php _e('View Project', 'une_boutique'); ?>" data-description="<?php the_excerpt() ?>">
<?php if ( has_post_thumbnail() ) { the_post_thumbnail(); } else { ?>
<img src="http://placehold.it/320&text=<?php _e('No Thumbnails', 'une_boutique'); ?>" alt="no thumbnails">
<?php } ?>
<span class="item-title"><span class="arrow-shape-up"></span><?php the_title() ?></span>
</a>
</li>
<?php
endforeach; wp_reset_postdata();
echo '</ul>';
endif;
Shortcodes should return
their content.
Change this part into something like this:
if( count($posts) ):
ob_start();
echo '<ul id="portfolio-grid" class="portfolio-grid unstyled '.$post_columns.'-cols">';
foreach( $posts as $post ) : setup_postdata( $post );
?>
<li>
<a href="https://wordpress.stackexchange.com/questions/104016/<?php the_permalink(); ?>" data-largesrc="<?php if ( has_post_thumbnail() ) { echo ub_featured_img_url('portfolio-fullsize'); } else { ?>http://placehold.it/600&text=<?php _e('No Thumbnails', 'une_boutique'); } ?>" data-title="<?php the_title() ?>" data-button="<?php _e('View Project', 'une_boutique'); ?>" data-description="<?php the_excerpt() ?>">
<?php if ( has_post_thumbnail() ) { the_post_thumbnail(); } else { ?>
<img src="http://placehold.it/320&text=<?php _e('No Thumbnails', 'une_boutique'); ?>" alt="no thumbnails">
<?php } ?>
<span class="item-title"><span class="arrow-shape-up"></span><?php the_title() ?></span>
</a>
</li>
<?php
endforeach; wp_reset_postdata();
echo '</ul>';
return ob_get_clean();
endif;