<?php /** * Class Shapely_Related_Posts * * This file does the social sharing handling for the Muscle Core Lite Framework * * @author Colorlib * @copyright (c) Copyright by Colrolib * @link https://www.colorlib.com * @package Shapely */ if ( ! function_exists( 'shapely_call_related_posts_class' ) ) { /** * * Gets called only if the "display related posts" option is checked * in the back-end * * @since 1.0.0 * */ function shapely_call_related_posts_class() { $display_related_blog_posts = get_theme_mod( 'related_posts_area', true ); if ( $display_related_blog_posts ) { // instantiate the class & load everything else Shapely_Related_Posts::get_instance(); } } add_action( 'wp_loaded', 'shapely_call_related_posts_class' ); } if ( ! class_exists( 'Shapely_Related_Posts' ) ) { /** * Class Shapely_Related_Posts */ class Shapely_Related_Posts { /** * @var Singleton The reference to *Singleton* instance of this class */ private static $instance; /** * Constructor */ protected function __construct() { $related_posts = get_theme_mod( 'related_posts_area', true ); if ( $related_posts ) { add_action( 'shapely_single_after_article', array( $this, 'output_related_posts' ), 2 ); } } /** * Returns the *Singleton* instance of this class. * * @return Singleton The *Singleton* instance. */ public static function get_instance() { if ( null === static::$instance ) { static::$instance = new static(); } return static::$instance; } /** * Private clone method to prevent cloning of the instance of the * *Singleton* instance. * * @return void */ private function __clone() { } /** * Private unserialize method to prevent unserializing of the *Singleton* * instance. * * @return void */ private function __wakeup() { } /** * Get related posts by category * * @param integer $post_id current post id * @param integer $number_posts number of posts to fetch * * @return object object with posts info */ public function get_related_posts( $post_id, $number_posts = - 1 ) { $related_postquery = new WP_Query(); $args = ''; if ( 0 == $number_posts ) { return $related_postquery; } $args = wp_parse_args( $args, array( 'category__in' => wp_get_post_categories( $post_id ), 'ignore_sticky_posts' => 0, 'posts_per_page' => $number_posts, 'post__not_in' => array( $post_id ), ) ); if ( is_singular( 'jetpack-portfolio' ) ) { unset( $args['category__in'] ); $args['post_type'] = 'jetpack-portfolio'; $terms_args = array( 'fields' => 'ids', ); $types = wp_get_object_terms( get_the_ID(), 'jetpack-portfolio-type', $terms_args ); $tags = wp_get_object_terms( get_the_ID(), 'jetpack-portfolio-tag', $terms_args ); $tax_query = array(); if ( ! empty( $types ) ) { array_push( $tax_query, array( 'taxonomy' => 'jetpack-portfolio-type', 'field' => 'term_id', 'terms' => $types, ) ); } if ( ! empty( $tags ) ) { array_push( $tax_query, array( 'taxonomy' => 'jetpack-portfolio-tag', 'field' => 'term_id', 'terms' => $tags, ) ); } if ( ! empty( $tax_query ) ) { $args['tax_query'] = $tax_query; } } $related_postquery = new WP_Query( $args ); // reset post query wp_reset_postdata(); return $related_postquery; } /** * Render related posts carousel * * @return string HTML markup to display related posts **/ function output_related_posts() { if ( is_singular( 'jetpack-portfolio' ) ) { if ( ! get_theme_mod( 'related_projects_area', true ) ) { return; } } // Check if related posts should be shown $related_posts = $this->get_related_posts( get_the_ID(), get_option( 'posts_per_page' ) ); if ( 0 == $related_posts->post_count ) { return false; } echo '<div class="shapely-related-posts">'; // Number of posts to show / view $limit = get_theme_mod( 'shapely_howmany_blog_posts', 3 ); $show_title = get_theme_mod( 'shapely_enable_related_title_blog_posts', true ); $show_date = get_theme_mod( 'shapely_enable_related_date_blog_posts', false ); $auto_play = get_theme_mod( 'shapely_autoplay_blog_posts', true ); echo '<div class="row">'; /* * Heading */ echo '<div class="col-lg-11 col-sm-10 col-xs-12 shapely-related-posts-title">'; if ( is_singular( 'jetpack-portfolio' ) ) { echo '<h3><span>' . esc_html__( 'Related projects', 'shapely' ) . '</span></h3>'; } else { echo '<h3><span>' . esc_html__( 'Related articles ', 'shapely' ) . '</span></h3>'; } echo '</div>'; echo '</div><!--/.row-->'; /* * Arrows */ echo '<div class="shapely-carousel-navigation hidden-xs">'; echo '<ul class="shapely-carousel-arrows clearfix">'; echo '<li><a href="#" class="shapely-owl-prev fa fa-angle-left"></a></li>'; echo '<li><a href="#" class="shapely-owl-next fa fa-angle-right"></a></li>'; echo '</ul>'; echo '</div>'; echo sprintf( '<div class="owlCarousel owl-carousel owl-theme" data-slider-id="%s" id="owlCarousel-%s" data-slider-items="%s" data-slider-speed="400" data-slider-auto-play="%s" data-slider-navigation="false">', get_the_ID(), get_the_ID(), absint( $limit ), esc_html( $auto_play ) ); // Loop through related posts while ( $related_posts->have_posts() ) { $related_posts->the_post(); echo '<div class="item">'; if ( has_post_thumbnail( $related_posts->post->ID ) ) { echo '<a href="' . esc_url( get_the_permalink() ) . '" class="related-item-thumbnail" style="background-image: url( ' . esc_url( get_the_post_thumbnail_url( $related_posts->post->ID, 'shapely-grid' ) ) . ' )">' . get_the_post_thumbnail( $related_posts->post->ID, 'shapely-grid' ) . '</a>'; } else { echo '<a href="' . esc_url( get_the_permalink() ) . '" class="related-item-thumbnail" style="background-image: url( ' . esc_url( get_template_directory_uri() ) . '/assets/images/placeholder.jpg )"><img class="wp-post-image" alt="" src="' . esc_url( get_template_directory_uri() ) . '/assets/images/placeholder.jpg" /></a>'; } if ( $show_title ) { echo '<div class="shapely-related-post-title">'; # Post Title echo '<a href="' . esc_url( get_the_permalink() ) . '">' . esc_html( wp_trim_words( get_the_title(), 5 ) ) . '</a>'; echo '</div>'; } if ( $show_date ) { echo '<div class="shapely-related-posts-date">'; #Post Date echo esc_html( get_the_date() ); echo '</div>'; } echo '</div><!--/.item-->'; } echo '</div><!--/.owlCarousel-->'; echo '</div><!--/.mt-related-posts-->'; wp_reset_postdata(); } } }// End if().