Skip to content

Instantly share code, notes, and snippets.

@TanvirAmi
Created March 4, 2018 02:25
Show Gist options
  • Save TanvirAmi/7186b875edb154f5c16c6cf939601ad0 to your computer and use it in GitHub Desktop.
Save TanvirAmi/7186b875edb154f5c16c6cf939601ad0 to your computer and use it in GitHub Desktop.
<?php
/**
* Random Posts with Thumbnail widget.
*
* @package SiteBox
* @author Theme Junkie
* @copyright Copyright (c) 2015, Theme Junkie
* @license http://www.gnu.org/licenses/gpl-2.0.html
* @since 1.0.0
*/
class SiteBox_Random_Widget extends WP_Widget {
/**
* Sets up the widgets.
*
* @since 1.0.0
*/
function __construct() {
// Set up the widget options.
$widget_options = array(
'classname' => 'widget-sitebox-random widget_posts_thumbnail',
'description' => esc_html__( 'Display random posts with thumbnails.', 'sitebox' )
);
// Create the widget.
parent::__construct(
'sitebox-random', // $this->id_base
esc_html__( '&raquo; Random Posts Thumbnails', 'sitebox' ), // $this->name
$widget_options // $this->widget_options
);
}
/**
* Outputs the widget based on the arguments input through the widget controls.
*
* @since 1.0.0
*/
function widget( $args, $instance ) {
extract( $args );
// Output the theme's $before_widget wrapper.
echo $before_widget;
// If the title not empty, display it.
if ( $instance['title'] ) {
echo $before_title . apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ) . $after_title;
}
// Posts query arguments.
$args = array(
'post_type' => 'post',
'posts_per_page' => $instance['limit'],
'orderby' => 'rand'
);
// The post query
$random = new WP_Query( $args );
global $post;
if ( $random->have_posts() ) {
echo '<ul>';
$x = 1;
while ( $random->have_posts() ) :
$random->the_post();
?>
<div class="post-count-text">
<span><?php echo $x; ?></span>
</div>
<?php
echo '<li>';
echo '<a href="' . esc_url( get_permalink() ) . '" rel="bookmark">' . get_the_post_thumbnail( get_the_ID(), 'thumbnail', array( 'class' => 'entry-thumbnail', 'alt' => esc_attr( get_the_title() ) ) ) . '</a>';
echo '<a href="' . esc_url( get_permalink() ) . '" rel="bookmark">' . esc_attr( get_the_title() ) . '</a>';
if ( $instance['show_date'] ) :
echo '<time class="entry-date" datetime="' . esc_html( get_the_date( 'c' ) ) . '">' . esc_html( get_the_date() ) . '</time>';
endif;
echo '</li>';
$x++;
endwhile;
echo '</ul>';
}
// Reset the query.
wp_reset_postdata();
// Close the theme's widget wrapper.
echo $after_widget;
}
/**
* Updates the widget control options for the particular instance of the widget.
*
* @since 1.0.0
*/
function update( $new_instance, $old_instance ) {
$instance = $new_instance;
$instance['title'] = strip_tags( $new_instance['title'] );
$instance['limit'] = (int) $new_instance['limit'];
$instance['show_date'] = isset( $new_instance['show_date'] ) ? (bool) $new_instance['show_date'] : false;
return $instance;
}
/**
* Displays the widget control options in the Widgets admin screen.
*
* @since 1.0.0
*/
function form( $instance ) {
// Default value.
$defaults = array(
'title' => esc_html__( 'Random Posts', 'sitebox' ),
'limit' => 5,
'show_date' => false
);
$instance = wp_parse_args( (array) $instance, $defaults );
?>
<p>
<label for="<?php echo $this->get_field_id( 'title' ); ?>">
<?php esc_html_e( 'Title', 'sitebox' ); ?>
</label>
<input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo esc_attr( $instance['title'] ); ?>" />
</p>
<p>
<label for="<?php echo $this->get_field_id( 'limit' ); ?>">
<?php esc_html_e( 'Number of posts to show', 'sitebox' ); ?>
</label>
<input class="small-text" id="<?php echo $this->get_field_id( 'limit' ); ?>" name="<?php echo $this->get_field_name( 'limit' ); ?>" type="number" step="1" min="0" value="<?php echo (int)( $instance['limit'] ); ?>" />
</p>
<p>
<input class="checkbox" type="checkbox" <?php checked( $instance['show_date'] ); ?> id="<?php echo $this->get_field_id( 'show_date' ); ?>" name="<?php echo $this->get_field_name( 'show_date' ); ?>" />
<label for="<?php echo $this->get_field_id( 'show_date' ); ?>">
<?php esc_html_e( 'Display post date?', 'sitebox' ); ?>
</label>
</p>
<?php
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment