/** * 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' => '', 'cat_slug' => '', 'columns' => 3, 'exclude_cats' => '', 'excerpt_length' => '', 'excerpt_words' => '15', 'filters' => 'yes', 'layout' => 'carousel', 'number_posts' => 8, 'animation_direction' => 'left', 'animation_speed' => '', 'animation_type' => '', 'picture_size' => 'fixed'), $args); $defaults['filters'] == 'yes' || $defaults['filters'] == 'true' ? $defaults['filters'] = true : ($defaults['filters'] = false); extract($defaults); self::$args = $defaults; // set the image size for the slideshow $this->set_image_size(); if ($excerpt_length || $excerpt_length === '0') { $excerpt_words = $excerpt_length; } $args = array('post_type' => 'avada_portfolio', 'paged' => 1, 'posts_per_page' => $number_posts, 'has_password' => false); if (self::$args['exclude_cats']) { $cats_to_exclude = explode(',', self::$args['exclude_cats']); } else { $cats_to_exclude = ''; } if (self::$args['cat_slug']) { $cat_slugs = explode(',', self::$args['cat_slug']); } else { $cat_slugs = ''; } if (isset($cats_to_exclude) && $cats_to_exclude) { $args['tax_query'] = array(array('taxonomy' => 'portfolio_category', 'field' => 'slug', 'terms' => $cats_to_exclude, 'operator' => 'NOT IN')); if ($cat_slugs) { $args['tax_query']['relation'] = 'AND'; $args['tax_query'][] = array('taxonomy' => 'portfolio_category', 'field' => 'slug', 'terms' => $cat_slugs, 'operator' => 'IN'); } } else { if ($cat_slugs) { $args['tax_query'] = array(array('taxonomy' => 'portfolio_category', 'field' => 'slug', 'terms' => $cat_slugs)); } } wp_reset_query(); $recent_works = new WP_Query($args); $works = ''; while ($recent_works->have_posts()) { $recent_works->the_post(); $item_classes = $terms = $image_wrapper = $item_content = $buttons = $url = ''; // set classes, link and target for the image extras content $this->set_image_extras(get_the_ID()); if ($layout == 'carousel') { if (has_post_thumbnail()) { if ($smof_data['image_rollover']) { $image = get_the_post_thumbnail(get_the_ID(), $this->image_size); $image .= $this->get_image_extras(get_the_ID()); } else { $image = sprintf('<a href="%s">%s</a>', get_permalink(get_the_ID()), get_the_post_thumbnail(get_the_ID(), $this->image_size)); } $works .= sprintf('<li><div %s>%s</div></li>', FusionCore_Plugin::attributes('recentworks-shortcode-img-div'), $image); } } else { if (has_post_thumbnail() || get_post_meta(get_the_ID(), 'pyre_video', true)) { $item_cats = get_the_terms(get_the_ID(), 'portfolio_category'); if ($item_cats) { foreach ($item_cats as $item_cat) { $item_classes .= $item_cat->slug . ' '; } } $permalink = get_permalink(); if (has_post_thumbnail()) { $thumbnail = wp_get_attachment_image_src(get_post_thumbnail_id(get_the_ID()), $this->image_size); $src = $thumbnail[0]; $alt = get_post_field('post_excerpt', get_post_thumbnail_id(get_the_ID())); if ($smof_data['image_rollover']) { $image = sprintf('<img %s />', FusionCore_Plugin::attributes('recentworks-shortcode-img', array('src' => $src, 'alt' => $alt))); $image .= $this->get_image_extras(get_the_ID()); } else { $image = sprintf('<a href="%s"><img %s /></a>', $permalink, FusionCore_Plugin::attributes('recentworks-shortcode-img', array('src' => $src, 'alt' => $alt))); } $image_wrapper = sprintf('<div %s>%s</div>', FusionCore_Plugin::attributes('recentworks-shortcode-img-div'), $image); } if ($layout == 'grid-with-excerpts') { $stripped_content = strip_shortcodes(tf_content($excerpt_words, $smof_data['strip_html_excerpt'])); if ($columns == 1) { if (get_post_meta(get_the_ID(), 'pyre_project_url', true)) { $url = sprintf('<a href="%s" %s>%s</a>', get_post_meta(get_the_ID(), 'pyre_project_url', true), FusionCore_Plugin::attributes('fusion-button medium default'), __('View Project', 'Avada')); } $buttons = sprintf('<div %s><a href="%s" %s>%s</a>%s</div>', FusionCore_Plugin::attributes('buttons'), $permalink, FusionCore_Plugin::attributes('fusion-button medium default'), __('Learn More', 'Avada'), $url); } $item_content = sprintf('<div %s><h2><a href="%s">%s</a></h2><h4>%s</h4>%s</div>', FusionCore_Plugin::attributes('portfolio-content'), $permalink, get_the_title(), get_the_term_list(get_the_ID(), 'portfolio_category', '', ', ', ''), $stripped_content); } $works .= sprintf('<div %s>%s%s</div>', FusionCore_Plugin::attributes('portfolio-item ' . $item_classes), $image_wrapper, $item_content); } } } wp_reset_query(); if ($layout == 'carousel') { $html = sprintf('<div %s><div %s><div %s><ul>%s</ul></div><div %s><span %s></span><span %s></span></div></div></div>', FusionCore_Plugin::attributes('recentworks-shortcode'), FusionCore_Plugin::attributes('es-carousel-wrapper fusion-carousel-large'), FusionCore_Plugin::attributes('es-carousel'), $works, FusionCore_Plugin::attributes('es-nav'), FusionCore_Plugin::attributes('es-nav-prev'), FusionCore_Plugin::attributes('es-nav-next')); } else { $portfolio_category = get_terms('portfolio_category'); $filter = ''; $filter_wrapper = ''; if ($portfolio_category && $filters == true) { $filter = sprintf('<li %s><a %s>%s</a></li>', FusionCore_Plugin::attributes('active'), FusionCore_Plugin::attributes('recentworks-shortcode-filter-link', array('data-filter' => '*')), __('All', 'Avada')); foreach ($portfolio_category as $portfolio_cat) { if (isset(self::$args['cat_slug']) && self::$args['cat_slug']) { $cat_slug = preg_replace('/\\s+/', '', self::$args['cat_slug']); $cat_slug = explode(',', $cat_slug); if (in_array($portfolio_cat->slug, $cat_slug)) { $filter .= sprintf('<li><a %s>%s</a></li>', FusionCore_Plugin::attributes('recentworks-shortcode-filter-link', array('data-filter' => '.' . $portfolio_cat->slug)), $portfolio_cat->name); } } else { $filter .= sprintf('<li><a %s>%s</a></li>', FusionCore_Plugin::attributes('recentworks-shortcode-filter-link', array('data-filter' => '.' . $portfolio_cat->slug)), $portfolio_cat->name); } } $filter_wrapper = sprintf('<ul %s>%s</ul>', FusionCore_Plugin::attributes('portfolio-tabs'), $filter); } $html = sprintf('<div %s>%s<div %s>%s</div></div>', FusionCore_Plugin::attributes('recentworks-shortcode'), $filter_wrapper, FusionCore_Plugin::attributes('portfolio-wrapper'), $works); } $this->recent_works_counter++; return $html; }
/** * 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' => ''), $args); if ($defaults['column_spacing'] === '0') { $defaults['column_spacing'] = '0.0'; } if ($defaults['strip_html'] == 'yes') { $defaults['strip_html'] = TRUE; } 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 = ''; // 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())) { $video_max_width = '540px'; $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, '', $this->recent_works_counter); } $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())) { $video_max_width = '540px'; $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', '', $this->recent_works_counter); } // 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; }