'adapter-post-preview' , 'description' => __( 'Show a carousel of recent posts, or a selected one' , 'adapter-post-preview' ) , ) ; $this->WP_Widget( 'adapter_post_preview' , __( 'Adapter Post Preview' , 'adapter-post-preview' ) , $options ) ; } function form( $instance ) { $selected_post = isset( $instance[ 'selected_post' ] ) ? $instance[ 'selected_post' ] : "" ; $selected_post_field_name = $this->get_field_name( 'selected_post' ) ; $selected_post_field_id = $this->get_field_id( 'selected_post' ) ; $posts = get_posts( array( 'type' => 'post' , 'orderby' => 'date' , 'posts_per_page' => '-1' , ) ) ; ?>

get_carousel_markup() ; } else { $markup = $this->get_single_post_preview_without_carousel( $selected_post ) ; } echo $before_widget . $markup . $after_widget ; } private function get_carousel_markup() { $post_preview_ids = $this->get_post_ids_for_carousel() ; $post_preview_container = $this->get_all_post_preview_markup( $post_preview_ids ) ; $post_carousel = new APP_Carousel() ; foreach( $post_preview_container as $post_preview ) { $post_carousel->add_post_markup( $post_preview ) ; } $markup = $post_carousel->get() ; return $markup ; } private function get_post_ids_for_carousel() { $posts_per_page = apply_filters( 'bwp_number_of_posts_in_carousel' , 5 ) ; global $post ; $posts_for_carousel = get_posts( array( 'type' => 'post' , 'orderby' => 'date' , 'posts_per_page' => $posts_per_page , 'exclude' => isset( $post ) ? $post->ID : "" , ) ) ; $post_ids = array() ; foreach( $posts_for_carousel as $post_for_carousel ) { if ( has_post_thumbnail( $post_for_carousel->ID ) ) { array_push( $post_ids , $post_for_carousel->ID ) ; } } return $post_ids ; } private function get_all_post_preview_markup( $post_ids ) { global $post ; if ( isset( $post ) ) { $post_currently_on_page = $post ; } $post_preview_container = array() ; foreach( $post_ids as $post_id ) { $post_markup = $this->get_markup_for_single_post( $post_id ) ; array_push( $post_preview_container , $post_markup ) ; } if ( isset( $post_currently_on_page ) ) { $post = $post_currently_on_page ; } return $post_preview_container ; } private function get_markup_for_single_post( $post_id ) { $post = get_post( $post_id ) ; setup_postdata( $post ) ; $post_markup = appw_get_single_post_preview_markup( $post ) ; wp_reset_postdata() ; return $post_markup ; } private function get_single_post_preview_without_carousel( $post_id ) { global $post ; if ( $post->ID == $post_id ) { return "" ; // the post is already showing on the page, so no need for a widget preview of it } $markup = $this->get_all_post_preview_markup( array( $post_id ) ) ; $single_post_markup = reset( $markup ) ; return $single_post_markup ; } } function appw_get_single_post_preview_markup( $post ) { $thumbnail = get_the_post_thumbnail( $post->ID , 'medium' , array( 'class' => 'img-rounded img-responsive' ) ) ; $title = '

' . get_the_title( $post->ID ) . '

' ; $raw_excerpt = get_the_excerpt() ; $excerpt_length = apply_filters( 'appw_excerpt_length' , 30 ) ; $filtered_excerpt = '

' . wp_trim_words( $raw_excerpt , $excerpt_length , '...' ) . '

' ; $permalink = get_permalink( $post->ID ) ; $link_text = apply_filters( 'appw_link_text' , __( 'Read more' , 'adapter-post-preview' ) ) ; $button = "{$link_text}" ; $markup = '
' . $thumbnail . $title . '' . '
' ; return $markup ; } function appw_is_valid_value( $input ) { return ( is_numeric( $input ) || ( 'appw_carousel_recent' == $input ) ) ; }