View file newscard/inc/newscard-widgets.php

File size: 19.81Kb
<?php
 /**
 * Register widget area and Sidebar.
 *
 * @link https://developer.wordpress.org/themes/functionality/sidebars/#registering-a-sidebar
 *
 * @package NewsCard
 */
/****************************************************************************************/

/**
 * Function to register the widget areas(sidebar) and widgets.
 */
function newscard_widgets_init() {

	// Registering Right Sidebar
	register_sidebar( array(
		'name' 				=> __('Right Sidebar', 'newscard') ,
		'id' 				=> 'newscard_right_sidebar',
		'description' 		=> __('Shows widgets at Right Side.', 'newscard'),
		'before_widget' 	=> '<section id="%1$s" class="widget %2$s">',
		'after_widget' 		=> '</section>',
		'before_title' 		=> '<h3 class="widget-title">',
		'after_title' 		=> '</h3>',
	)	);

	// Registering Left Sidebar
	register_sidebar( array(
		'name' 				=> __('Left Sidebar', 'newscard') ,
		'id' 				=> 'newscard_left_sidebar',
		'description' 		=> __('Shows widgets at Left Side.', 'newscard'),
		'before_widget' 	=> '<section id="%1$s" class="widget %2$s">',
		'after_widget' 		=> '</section>',
		'before_title' 		=> '<h3 class="widget-title">',
		'after_title' 		=> '</h3>',
	) );

	// Registering Front Page Template Content Section
	register_sidebar(array(
		'name' 				=> __('Front Page Content Section', 'newscard') ,
		'id' 				=> 'newscard_front_page_content_section',
		'description' 		=> __('Shows widgets on Front Page Template Content Section. Suitable widget: TH: Horizontal/Vertical Posts, TH: Card/Block Posts and TH: Recent Posts', 'newscard'),
		'before_widget' 	=> '<section id="%1$s" class="widget %2$s">',
		'after_widget' 		=> '</section>',
		'before_title' 		=> '<h2 class="widget-title">',
		'after_title' 		=> '</h2>',
	));

	// Registering Front Page Template Sidebar Section
	register_sidebar(array(
		'name' 				=> __('Front Page Sidebar Section', 'newscard') ,
		'id' 				=> 'newscard_front_page_sidebar_section',
		'description' 		=> __('Shows widgets on Front Page Template Sidebar Section. Suitable widget: TH: Horizontal/Vertical Posts, TH: Card/Block Posts and TH: Recent Posts', 'newscard'),
		'before_widget' 	=> '<section id="%1$s" class="widget %2$s">',
		'after_widget' 		=> '</section>',
		'before_title' 		=> '<h2 class="widget-title">',
		'after_title' 		=> '</h2>',
	));

	// Registering Footer Sidebar 1
	register_sidebar( array(
		'name' 				=> __('Footer - Column 1', 'newscard') ,
		'id' 				=> 'newscard_footer_sidebar',
		'description' 		=> __('Shows widgets at Footer Column 1.', 'newscard'),
		'before_widget' 	=> '<section id="%1$s" class="widget %2$s">',
		'after_widget' 		=> '</section>',
		'before_title' 		=> '<h3 class="widget-title">',
		'after_title' 		=> '</h3>',
	) );

	// Registering Footer Sidebar 2
	register_sidebar( array(
		'name' 				=> __('Footer - Column 2', 'newscard'),
		'id' 				=> 'newscard_footer_column2',
		'description' 		=> __('Shows widgets at Footer Column 2.', 'newscard'),
		'before_widget' 	=> '<section id="%1$s" class="widget %2$s">',
		'after_widget' 		=> '</section>',
		'before_title' 		=> '<h3 class="widget-title">',
		'after_title' 		=> '</h3>',
	) );

	// Registering Footer Sidebar 3
	register_sidebar( array(
		'name' 				=> __('Footer - Column 3', 'newscard'),
		'id' 				=> 'newscard_footer_column3',
		'description' 		=> __('Shows widgets at Footer Column 3.', 'newscard'),
		'before_widget' 	=> '<section id="%1$s" class="widget %2$s">',
		'after_widget' 		=> '</section>',
		'before_title' 		=> '<h3 class="widget-title">',
		'after_title' 		=> '</h3>',
	) );

	// Registering Footer Sidebar 4
	register_sidebar( array(
		'name' 				=> __('Footer - Column 4', 'newscard'),
		'id' 				=> 'newscard_footer_column4',
		'description' 		=> __('Shows widgets at Footer Column 4.', 'newscard'),
		'before_widget' 	=> '<section id="%1$s" class="widget %2$s">',
		'after_widget' 		=> '</section>',
		'before_title' 		=> '<h3 class="widget-title">',
		'after_title' 		=> '</h3>',
	) );

	register_widget("newscard_horizontal_vertical_posts");
	register_widget("newscard_card_block_posts");
	register_widget("newscard_recent_posts");
}
add_action('widgets_init', 'newscard_widgets_init');

/****************************************************************************************/
/**
 * Widget for Front Page Template.
 * Construct the widget.
 * i.e. Posts.
 */
class newscard_horizontal_vertical_posts extends WP_Widget {

	function __construct() {
		$widget_ops = array(
			'classname' => 'newscard-widget-horizontal-vertical-posts',
			'description' => __('Display Horizontal/Vertical Posts', 'newscard')
		);
		parent::__construct(false, $name = __('TH: Horizontal/Vertical Posts', 'newscard') , $widget_ops);
	}

	function form($instance) {

		$instance = wp_parse_args(
			(array) $instance,
			array(
				'widget_title' => '',
				'category' => '',
				'type' => 1,
				'style' => 0,
			)
		);
		$type = ( isset($instance['type']) && is_numeric($instance['type']) ) ? (int) $instance['type'] : 1; ?>
		<p>
			<?php esc_html_e('Set featured image on the related post if you need to display image.', 'newscard'); ?>
		</p>
		<p>
			<input id="<?php echo $this->get_field_id('style'); ?>" name="<?php echo $this->get_field_name('style'); ?>" type="checkbox" value="1" <?php checked( '1', absint($instance['style']) ); ?>/>
			<label for="<?php echo $this->get_field_id('style'); ?>">
				<?php esc_html_e('Horizontal Style','newscard'); ?>
			</label>
		</p>
		<p>
			<label for="<?php echo $this->get_field_id('widget_title'); ?>">
				<?php esc_html_e('Title: ', 'newscard'); ?>
			</label>
			<input id="<?php echo $this->get_field_id('widget_title'); ?>" name="<?php echo $this->get_field_name('widget_title'); ?>" type="text" value="<?php echo esc_attr($instance['widget_title']); ?>"/>
		</p>
		<p>
			<input type="radio" id="<?php echo ($this->get_field_id('type') . '-1'); ?>" name="<?php echo ($this->get_field_name('type')); ?>" value="1" <?php checked($type == 1, true); ?>>
			<label for="<?php echo ($this->get_field_id('type') . '-1'); ?>" class="input-label"><?php esc_html_e('Latest Posts', 'newscard'); ?></label>
			<br>
			<input type="radio" id="<?php echo ($this->get_field_id( 'type') . '-2'); ?>" name="<?php echo ($this->get_field_name('type')); ?>" value="2" <?php checked($type == 2, true); ?>>
			<label for="<?php echo ($this->get_field_id('type') . '-2'); ?>" class="input-label"><?php esc_html_e('Show Posts from Category', 'newscard'); ?></label>
		</p>
		<p>
			<label for="<?php echo $this->get_field_id('category'); ?>">
				<?php esc_html_e('Choose Category:', 'newscard'); ?>
			</label>
			<?php wp_dropdown_categories(
				array(
					'show_option_none' => ' ',
					'name' => $this->get_field_name('category') ,
					'selected' => $instance['category']
				)
			); ?>
		</p>
		<?php
	}

	function update($new_instance, $old_instance) {
		$instance = $old_instance;
		$instance['category'] = absint($new_instance['category']);
		$instance['style'] = absint($new_instance['style']);
		$instance['widget_title'] = sanitize_text_field($new_instance['widget_title']);
		$instance['type'] = ( isset($new_instance['type']) && $new_instance['type'] > 0 && $new_instance['type'] < 3 ) ? (int) $new_instance['type'] : 1;
		return $instance;
	}

	function widget($args, $instance) {

		$category = isset($instance['category']) ? $instance['category'] : '';
		$style = empty($instance['style']) ? '' : $instance['style'];
		$widget_title = empty($instance['widget_title']) ? '' : $instance['widget_title'];
		$type = ( isset($instance['type']) && is_numeric($instance['type']) ) ? (int) $instance['type'] : 1;
		global $post;

		$post_type = array(
			'posts_per_page' => 5,
			'post_type' => array('post'),
			'post__not_in' => get_option('sticky_posts'),
		);
		if ( $type == 2 ) {
			$post_type['category__in'] = $category;
		}

		$get_featured_posts = new WP_Query($post_type);

		echo $args['before_widget']; ?>
		<?php if ( !empty($widget_title) ) { ?>
			<h2 class="widget-title"><?php echo esc_html($widget_title); ?></h2>
		<?php } ?>
		<div class="row gutter-parent-14<?php echo ($style == 0) ? ' post-vertical' : ' post-horizontal' ;?>">
			<div class="<?php echo ($style == 0) ? 'col-md-6 ' : 'col-12 ' ;?>first-col">
			<?php
			$i=1;
			while ($get_featured_posts->have_posts()):$get_featured_posts->the_post(); ?>
			<?php if ( $i == 1 ) { ?>
				<div class="post-boxed main-post clearfix<?php echo ($style == 1) ? ' inlined' : '' ;?>">
					<?php if ( has_post_thumbnail() ) { ?>
						<div class="post-img-wrap">
							<a href="<?php the_permalink(); ?>" class="post-img" style="background-image: url('<?php echo esc_url(get_the_post_thumbnail_url(get_the_ID(),'full')); ?>');"></a>
						</div>
					<?php } ?>
					<div class="post-content">
						<div class="entry-meta category-meta">
							<div class="cat-links"><?php the_category(' '); ?></div>
						</div><!-- .entry-meta -->
						<?php the_title( '<h3 class="entry-title"><a href="' . esc_url( get_permalink() ) . '">', '</a></h3>' ); ?>
						<div class="entry-meta">
							<?php newscard_posted_on(); ?>
						</div>
						<div class="entry-content">
							<?php the_excerpt(); ?>
						</div><!-- .entry-content -->
					</div>
				</div><!-- post-boxed -->
			</div>
			<div class="<?php echo ($style == 0) ? 'col-md-6 ' : 'col-12 ' ;?>second-col">
				<?php if ( $style == 1 ) { ?>
					<div class="row">
				<?php }
				} else {
					if ( $style == 1 ) { ?>
						<div class="col-md-6 post-col">
					<?php } ?>
					<div class="post-boxed inlined clearfix">
						<?php if ( has_post_thumbnail() ) { ?>
							<div class="post-img-wrap">
								<a href="<?php the_permalink(); ?>" class="post-img" style="background-image: url('<?php echo esc_url(get_the_post_thumbnail_url(get_the_ID(),'full')); ?>');"></a>
							</div>
						<?php } ?>
						<div class="post-content">
							<div class="entry-meta category-meta">
								<div class="cat-links"><?php the_category(' '); ?></div>
							</div><!-- .entry-meta -->
							<?php the_title( '<h3 class="entry-title"><a href="' . esc_url( get_permalink() ) . '">', '</a></h3>' ); ?>
							<div class="entry-meta">
								<?php newscard_posted_on(); ?>
							</div>
						</div>
					</div><!-- .post-boxed -->
					<?php if ( $style == 1 ) { ?>
						</div><!-- .col-md-6 .post-col -->
					<?php }
				}
				$i++;
				endwhile;
				// Reset Post Data
				wp_reset_postdata(); ?>
				<?php if ( $style == 1 ) { ?>
					</div><!-- .row -->
				<?php } ?>
			</div>
		</div><!-- .row gutter-parent-14 -->

		<?php echo $args['after_widget'] . '<!-- .widget_featured_post -->';
	}
}

/****************************************************************************************/
/**
 * Widget for Front Page Template.
 * Construct the widget.
 * i.e. Posts.
 */
class newscard_card_block_posts extends WP_Widget {

	function __construct() {
		$widget_ops = array(
			'classname' => 'newscard-widget-card-block-posts',
			'description' => __('Display Card/Block Posts', 'newscard')
		);
		parent::__construct(false, $name = __('TH: Card/Block Posts', 'newscard') , $widget_ops);
	}

	function form($instance) {

		$instance = wp_parse_args(
			(array) $instance,
			array(
				'widget_title' => '',
				'category' => '',
				'type' => 1,
				'style' => 0,
			)
		);
		$type = ( isset($instance['type']) && is_numeric($instance['type']) ) ? (int) $instance['type'] : 1; ?>
		<p>
			<?php esc_html_e('Set featured image on the related post if you need to display Image.', 'newscard'); ?>
		</p>
		<p>
			<input id="<?php echo $this->get_field_id('style'); ?>" name="<?php echo $this->get_field_name('style'); ?>" type="checkbox" value="1" <?php checked( '1', absint($instance['style']) ); ?>/>
			<label for="<?php echo $this->get_field_id('style'); ?>">
				<?php esc_html_e('Block Style','newscard'); ?>
			</label>
		</p>
		<p>
			<label for="<?php echo $this->get_field_id('widget_title'); ?>">
				<?php esc_html_e('Title: ', 'newscard'); ?>
			</label>
			<input id="<?php echo $this->get_field_id('widget_title'); ?>" name="<?php echo $this->get_field_name('widget_title'); ?>" type="text" value="<?php echo esc_attr($instance['widget_title']); ?>"/>
		</p>
		<p>
			<input type="radio" id="<?php echo ($this->get_field_id('type') . '-1'); ?>" name="<?php echo ($this->get_field_name('type')); ?>" value="1" <?php checked($type == 1, true); ?>>
			<label for="<?php echo ($this->get_field_id('type') . '-1'); ?>" class="input-label"><?php esc_html_e('Latest Posts', 'newscard'); ?></label>
			<br>
			<input type="radio" id="<?php echo ($this->get_field_id( 'type') . '-2'); ?>" name="<?php echo ($this->get_field_name('type')); ?>" value="2" <?php checked($type == 2, true); ?>>
			<label for="<?php echo ($this->get_field_id('type') . '-2'); ?>" class="input-label"><?php esc_html_e('Show Posts from Category', 'newscard'); ?></label>
		</p>
		<p>
			<label for="<?php echo $this->get_field_id('category'); ?>">
				<?php esc_html_e('Choose Category:', 'newscard'); ?>
			</label>
			<?php wp_dropdown_categories(
				array(
					'show_option_none' => ' ',
					'name' => $this->get_field_name('category') ,
					'selected' => $instance['category']
				)
			); ?>
		</p>
		<?php
	}

	function update($new_instance, $old_instance) {
		$instance = $old_instance;
		$instance['category'] = absint($new_instance['category']);
		$instance['style'] = absint($new_instance['style']);
		$instance['widget_title'] = sanitize_text_field($new_instance['widget_title']);
		$instance['type'] = ( isset($new_instance['type']) && $new_instance['type'] > 0 && $new_instance['type'] < 3 ) ? (int) $new_instance['type'] : 1;
		return $instance;
	}

	function widget($args, $instance) {

		$category = isset($instance['category']) ? $instance['category'] : '';
		$style = empty($instance['style']) ? '' : $instance['style'];
		$widget_title = empty($instance['widget_title']) ? '' : $instance['widget_title'];
		$type = ( isset($instance['type']) && is_numeric($instance['type']) ) ? (int) $instance['type'] : 1;
		global $post;

		$post_type = array(
			'posts_per_page' => 2,
			'post_type' => array('post'),
			'post__not_in' => get_option('sticky_posts'),
		);
		if ( $type == 2 ) {
			$post_type['category__in'] = $category;
		}

		$get_featured_posts = new WP_Query($post_type);

		echo $args['before_widget']; ?>
			<?php if ( !empty($widget_title) ) { ?>
				<h2 class="widget-title"><?php echo esc_html($widget_title); ?></h2>
			<?php } ?>
			<div class="row gutter-parent-14">
				<?php while ($get_featured_posts->have_posts()):$get_featured_posts->the_post(); ?>
					<div class="col-sm-6 post-col">
						<div class="post-item<?php echo ($style == 0) ? ' post-boxed' : ' post-block' ;?>">
							<?php if ( has_post_thumbnail() && $style == 0 ) { ?>
								<div class="post-img-wrap">
									<a href="<?php the_permalink(); ?>" class="post-img" style="background-image: url('<?php echo esc_url(get_the_post_thumbnail_url(get_the_ID(),'full')); ?>');"></a>
									<div class="entry-meta category-meta">
										<div class="cat-links"><?php the_category(' '); ?></div>
									</div><!-- .entry-meta -->
								</div><!-- .post-img-wrap -->
							<?php }
							if ( $style == 0 ) { ?>
								<div class="post-content">
									<?php if ( !has_post_thumbnail() ) { ?>
										<div class="entry-meta category-meta">
											<div class="cat-links"><?php the_category(' '); ?></div>
										</div><!-- .entry-meta -->
									<?php } ?>
									<?php the_title( '<h3 class="entry-title"><a href="' . esc_url( get_permalink() ) . '">', '</a></h3>' ); ?>
									<div class="entry-meta">
										<?php newscard_posted_on(); ?>
									</div>
									<div class="entry-content">
										<?php the_excerpt(); ?>
									</div><!-- .entry-content -->
								</div><!-- .post-content -->
							<?php } else { ?>
								<div class="post-img-wrap">
									<a href="<?php the_permalink(); ?>" class="post-img" style="background-image: url('<?php echo esc_url(get_the_post_thumbnail_url(get_the_ID(),'full')); ?>');"></a>
								</div><!-- .post-img-wrap -->
								<div class="entry-header">
									<div class="entry-meta category-meta">
										<div class="cat-links"><?php the_category(' '); ?></div>
									</div><!-- .entry-meta -->
									<?php the_title( '<h3 class="entry-title"><a href="' . esc_url( get_permalink() ) . '">', '</a></h3>' ); ?>
									<div class="entry-meta">
										<?php newscard_posted_on(); ?>
									</div>
								</div><!-- .entry-header -->
							<?php } ?>
						</div><!-- .post-item -->
					</div><!-- .col-sm-6 .post-col -->
				<?php endwhile;
				// Reset Post Data
				wp_reset_postdata(); ?>
			</div><!-- .row gutter-parent-14 -->

		<?php echo $args['after_widget'] . '<!-- .widget_featured_post -->';
	}
}

/****************************************************************************************/
/**
 * Widget for Any Sidebars.
 * Construct the widget.
 * i.e. Name and posts.
 */
class newscard_recent_posts extends WP_Widget {
	function __construct() {
		$widget_ops = array(
			'classname' => 'newscard-widget-recent-posts',
			'description' => __('Display Recent Posts', 'newscard')
		);
		parent::__construct(false, $name = __('TH: Recent Posts', 'newscard') , $widget_ops);
	}
	function form($instance) {
		$instance = wp_parse_args(
			(array) $instance,
			array(
				'number' => '4',
				'widget_title' => '',
			)
		); ?>
		<p>
			<?php esc_html_e('Set featured image on the related post if you need to display Image.', 'newscard'); ?>
		</p>
		<p>
			<label for="<?php echo $this->get_field_id('widget_title'); ?>">
				<?php esc_html_e('Title:', 'newscard'); ?>
			</label>
			<input id="<?php echo $this->get_field_id('widget_title'); ?>" name="<?php echo $this->get_field_name('widget_title'); ?>" type="text" value="<?php echo esc_attr($instance['widget_title']); ?>"/>
		</p>
		<p>
			<label for="<?php echo $this->get_field_id('number'); ?>">
			<?php esc_html_e( 'Number of Post:', 'newscard' ); ?>
			</label>
			<input id="<?php echo $this->get_field_id('number'); ?>" name="<?php echo $this->get_field_name('number'); ?>" type="text" value="<?php echo absint($instance[ 'number']); ?>" size="3"/>
		</p>
		<?php
	}

	function update($new_instance, $old_instance) {
		$instance = $old_instance;
		$instance['number'] = absint( $new_instance['number'] );
		$instance['widget_title'] = sanitize_text_field($new_instance['widget_title']);
		return $instance;
	}

	function widget($args, $instance) {

		$widget_title = empty($instance['widget_title']) ? '' : $instance['widget_title'];
		$number = empty($instance['number']) ? 4 : $instance['number'];
		global $post;

		$get_featured_posts = new WP_Query(
			array(
				'posts_per_page' => $number,
				'post_type' => array('post'),
				'post__not_in' => get_option('sticky_posts'),
			)
		);

		echo $args['before_widget']; ?>

			<?php if (!empty($widget_title)){ ?>
				<h2 class="widget-title"><?php echo esc_html($widget_title);?></h2>
			<?php } ?>
			<div class="row gutter-parent-14">
				<?php if ($number > 0) {
					$i = 0;
					while ($get_featured_posts->have_posts()):$get_featured_posts->the_post(); ?>
						<div class="col-md-6 post-col">
							<div class="post-boxed inlined clearfix">
								<?php if ( has_post_thumbnail() ) { ?>
									<div class="post-img-wrap">
										<a href="<?php the_permalink(); ?>" class="post-img" style="background-image: url('<?php echo esc_url(get_the_post_thumbnail_url(get_the_ID(),'full')); ?>');"></a>
									</div>
								<?php } ?>
								<div class="post-content">
									<div class="entry-meta category-meta">
										<div class="cat-links"><?php the_category(' '); ?></div>
									</div><!-- .entry-meta -->
									<?php the_title( '<h3 class="entry-title"><a href="' . esc_url( get_permalink() ) . '">', '</a></h3>' ); ?>
									<div class="entry-meta">
										<?php newscard_posted_on(); ?>
									</div>
								</div>
							</div><!-- post-boxed -->
						</div><!-- col-md-6 -->
						<?php $i++;
					endwhile;
					// Reset Post Data
					wp_reset_postdata();
				} ?>
			</div><!-- .row .gutter-parent-14-->

		<?php echo $args['after_widget'] . '<!-- .widget_recent_post -->';
	}
}