function vcex_portfolio_grid_shortcode($atts) { extract(shortcode_atts(array('unique_id' => '', 'term_slug' => '', 'include_categories' => '', 'exclude_categories' => '', 'posts_per_page' => '8', 'grid_style' => 'fit_columns', 'masonry_layout_mode' => '', 'filter_speed' => '', 'columns' => '4', 'order' => 'DESC', 'orderby' => 'date', 'orderby_meta_key' => '', 'filter' => '', 'center_filter' => 'no', 'thumb_link' => 'post', 'thumb_lightbox_gallery' => '', 'thumb_lightbox_title' => '', 'img_crop' => 'true', 'img_width' => '9999', 'img_height' => '9999', 'img_filter' => '', 'title' => 'true', 'title_link' => 'post', 'excerpt' => 'true', 'excerpt_length' => 30, 'custom_excerpt_trim' => '', 'read_more' => '', 'read_more_text' => __('read more', 'wpex'), 'pagination' => '', 'filter_content' => 'false', 'offset' => 0, 'taxonomy' => '', 'terms' => '', 'img_hover_style' => '', 'img_overlay_disable' => '', 'img_rendering' => '', 'all_text' => '', 'overlay_style' => '', 'content_heading_margin' => '', 'content_background' => '', 'content_margin' => '', 'content_font_size' => '', 'content_padding' => '', 'content_border' => '', 'content_color' => '', 'content_opacity' => '', 'content_heading_color' => '', 'content_heading_size' => '', 'content_alignment' => '', 'readmore_background' => '', 'readmore_color' => '', 'equal_heights_grid' => '', 'single_column_style' => '', 'entry_media' => ''), $atts)); // Turn output buffer on ob_start(); // Global $post global $post; // Don't create custom tax if tax doesn't exist if (taxonomy_exists('portfolio_category')) { // Include categories $include_categories = '' != $include_categories ? $include_categories : $term_slug; $include_categories = 'all' == $include_categories ? '' : $include_categories; $filter_cats_include = ''; if ($include_categories) { $include_categories = explode(',', $include_categories); $filter_cats_include = array(); foreach ($include_categories as $key) { $key = get_term_by('slug', $key, 'portfolio_category'); $filter_cats_include[] = $key->term_id; } } // Exclude categories $filter_cats_exclude = ''; if ($exclude_categories) { $exclude_categories = explode(',', $exclude_categories); if (!empty($exclude_categories) && is_array($exclude_categories)) { $filter_cats_exclude = array(); foreach ($exclude_categories as $key) { $key = get_term_by('slug', $key, 'portfolio_category'); $filter_cats_exclude[] = $key->term_id; } $exclude_categories = array('taxonomy' => 'portfolio_category', 'field' => 'slug', 'terms' => $exclude_categories, 'operator' => 'NOT IN'); } else { $exclude_categories = ''; } } // Start Tax Query if (!empty($include_categories) && is_array($include_categories)) { $include_categories = array('taxonomy' => 'portfolio_category', 'field' => 'slug', 'terms' => $include_categories, 'operator' => 'IN'); } else { $include_categories = ''; } } // Meta key for orderby if ($orderby_meta_key && ('meta_value_num' == $orderby || 'meta_value' == $orderby)) { $meta_key = $orderby_meta_key; } else { $meta_key = NULL; } // Pagination variables $paged = NULL; $no_found_rows = true; if ('true' == $pagination) { global $paged; $paged = get_query_var('paged') ? get_query_var('paged') : 1; $no_found_rows = false; } // The Query $wpex_query = new WP_Query(array('post_type' => 'portfolio', 'posts_per_page' => $posts_per_page, 'offset' => $offset, 'order' => $order, 'orderby' => $orderby, 'meta_key' => $meta_key, 'filter_content' => $filter_content, 'paged' => $paged, 'tax_query' => array('relation' => 'AND', $include_categories, $exclude_categories), 'no_found_rows' => $no_found_rows)); //Output posts if ($wpex_query->posts) { // Set unique ID $unique_id = $unique_id ? $unique_id : 'portfolio-' . rand(1, 100); // Image hard crop if ('9999' == $img_height) { $img_crop = false; } else { $img_crop = true; } // Is Isotope var if ('true' == $filter || 'masonry' == $grid_style || 'no_margins' == $grid_style) { $is_isotope = true; } else { $is_isotope = false; } // No need for masonry if not enough columns and filter is disabled if ('true' != $filter && 'masonry' == $grid_style) { $post_count = count($wpex_query->posts); if ($post_count <= $columns) { $is_isotope = false; } } // Output script for inline JS for the Visual composer front-end builder if ($is_isotope) { vcex_front_end_grid_js('isotope'); } // Display filter links if ('true' == $filter && taxonomy_exists('portfolio_category')) { // Get the terms for the filter $terms = get_terms('portfolio_category', array('include' => $filter_cats_include, 'exclude' => $filter_cats_exclude)); // Display filter only if terms exist and there is more then 1 if ($terms && count($terms) > '1') { // Center filter links $center_filter = 'yes' == $center_filter ? 'center' : ''; // All text if ($all_text) { $all_text = $all_text; } else { $all_text = __('All', 'wpex'); } ?> <ul class="vcex-portfolio-filter filter-<?php echo $unique_id; ?> vcex-filter-links <?php echo $center_filter; ?> clr"> <li class="active"><a href="#" data-filter="*"><span><?php echo $all_text; ?> </span></a></li> <?php foreach ($terms as $term) { ?> <li><a href="#" data-filter=".cat-<?php echo $term->term_id; ?> "><?php echo $term->name; ?> </a></li> <?php } ?> </ul><!-- .vcex-portfolio-filter --> <?php } ?> <?php } // Content Design $content_style = ''; if ($content_background) { $content_style .= 'background:' . $content_background . ';'; } if ($content_padding) { $content_style .= 'padding:' . $content_padding . ';'; } if ($content_margin) { $content_style .= 'margin:' . $content_margin . ';'; } if ($content_border) { $content_style .= 'border:' . $content_border . ';'; } if ($content_font_size) { $content_style .= 'font-size:' . $content_font_size . ';'; } if ($content_color) { $content_style .= 'color:' . $content_color . ';'; } if ($content_opacity) { $content_style .= 'opacity:' . $content_opacity . ';'; } if ($content_alignment) { $content_style .= 'text-align:' . $content_alignment . ';'; } if ($content_style) { $content_style = 'style="' . $content_style . '"'; } // Heading Design $heading_style = ''; if ($content_heading_margin) { $heading_style .= 'margin: ' . $content_heading_margin . ';'; } if ($content_heading_size) { $heading_style .= 'font-size: ' . $content_heading_size . ';'; } if ($content_heading_color) { $heading_style .= 'color: ' . $content_heading_color . ';'; } if ($heading_style) { $heading_style = 'style="' . $heading_style . '"'; } // Readmore design if ('false' != $read_more) { $read_more = 'true'; // Set readmore to true $readmore_style = ''; if ($readmore_background) { $readmore_style .= 'background: ' . $readmore_background . ';'; } if ($readmore_color) { $readmore_style .= 'color: ' . $readmore_color . ';'; } if ($readmore_style) { $readmore_style = 'style="' . $readmore_style . '"'; } } // Set title to true if not false if ('false' != $title) { $title = 'true'; } // Set excerpt to true if not false if ('false' != $excerpt) { $excerpt = 'true'; } // Default excerpt length if ('' == $excerpt_length) { $excerpt_length = '30'; } elseif ('false' == $excerpt) { $excerpt_length = '0'; } // Trim custom Excerpts? if ('false' == $custom_excerpt_trim) { $custom_excerpt_trim = false; } else { $custom_excerpt_trim = true; } // Only use articles if title is enabled for HTML5 validity if ($title == 'true') { $main_element_type = 'article'; } else { $main_element_type = 'div'; } // Main wrap classes $wrap_classes = 'wpex-row vcex-portfolio-grid clr'; // Equal heights class if ('1' != $columns && ('fit_columns' == $grid_style && 'true' == $equal_heights_grid)) { $equal_heights_grid = true; } else { $equal_heights_grid = false; } // Isotope classes if ($is_isotope) { $wrap_classes .= ' vcex-isotope-grid'; } // No margins grid if ('no_margins' == $grid_style) { $wrap_classes .= ' vcex-no-margin-grid'; } // Left thumbnail 1 column style if ('left_thumbs' == $single_column_style) { $wrap_classes .= ' left-thumbs'; } // Lightbox classes if ('true' == $thumb_lightbox_gallery) { $wrap_classes .= ' lightbox-group'; $lightbox_single_class = ' lightbox-group-item'; } else { $lightbox_single_class = ' wpex-lightbox'; } // Data $data = ''; if ($is_isotope && 'true' == $filter) { if ('no_margins' != $grid_style && $masonry_layout_mode) { $data .= ' data-layout-mode="' . $masonry_layout_mode . '"'; } if ($filter_speed) { $data .= ' data-transition-duration="' . $filter_speed . '"'; } } if ('no_margins' == $grid_style && 'true' != $filter) { $data .= ' data-transition-duration="0.0"'; } ?> <div class="<?php echo $wrap_classes; ?> " id="<?php echo $unique_id; ?> "<?php echo $data; ?> > <?php // Define counter var to clear floats $count = $count_all = ''; // Start loop foreach ($wpex_query->posts as $post) { setup_postdata($post); // Open match-height-row div for equal heights if ($equal_heights_grid && !$is_isotope) { if (0 == $count) { ?> <div class="match-height-row clr"> <?php } $count_all++; } // Post Data $post_id = $post->ID; $post_title = get_the_title(); $post_title_esc = esc_attr(the_title_attribute('echo=0')); $post_permalink = get_permalink($post_id); // Add to the counter var $count++; // Add classes to the entries $entry_classes = 'portfolio-entry col'; $entry_classes .= ' span_1_of_' . $columns; $entry_classes .= ' col-' . $count; if ($is_isotope) { $entry_classes .= ' vcex-isotope-entry'; } if ('no_margins' == $grid_style) { $entry_classes .= ' vcex-no-margin-entry'; } if (taxonomy_exists('portfolio_category')) { $post_terms = get_the_terms($post, 'portfolio_category'); if ($post_terms) { foreach ($post_terms as $post_term) { $entry_classes .= ' cat-' . $post_term->term_id; } } } ?> <<?php echo $main_element_type; ?> class="<?php echo $entry_classes; ?> "> <?php // Entry Media if ('false' != $entry_media) { // Video if (function_exists('wpex_get_portfolio_featured_video_url') && wpex_get_portfolio_featured_video_url()) { ?> <div class="portfolio-entry-media clr"> <?php wpex_portfolio_post_video(); ?> </div> <?php } elseif (has_post_thumbnail()) { // Get cropped image $cropped_img = wpex_image_resize(wp_get_attachment_url(get_post_thumbnail_id()), intval($img_width), intval($img_height), $img_crop, 'array'); // Filter style $img_filter_class = $img_filter ? 'vcex-' . $img_filter : ''; // Media classes $media_classes = $img_filter_class; if ($img_hover_style) { $media_classes .= ' vcex-img-hover-parent vcex-img-hover-' . $img_hover_style; } if ($img_rendering) { $media_classes .= ' vcex-image-rendering-' . $img_rendering; } if ($overlay_style) { $media_classes .= ' ' . wpex_overlay_classname($overlay_style); } ?> <div class="portfolio-entry-media <?php echo $media_classes; ?> "> <?php // No link if ('nowhere' == $thumb_link) { ?> <img src="<?php echo $cropped_img['url']; ?> " alt="<?php echo $post_title; ?> " class="portfolio-entry-img" height="<?php echo $cropped_img['height']; ?> " width="<?php echo $cropped_img['width']; ?> " /> <?php // Lightbox } elseif ('lightbox' == $thumb_link) { // Display lightbox title $data = ''; if ('true' == $thumb_lightbox_title) { $data = ' data-title="' . $post_title_esc . '"'; } ?> <a href="<?php echo wp_get_attachment_url(get_post_thumbnail_id()); ?> " title="<?php echo $post_title_esc; ?> " class="portfolio-entry-media-link<?php echo $lightbox_single_class; ?> "<?php echo $data; ?> > <img src="<?php echo $cropped_img['url']; ?> " alt="<?php echo $post_title_esc; ?> " class="portfolio-entry-img" height="<?php echo $cropped_img['height']; ?> " width="<?php echo $cropped_img['width']; ?> " /> <?php // Standarad post link } else { ?> <a href="<?php echo $post_permalink; ?> " title="<?php echo $post_title_esc; ?> " class="portfolio-entry-media-link"> <img src="<?php echo $cropped_img['url']; ?> " alt="<?php echo $post_title_esc; ?> " class="portfolio-entry-img" height="<?php echo $cropped_img['height']; ?> " width="<?php echo $cropped_img['width']; ?> " /> <?php } ?> <?php // Close link and output overlay code if ('nowhere' != $thumb_link) { // Inner Overlay if ($overlay_style) { wpex_overlay('inside_link', $overlay_style); } // Close links echo '</a>'; // Outside Overlay if ($overlay_style) { wpex_overlay('outside_link', $overlay_style); } } ?> </div><!-- .portfolio-entry-media --> <?php } ?> <?php } ?> <?php // Display content if there is either a title or excerpt if ('true' == $title || 'true' == $excerpt) { ?> <div class="portfolio-entry-details clr" <?php echo $content_style; ?> > <?php // Equal height div if ($equal_heights_grid && !$is_isotope) { ?> <div class="match-height-content"> <?php } // Display the title if ('false' != $title) { ?> <h2 class="portfolio-entry-title" <?php echo $heading_style; ?> > <?php // Link title to post if ('post' == $title_link) { ?> <a href="<?php echo $post_permalink; ?> " title="<?php echo $post_title_esc; ?> " <?php echo $heading_style; ?> ><?php echo $post_title; ?> </a> <?php } elseif ('lightbox' == $title_link) { ?> <a href="<?php echo wp_get_attachment_url(get_post_thumbnail_id()); ?> " title="<?php echo $post_title_esc; ?> " class="wpex-lightbox" <?php echo $heading_style; ?> ><?php echo $post_title; ?> </a> <?php } else { echo $post_title; } ?> </h2> <?php } // Display excerpt and readmore if ('true' == $excerpt || 'true' == $read_more) { ?> <div class="portfolio-entry-excerpt clr"> <?php // Display full content if ('9999' == $excerpt_length) { the_content(); } elseif (function_exists('wpex_excerpt')) { $args = array('post_id' => $post_id, 'length' => intval($excerpt_length), 'trim_custom_excerpts' => $custom_excerpt_trim); wpex_excerpt($args); } else { the_excerpt(); } // Display Readmore if ('false' != $read_more) { // Read more string fallback if ('' == $read_more_text) { $read_more_text = __('read more', 'wpex'); } ?> <a href="<?php echo $post_permalink; ?> " title="<?php echo $read_more_text; ?> " rel="bookmark" class="vcex-readmore theme-button" <?php echo $readmore_style; ?> > <?php echo $read_more_text; ?> <span class="vcex-readmore-rarr"><?php echo wpex_element('rarr'); ?> </span> </a> <?php } ?> </div> <?php } // Close Equal height div if ($equal_heights_grid && !$is_isotope) { ?> </div> <?php } ?> </div><!-- .portfolio-entry-details --> <?php } ?> </<?php echo $main_element_type; ?> ><!-- .portfolio-entry --> <?php // Check if counter equal columns if ($count == $columns) { // Close equal height row if ($equal_heights_grid && !$is_isotope) { echo '</div><!-- .match-height-row -->'; } // Reset counter $count = ''; } // End foreach } // Make sure match-height-row is closed if ($equal_heights_grid && !$is_isotope) { if ('4' == $columns && $count_all % 4 != 0) { echo '</div><!-- .match-height-row -->'; } if ('3' == $columns && $count_all % 3 != 0) { echo '</div><!-- .match-height-row -->'; } if ('2' == $columns && $count_all % 2 != 0) { echo '</div><!-- .match-height-row -->'; } } ?> </div><!-- .vcex-portfolio-grid --> <?php // Paginate Posts if ('true' == $pagination) { wpex_pagination($wpex_query); } // Reset the WP query wp_reset_postdata(); // End has posts check } // Return outbut buffer return ob_get_clean(); }
* @author Alexander Clarke * @copyright Copyright (c) 2014, Symple Workz LLC * @link http://www.wpexplorer.com * @since Total 1.6.0 * @version 1.0.0 */ // Exit if accessed directly if (!defined('ABSPATH')) { exit; } // If the portfolio post has a video display it if (wpex_get_portfolio_featured_video_url()) { ?> <?php wpex_portfolio_post_video(); ?> <?php // Otherwise display thumbnail } elseif (has_post_thumbnail()) { ?> <?php // Get post data $esc_title = esc_attr(the_title_attribute('echo=0')); // Get thumbnail data $wpex_image = wpex_image('array'); $image_url = $wpex_image['url']; $image_width = $wpex_image['width']; $image_height = $wpex_image['height'];