2013-08-22 14:06:09 -04:00
< ? php
/**
2013-10-11 18:02:11 -04:00
* Custom Widget for displaying specific post formats
2013-08-22 14:06:09 -04:00
*
2013-11-05 16:52:09 -05:00
* Displays posts from Aside , Quote , Video , Audio , Image , Gallery , and Link formats .
2013-10-11 18:02:11 -04:00
*
* @ link http :// codex . wordpress . org / Widgets_API #Developing_Widgets
2013-08-22 14:06:09 -04:00
*
* @ package WordPress
* @ subpackage Twenty_Fourteen
2013-10-11 18:02:11 -04:00
* @ since Twenty Fourteen 1.0
2013-08-22 14:06:09 -04:00
*/
class Twenty_Fourteen_Ephemera_Widget extends WP_Widget {
/**
* The supported post formats .
*
2013-10-11 18:02:11 -04:00
* @ since Twenty Fourteen 1.0
*
2013-08-22 14:06:09 -04:00
* @ var array
*/
2013-11-05 16:52:09 -05:00
private $formats = array ( 'aside' , 'image' , 'video' , 'audio' , 'quote' , 'link' , 'gallery' );
2013-08-22 14:06:09 -04:00
/**
* Pluralized post format strings .
*
2013-10-11 18:02:11 -04:00
* @ since Twenty Fourteen 1.0
*
2013-08-22 14:06:09 -04:00
* @ var array
*/
private $format_strings ;
/**
* Constructor .
*
2013-10-11 18:02:11 -04:00
* @ since Twenty Fourteen 1.0
*
2013-08-22 14:06:09 -04:00
* @ return Twenty_Fourteen_Ephemera_Widget
*/
public function __construct () {
parent :: __construct ( 'widget_twentyfourteen_ephemera' , __ ( 'Twenty Fourteen Ephemera' , 'twentyfourteen' ), array (
'classname' => 'widget_twentyfourteen_ephemera' ,
2013-11-05 16:52:09 -05:00
'description' => __ ( 'Use this widget to list your recent Aside, Quote, Video, Audio, Image, Gallery, and Link posts' , 'twentyfourteen' ),
2013-08-22 14:06:09 -04:00
) );
2013-10-11 18:02:11 -04:00
/*
2013-11-05 16:52:09 -05:00
* @ todo http :// core . trac . wordpress . org / ticket / 23257 : Add plural versions of Post Format strings
2013-08-22 14:06:09 -04:00
*/
$this -> format_strings = array (
'aside' => __ ( 'Asides' , 'twentyfourteen' ),
'image' => __ ( 'Images' , 'twentyfourteen' ),
'video' => __ ( 'Videos' , 'twentyfourteen' ),
2013-11-05 16:52:09 -05:00
'audio' => __ ( 'Audio' , 'twentyfourteen' ),
2013-08-22 14:06:09 -04:00
'quote' => __ ( 'Quotes' , 'twentyfourteen' ),
'link' => __ ( 'Links' , 'twentyfourteen' ),
'gallery' => __ ( 'Galleries' , 'twentyfourteen' ),
);
add_action ( 'save_post' , array ( $this , 'flush_widget_cache' ) );
add_action ( 'deleted_post' , array ( $this , 'flush_widget_cache' ) );
add_action ( 'switch_theme' , array ( $this , 'flush_widget_cache' ) );
}
/**
2013-10-11 18:02:11 -04:00
* Output the HTML for this widget .
*
* @ since Twenty Fourteen 1.0
2013-08-22 14:06:09 -04:00
*
* @ param array $args An array of standard parameters for widgets in this theme .
* @ param array $instance An array of settings for this widget instance .
* @ return void Echoes its output .
*/
public function widget ( $args , $instance ) {
// If called directly, assign an unique index for caching.
if ( - 1 == $this -> number ) {
static $num = - 1 ;
$this -> _set ( -- $num );
}
$content = get_transient ( $this -> id );
if ( false !== $content ) {
echo $content ;
return ;
}
ob_start ();
extract ( $args , EXTR_SKIP );
$format = $instance [ 'format' ];
$number = empty ( $instance [ 'number' ] ) ? 2 : absint ( $instance [ 'number' ] );
$title = apply_filters ( 'widget_title' , empty ( $instance [ 'title' ] ) ? $this -> format_strings [ $format ] : $instance [ 'title' ], $instance , $this -> id_base );
$ephemera = new WP_Query ( array (
'order' => 'DESC' ,
'posts_per_page' => $number ,
'no_found_rows' => true ,
'post_status' => 'publish' ,
'post__not_in' => get_option ( 'sticky_posts' ),
'tax_query' => array (
array (
'taxonomy' => 'post_format' ,
'terms' => array ( " post-format- $format " ),
'field' => 'slug' ,
'operator' => 'IN' ,
),
),
) );
if ( $ephemera -> have_posts () ) :
$tmp_content_width = $GLOBALS [ 'content_width' ];
$GLOBALS [ 'content_width' ] = 306 ;
echo $before_widget ;
?>
2013-09-19 14:05:12 -04:00
< h1 class = " widget-title <?php echo esc_attr( $format ); ?> " >
2013-08-22 14:06:09 -04:00
< a class = " entry-format " href = " <?php echo esc_url( get_post_format_link( $format ) ); ?> " >< ? php echo $title ; ?> </a>
</ h1 >
< ol >
< ? php while ( $ephemera -> have_posts () ) : $ephemera -> the_post (); ?>
< li >
2013-10-30 10:39:10 -04:00
< article < ? php post_class (); ?> >
2013-08-22 14:06:09 -04:00
< div class = " entry-content " >
< ? php
if ( has_post_format ( 'gallery' ) ) :
2013-10-30 10:39:10 -04:00
if ( post_password_required () ) :
the_content ( __ ( 'Continue reading <span class="meta-nav">→</span>' , 'twentyfourteen' ) );
else :
$images = array ();
2013-11-15 16:15:10 -05:00
$galleries = get_post_galleries ( get_the_ID (), false );
if ( isset ( $galleries [ 0 ][ 'ids' ] ) )
$images = explode ( ',' , $galleries [ 0 ][ 'ids' ] );
2013-10-30 10:39:10 -04:00
if ( ! $images ) :
$images = get_posts ( array (
'fields' => 'ids' ,
2013-11-15 16:15:10 -05:00
'numberposts' => - 1 ,
2013-10-30 10:39:10 -04:00
'order' => 'ASC' ,
'orderby' => 'menu_order' ,
'post_mime_type' => 'image' ,
'post_parent' => get_the_ID (),
'post_type' => 'attachment' ,
) );
endif ;
$total_images = count ( $images );
if ( has_post_thumbnail () ) :
2013-11-13 23:50:11 -05:00
$post_thumbnail = get_the_post_thumbnail ();
2013-10-30 10:39:10 -04:00
elseif ( $total_images > 0 ) :
$image = array_shift ( $images );
$post_thumbnail = wp_get_attachment_image ( $image , 'post-thumbnail' );
endif ;
if ( ! empty ( $post_thumbnail ) ) :
2013-08-22 14:06:09 -04:00
?>
2013-11-15 16:15:10 -05:00
< a href = " <?php the_permalink(); ?> " >< ? php echo $post_thumbnail ; ?> </a>
< ? php endif ; ?>
< p class = " wp-caption-text " >
2013-08-22 14:06:09 -04:00
< ? php
2013-11-15 16:15:10 -05:00
printf ( _n ( 'This gallery contains <a href="%1$s" rel="bookmark">%2$s photo</a>.' , 'This gallery contains <a href="%1$s" rel="bookmark">%2$s photos</a>.' , $total_images , 'twentyfourteen' ),
esc_url ( get_permalink () ),
number_format_i18n ( $total_images )
);
?>
</ p >
< ? php
2013-10-30 10:39:10 -04:00
endif ;
2013-08-22 14:06:09 -04:00
else :
the_content ( __ ( 'Continue reading <span class="meta-nav">→</span>' , 'twentyfourteen' ) );
endif ;
?>
</ div ><!-- . entry - content -->
< header class = " entry-header " >
< div class = " entry-meta " >
< ? php
if ( ! has_post_format ( 'link' ) ) :
the_title ( '<h1 class="entry-title"><a href="' . esc_url ( get_permalink () ) . '" rel="bookmark">' , '</a></h1>' );
endif ;
2013-10-24 18:57:25 -04:00
printf ( __ ( '<span class="entry-date"><a href="%1$s" rel="bookmark"><time class="entry-date" datetime="%2$s">%3$s</time></a></span> <span class="byline"><span class="author vcard"><a class="url fn n" href="%4$s" rel="author">%5$s</a></span></span>' , 'twentyfourteen' ),
2013-08-22 14:06:09 -04:00
esc_url ( get_permalink () ),
esc_attr ( get_the_date ( 'c' ) ),
esc_html ( get_the_date () ),
esc_url ( get_author_posts_url ( get_the_author_meta ( 'ID' ) ) ),
get_the_author ()
);
if ( ! post_password_required () && ( comments_open () || get_comments_number () ) ) :
?>
< span class = " comments-link " >< ? php comments_popup_link ( __ ( 'Leave a comment' , 'twentyfourteen' ), __ ( '1 Comment' , 'twentyfourteen' ), __ ( '% Comments' , 'twentyfourteen' ) ); ?> </span>
< ? php endif ; ?>
</ div ><!-- . entry - meta -->
</ header ><!-- . entry - header -->
</ article ><!-- #post-## -->
</ li >
< ? php endwhile ; ?>
</ ol >
< a class = " post-format-archive-link " href = " <?php echo esc_url( get_post_format_link( $format ) ); ?> " >< ? php printf ( __ ( 'More %s <span class="meta-nav">→</span>' , 'twentyfourteen' ), $this -> format_strings [ $format ] ); ?> </a>
< ? php
echo $after_widget ;
// Reset the post globals as this query will have stomped on it.
wp_reset_postdata ();
$GLOBALS [ 'content_width' ] = $tmp_content_width ;
endif ; // End check for ephemeral posts.
set_transient ( $this -> id , ob_get_flush () );
}
/**
2013-10-11 18:02:11 -04:00
* Deal with the settings when they are saved by the admin . Here is where
* any validation should happen .
*
* @ since Twenty Fourteen 1.0
2013-08-22 14:06:09 -04:00
*
* @ param array $new_instance
* @ param array $instance
* @ return array
*/
function update ( $new_instance , $instance ) {
$instance [ 'title' ] = strip_tags ( $new_instance [ 'title' ] );
$instance [ 'number' ] = empty ( $new_instance [ 'number' ] ) ? 2 : absint ( $new_instance [ 'number' ] );
2013-11-18 18:11:10 -05:00
if ( in_array ( $new_instance [ 'format' ], $this -> formats ) ) {
2013-08-22 14:06:09 -04:00
$instance [ 'format' ] = $new_instance [ 'format' ];
2013-11-18 18:11:10 -05:00
}
2013-08-22 14:06:09 -04:00
$this -> flush_widget_cache ();
return $instance ;
}
/**
2013-10-11 18:02:11 -04:00
* Delete the transient .
*
* @ since Twenty Fourteen 1.0
2013-08-22 14:06:09 -04:00
*
* @ return void
*/
function flush_widget_cache () {
delete_transient ( $this -> id );
}
/**
2013-10-11 18:02:11 -04:00
* Display the form for this widget on the Widgets page of the Admin area .
*
* @ since Twenty Fourteen 1.0
2013-08-22 14:06:09 -04:00
*
* @ param array $instance
* @ return void
*/
function form ( $instance ) {
$title = empty ( $instance [ 'title' ] ) ? '' : esc_attr ( $instance [ 'title' ] );
$number = empty ( $instance [ 'number' ] ) ? 2 : absint ( $instance [ 'number' ] );
$format = isset ( $instance [ 'format' ] ) && in_array ( $instance [ 'format' ], $this -> formats ) ? $instance [ 'format' ] : 'aside' ;
?>
< p >< label for = " <?php echo esc_attr( $this->get_field_id ( 'title' ) ); ?> " >< ? php _e ( 'Title:' , 'twentyfourteen' ); ?> </label>
< input id = " <?php echo esc_attr( $this->get_field_id ( 'title' ) ); ?> " class = " widefat " name = " <?php echo esc_attr( $this->get_field_name ( 'title' ) ); ?> " type = " text " value = " <?php echo esc_attr( $title ); ?> " /></ p >
< p >< label for = " <?php echo esc_attr( $this->get_field_id ( 'number' ) ); ?> " >< ? php _e ( 'Number of posts to show:' , 'twentyfourteen' ); ?> </label>
< input id = " <?php echo esc_attr( $this->get_field_id ( 'number' ) ); ?> " name = " <?php echo esc_attr( $this->get_field_name ( 'number' ) ); ?> " type = " text " value = " <?php echo esc_attr( $number ); ?> " size = " 3 " /></ p >
< p >< label for = " <?php echo esc_attr( $this->get_field_id ( 'format' ) ); ?> " >< ? php _e ( 'Post format to show:' , 'twentyfourteen' ); ?> </label>
< select id = " <?php echo esc_attr( $this->get_field_id ( 'format' ) ); ?> " class = " widefat " name = " <?php echo esc_attr( $this->get_field_name ( 'format' ) ); ?> " >
< ? php foreach ( $this -> formats as $slug ) : ?>
< option value = " <?php echo esc_attr( $slug ); ?> " < ? php selected ( $format , $slug ); ?> ><?php echo get_post_format_string( $slug ); ?></option>
< ? php endforeach ; ?>
</ select >
< ? php
}
}