$first_filter = TRUE; } foreach ($categories_to_display_slugs_names as $category_tax_slug => $category_tax_name) { // Set the first category filter to active, if the all filter isn't shown $active_class = ''; if ($first_filter) { $active_class = ' fusion-active'; $first_filter = FALSE; } echo sprintf('<li class="fusion-filter fusion-hidden%s"><a data-filter=".%s" href="#">%s</a></li>', $active_class, urldecode($category_tax_slug), $category_tax_name); } echo '</ul>'; } // Get the correct featured image size $post_featured_image_size = avada_get_portfolio_image_size($current_page_id); $post_featured_image_size_dimensions = avada_get_image_size_dimensions($post_featured_image_size); // Set picture size as data attribute; needed for resizing placeholders $data_picture_size = 'auto'; if ($post_featured_image_size != 'full') { $data_picture_size = 'fixed'; } echo sprintf('<div class="fusion-portfolio-wrapper" data-picturesize="%s" data-pages="%s">', $data_picture_size, $portfolio_posts_to_display->max_num_pages); // For non one column layouts check if column spacing is used, and if, how big it is, $custom_colulmn_spacing = FALSE; if (!strpos($current_page_template, 'one')) { // Page option set if (fusion_get_page_option('portfolio_column_spacing', $current_page_id) != NULL) { $custom_colulmn_spacing = TRUE; $column_spacing = fusion_get_page_option('portfolio_column_spacing', $current_page_id) / 2; echo sprintf('<style type="text/css">.fusion-portfolio-wrapper{margin: 0 %spx;}.fusion-portfolio-wrapper .fusion-col-spacing{padding:%spx;}</style>', -1 * $column_spacing, $column_spacing); // Page option not set, but theme option
/** * Render the parent shortcode * @param array $args Shortcode paramters * @param string $content Content between shortcode * @return string HTML output */ function render($args, $content = '') { global $smof_data; $defaults = FusionCore_Plugin::set_shortcode_defaults(array('class' => '', 'id' => '', 'autoplay' => 'no', 'boxed_text' => 'unboxed', 'cat_slug' => '', 'carousel_layout' => 'title_on_rollover', 'column_spacing' => '12', 'columns' => 3, 'exclude_cats' => '', 'excerpt_length' => '15', 'excerpt_words' => '', 'filters' => 'yes', 'layout' => 'carousel', 'mouse_scroll' => 'no', 'number_posts' => 8, 'offset' => '', 'picture_size' => 'fixed', 'scroll_items' => '', 'show_nav' => 'yes', 'strip_html' => 'yes', 'animation_direction' => 'left', 'animation_speed' => '', 'animation_type' => '', 'animation_offset' => Avada()->settings->get('animation_offset')), $args); if ($defaults['column_spacing'] === '0') { $defaults['column_spacing'] = '0.0'; } if ($defaults['strip_html'] == 'yes') { $defaults['strip_html'] = TRUE; } else { $defaults['strip_html'] = FALSE; } extract($defaults); self::$args = $defaults; // Set the image size for the slideshow $this->set_image_size(); // As $excerpt_words is deprecated, only use it when explicity set if ($excerpt_words || $excerpt_words === '0') { $excerpt_length = $excerpt_words; } // Transform $cat_slugs to array if (self::$args['cat_slug']) { $cat_slugs = preg_replace('/\\s+/', '', self::$args['cat_slug']); $cat_slugs = explode(',', self::$args['cat_slug']); } else { $cat_slugs = array(); } // Transform $cats_to_exclude to array if (self::$args['exclude_cats']) { $cats_to_exclude = preg_replace('/\\s+/', '', self::$args['cat_slug']); $cats_to_exclude = explode(',', self::$args['exclude_cats']); } else { $cats_to_exclude = array(); } // Initialize the query array $args = array('post_type' => 'avada_portfolio', 'paged' => 1, 'posts_per_page' => $number_posts, 'has_password' => false); if ($defaults['offset']) { $args['offset'] = $offset; } // Check if the are categories that should be excluded if (!empty($cats_to_exclude)) { // Exclude the correct cats from tax_query $args['tax_query'] = array(array('taxonomy' => 'portfolio_category', 'field' => 'slug', 'terms' => $cats_to_exclude, 'operator' => 'NOT IN')); // Include the correct cats in tax_query if (!empty($cat_slugs)) { $args['tax_query']['relation'] = 'AND'; $args['tax_query'][] = array('taxonomy' => 'portfolio_category', 'field' => 'slug', 'terms' => $cat_slugs, 'operator' => 'IN'); } } else { // Include the cats from $cat_slugs in tax_query if (!empty($cat_slugs)) { $args['tax_query'] = array(array('taxonomy' => 'portfolio_category', 'field' => 'slug', 'terms' => $cat_slugs)); } } // If placeholder images are disabled, add the _thumbnail_id meta key to the query to only retrieve posts with featured images if (!$smof_data['featured_image_placeholder']) { $args['meta_key'] = '_thumbnail_id'; } wp_reset_query(); $recent_works = new WP_Query($args); $portfolio_posts = ''; // Set a gallery id for the lightbox triggers on rollovers $gallery_id = sprintf('-rw-%s', $this->recent_works_counter); // Loop through returned posts // Setup the inner HTML for each elements while ($recent_works->have_posts()) { $recent_works->the_post(); // Reset vars $rich_snippets = $post_classes = $title_terms = $image = $post_title = $post_terms = $separator = $post_content = $buttons = $view_project_button = ''; // For carousels we only need the image and a li wrapper if ($layout == 'carousel') { // Title on rollover layout if ($carousel_layout == 'title_on_rollover') { $show_title = 'default'; // Title below image layout } else { $show_title = 'disable'; // Get the post title $title_terms .= sprintf('<h4 %s><a href="%s" target="%s">%s</a></h4>', FusionCore_Plugin::attributes('fusion-carousel-title'), get_permalink(get_the_ID()), '_self', get_the_title()); // Get the terms $title_terms .= get_the_term_list(get_the_ID(), 'portfolio_category', '<div class="fusion-carousel-meta">', ', ', '</div>'); } // Render the video set in page options if no featured image is present if (!has_post_thumbnail() && fusion_get_page_option('video', get_the_ID())) { // For the portfolio one column layout we need a fixed max-width if ($columns == '1') { $video_max_width = '540px'; // For all other layouts get the calculated max-width from the image size } else { $featured_image_size_dimensions = avada_get_image_size_dimensions($this->image_size); $video_max_width = $featured_image_size_dimensions['width']; } $image = sprintf('<div class="fusion-image-wrapper fusion-video" style="max-width:%s;">%s</div>', $video_max_width, fusion_get_page_option('video', get_the_ID())); } else { // Get the post image $image = avada_render_first_featured_image_markup(get_the_ID(), $this->image_size, get_permalink(get_the_ID()), TRUE, FALSE, FALSE, 'disable', $show_title, '', $gallery_id); } $portfolio_posts .= sprintf('<li %s><div %s>%s%s%s</div></li>', FusionCore_Plugin::attributes('fusion-carousel-item'), FusionCore_Plugin::attributes('fusion-carousel-item-wrapper'), avada_render_rich_snippets_for_pages(), $image, $title_terms); } else { // Get the post permalink $permalink = get_permalink(); // Include the post categories as css classes for later useage with filters $post_categories = get_the_terms(get_the_ID(), 'portfolio_category'); if ($post_categories) { foreach ($post_categories as $post_category) { $post_classes .= urldecode($post_category->slug) . ' '; } } // Add the col-spacing class if needed if ($column_spacing) { $post_classes .= 'fusion-col-spacing'; } // Render the video set in page options if no featured image is present if (!has_post_thumbnail() && fusion_get_page_option('video', get_the_ID())) { // For the portfolio one column layout we need a fixed max-width if ($columns == '1') { $video_max_width = '540px'; // For all other layouts get the calculated max-width from the image size } else { $featured_image_size_dimensions = avada_get_image_size_dimensions($this->image_size); $video_max_width = $featured_image_size_dimensions['width']; } $image = sprintf('<div class="fusion-image-wrapper fusion-video" style="max-width:%s;">%s</div>', $video_max_width, fusion_get_page_option('video', get_the_ID())); } else { // Get the post image $image = avada_render_first_featured_image_markup(get_the_ID(), $this->image_size, get_permalink(get_the_ID()), TRUE, FALSE, FALSE, 'disable', 'default', '', $gallery_id); } // Additional content for grid-with-excerpts layout if ($layout == 'grid-with-excerpts') { // Get the rich snippets, if enabled $rich_snippets = avada_render_rich_snippets_for_pages(false); // Get the post title $post_title = avada_render_post_title(get_the_ID()); // Get the post terms $post_terms = sprintf('<h4>%s</h4>', get_the_term_list(get_the_ID(), 'portfolio_category', '', ', ', '')); // Get the post content ob_start(); /** * fusion_recent_works_shortcode_content hook * * @hooked content - 10 (outputs the post content) */ do_action('fusion_recent_works_shortcode_content'); $stripped_content = ob_get_clean(); // For boxed layouts add a content separator if there is a post content if ($boxed_text == 'boxed' && $stripped_content) { $separator = '<div class="fusion-content-sep"></div>'; } // On one column layouts render the "Learn More" and "View Project" buttons if ($columns == '1') { $classes = sprintf('fusion-button fusion-button-small fusion-button-default fusion-button-%s fusion-button-%s', strtolower($smof_data['button_shape']), strtolower($smof_data['button_type'])); // Add the "Learn More" button $learn_more_button = sprintf('<a href="%s" %s>%s</a>', $permalink, FusionCore_Plugin::attributes($classes), __('Learn More', 'fusion-core')); // If there is a project url, add the "View Project" button $view_project_button = ''; if (fusion_get_page_option('project_url', get_the_ID())) { $view_project_button = sprintf('<a href="%s" %s>%s</a>', fusion_get_page_option('project_url', get_the_ID()), FusionCore_Plugin::attributes($classes), __('View Project', 'fusion-core')); } // Wrap buttons $buttons = sprintf('<div %s>%s%s</div>', FusionCore_Plugin::attributes('fusion-portfolio-buttons'), $learn_more_button, $view_project_button); } // Put it all together $post_content = sprintf('<div %s>%s%s%s<div %s>%s%s</div></div>', FusionCore_Plugin::attributes('fusion-portfolio-content'), $post_title, $post_terms, $separator, FusionCore_Plugin::attributes('fusion-post-content'), $stripped_content, $buttons); } else { // Get the rich snippets for grid layout without excerpts $rich_snippets = avada_render_rich_snippets_for_pages(); } $portfolio_posts .= sprintf('<div %s><div %s>%s%s%s</div></div>', FusionCore_Plugin::attributes('fusion-portfolio-post ' . $post_classes), FusionCore_Plugin::attributes('fusion-portfolio-content-wrapper'), $rich_snippets, $image, $post_content); } } // end while wp_reset_query(); // Wrap all the portfolio posts with the appropriate HTML markup // Carousel layout if ($layout == 'carousel') { $main_carousel = sprintf('<ul %s>%s</ul>', FusionCore_Plugin::attributes('fusion-carousel-holder'), $portfolio_posts); // Check if navigation should be shown $navigation = ''; if ($show_nav == 'yes') { $navigation = sprintf('<div %s><span %s></span><span %s></span></div>', FusionCore_Plugin::attributes('fusion-carousel-nav'), FusionCore_Plugin::attributes('fusion-nav-prev'), FusionCore_Plugin::attributes('fusion-nav-next')); } $html = sprintf('<div %s><div %s><div %s>%s%s</div></div></div>', FusionCore_Plugin::attributes('recentworks-shortcode'), FusionCore_Plugin::attributes('recentworks-shortcode-carousel'), FusionCore_Plugin::attributes('fusion-carousel-positioner'), $main_carousel, $navigation); // Grid layouts } else { // Reset vars $filter_wrapper = $filter = $styles = ''; // Setup the filters, if enabled $portfolio_categories = get_terms('portfolio_category'); // Check if filters should be displayed if ($portfolio_categories && $filters != 'no') { // Check if the "All" filter should be displayed if ($filters != 'yes-without-all') { $filter = sprintf('<li %s><a %s>%s</a></li>', FusionCore_Plugin::attributes('fusion-filter fusion-filter-all fusion-active'), FusionCore_Plugin::attributes('recentworks-shortcode-filter-link', array('data-filter' => '*')), __('All', 'fusion-core')); $first_filter = FALSE; } else { $first_filter = TRUE; } // Loop through categories foreach ($portfolio_categories as $portfolio_category) { // Only display filters of non excluded categories if (!in_array($portfolio_category->slug, $cats_to_exclude)) { // Check if categories have been chosen if (!empty(self::$args['cat_slug'])) { // Only display filters for explicitly included categories if (in_array($portfolio_category->slug, $cat_slugs)) { // Set the first category filter to active, if the all filter isn't shown $active_class = ''; if ($first_filter) { $active_class = ' fusion-active'; $first_filter = FALSE; } $filter .= sprintf('<li %s><a %s>%s</a></li>', FusionCore_Plugin::attributes('fusion-filter fusion-hidden' . $active_class), FusionCore_Plugin::attributes('recentworks-shortcode-filter-link', array('data-filter' => '.' . $portfolio_category->slug)), $portfolio_category->name); } // Display all categories } else { // Set the first category filter to active, if the all filter isn't shown $active_class = ''; if ($first_filter) { $active_class = ' fusion-active'; $first_filter = FALSE; } $filter .= sprintf('<li %s><a %s>%s</a></li>', FusionCore_Plugin::attributes('fusion-filter fusion-hidden' . $active_class), FusionCore_Plugin::attributes('recentworks-shortcode-filter-link', array('data-filter' => '.' . $portfolio_category->slug)), $portfolio_category->name); } } } // end foreach // Wrap filters $filter_wrapper = sprintf('<ul %s>%s</ul>', FusionCore_Plugin::attributes('fusion-filters'), $filter); } // For column spacing set needed css if ($column_spacing) { $styles = sprintf('<style type="text/css">.fusion-recent-works-%s .fusion-portfolio-wrapper .fusion-col-spacing{padding:%spx;}</style>', $this->recent_works_counter, $column_spacing / 2); } // Put it all together $html = sprintf('<div %s>%s%s<div %s>%s</div></div>', FusionCore_Plugin::attributes('recentworks-shortcode'), $filter_wrapper, $styles, FusionCore_Plugin::attributes('recentworks-shortcode-portfolio-wrapper'), $portfolio_posts); } $this->recent_works_counter++; return $html; }