'themeidol-instagram-feed', 'description' => esc_html__( 'Displays your latest Instagram photos', 'themeidol-all-widget' ), 'customize_selective_refresh' => true ) ); } function widget( $args, $instance ) { $title = empty( $instance['title'] ) ? '' : apply_filters( 'widget_title', esc_attr($instance['title']) ); $username = empty( $instance['username'] ) ? '' : esc_attr($instance['username']); $limit = empty( $instance['number'] ) ? 9 : esc_attr($instance['number']); $size = empty( $instance['size'] ) ? 'large' : esc_attr($instance['size']); $target = empty( $instance['target'] ) ? '_self' : esc_attr($instance['target']); $link = empty( $instance['link'] ) ? '' : esc_attr($instance['link']); echo $args['before_widget']; if ( ! empty( $title ) ) { echo $args['before_title'] . wp_kses_post( $title ) . $args['after_title']; }; do_action( 'themeidoliw_before_widget', $instance ); if ( $username != '' ) { $media_array = $this->scrape_instagram( $username ); if ( is_wp_error( $media_array ) ) { echo wp_kses_post( $media_array->get_error_message() ); } else { // filter for images only? if ( $images_only = apply_filters( 'themeidoliw_images_only', FALSE ) ) { $media_array = array_filter( $media_array, array( $this, 'images_only' ) ); } // slice list down to required limit $media_array = array_slice( $media_array, 0, $limit ); // filters for custom classes $ulclass = apply_filters( 'themeidoliw_list_class', 'instagram-pics instagram-size-' . $size ); $liclass = apply_filters( 'themeidoliw_item_class', 'instagram-size-child-' . $size ); $aclass = apply_filters( 'themeidoliw_a_class', 'instagram-size-anchor-'. $size ); $imgclass = apply_filters( 'themeidoliw_img_class', 'instagram-size-img-'. $size ); ?>
', $shards[1] ); $insta_array = json_decode( $insta_json[0], TRUE ); if ( ! $insta_array ) return new WP_Error( 'bad_json', esc_html__( 'Instagram has returned invalid data.', 'themeidol-all-widget' ) ); if ( isset( $insta_array['entry_data']['ProfilePage'][0]['user']['media']['nodes'] ) ) { $images = $insta_array['entry_data']['ProfilePage'][0]['user']['media']['nodes']; } else { return new WP_Error( 'bad_json_2', esc_html__( 'Instagram has returned invalid data.', 'themeidol-all-widget' ) ); } if ( ! is_array( $images ) ) return new WP_Error( 'bad_array', esc_html__( 'Instagram has returned invalid data.', 'themeidol-all-widget' ) ); $instagram = array(); foreach ( $images as $image ) { $image['thumbnail_src'] = preg_replace( '/^https?\:/i', '', $image['thumbnail_src'] ); $image['display_src'] = preg_replace( '/^https?\:/i', '', $image['display_src'] ); // handle both types of CDN url if ( ( strpos( $image['thumbnail_src'], 's640x640' ) !== false ) ) { $image['thumbnail'] = str_replace( 's640x640', 's160x160', $image['thumbnail_src'] ); $image['small'] = str_replace( 's640x640', 's320x320', $image['thumbnail_src'] ); } else { $urlparts = wp_parse_url( $image['thumbnail_src'] ); $pathparts = explode( '/', $urlparts['path'] ); array_splice( $pathparts, 3, 0, array( 's160x160' ) ); $image['thumbnail'] = '//' . $urlparts['host'] . implode( '/', $pathparts ); $pathparts[3] = 's320x320'; $image['small'] = '//' . $urlparts['host'] . implode( '/', $pathparts ); } $image['large'] = $image['thumbnail_src']; if ( $image['is_video'] == true ) { $type = 'video'; } else { $type = 'image'; } $caption = __( 'Instagram Image', 'themeidol-all-widget' ); if ( ! empty( $image['caption'] ) ) { $caption = $image['caption']; } $instagram[] = array( 'description' => $caption, 'link' => trailingslashit( '//instagram.com/p/' . $image['code'] ), 'time' => $image['date'], 'comments' => $image['comments']['count'], 'likes' => $image['likes']['count'], 'thumbnail' => $image['thumbnail'], 'small' => $image['small'], 'large' => $image['large'], 'original' => $image['display_src'], 'type' => $type ); } // do not set an empty transient - should help catch private or empty accounts if ( ! empty( $instagram ) ) { $instagram = base64_encode( serialize( $instagram ) ); set_transient( 'themeidol-instagm-'.sanitize_title_with_dashes( $username ), $instagram, apply_filters( 'null_instagram_cache_time', HOUR_IN_SECONDS*2 ) ); } } if ( ! empty( $instagram ) ) { return unserialize( base64_decode( $instagram ) ); } else { return new WP_Error( 'no_images', esc_html__( 'Instagram did not return any images.', 'themeidol-all-widget' ) ); } } function images_only( $media_item ) { if ( $media_item['type'] == 'image' ) return true; return false; } }