Home Forums Basel support forum Instagram thumbnail crashes on the widget

Instagram thumbnail crashes on the widget

Viewing 8 posts - 1 through 8 (of 8 total)
  • Author
    Posts
  • #33478

    Giulio
    Participant

    Hi there,

    I just updated to last WooCommerce version, but the Instagram widget crashed. All thumbnail are not visible. I use Basel 3.6.2 and I can’t update the theme right now. Can you help me please to fix that issue?

    Thanks.

    #33492

    Artem Temos
    Keymaster

    Hi,

    Try to add the following PHP code snippet to the child theme functions.php file to do this

    	function basel_scrape_instagram($username, $slice = 9) {
    		$username = strtolower( $username );
    		$by_hashtag = ( substr( $username, 0, 1) == '#' );
    		
    		if ( false === ( $instagram = get_transient( 'instagram-media-new-'.sanitize_title_with_dashes( $username ) ) ) ) {
    		    
    		    $request_param = ( $by_hashtag ) ? 'explore/tags/' . substr( $username, 1) : trim( $username );
    		    $remote = wp_remote_get( 'https://instagram.com/'. $request_param );
    		    
    		    if ( is_wp_error( $remote ) )
    		        return new WP_Error( 'site_down', esc_html__( 'Unable to communicate with Instagram.', 'basel' ) );
    		        
    		    if ( 200 != wp_remote_retrieve_response_code( $remote ) )
    		        return new WP_Error( 'invalid_response', esc_html__( 'Instagram did not return a 200.', 'basel' ) );
    		        
    		    $shards = explode( 'window._sharedData = ', $remote['body'] );
    		    $insta_json = explode( ';</script>', $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.', 'basel' ) );
    		        
    		    // old style
    		    if ( isset( $insta_array['entry_data']['UserProfile'][0]['userMedia'] ) ) {
    		        $images = $insta_array['entry_data']['UserProfile'][0]['userMedia'];
    		        $type = 'old';
    		    // old_2 style
    		    } elseif( $by_hashtag && isset( $insta_array['entry_data']['TagPage'][0]['tag']['media']['nodes'] ) ) {
    		        $images = $insta_array['entry_data']['TagPage'][0]['tag']['media']['nodes'];
    		        $type = 'old_2';
    		    }else if ( isset( $insta_array['entry_data']['ProfilePage'][0]['user']['media']['nodes'] ) ) {
    		        $images = $insta_array['entry_data']['ProfilePage'][0]['user']['media']['nodes'];
    		        $type = 'old_2';
    		    // new style
    		    } elseif( $by_hashtag && isset( $insta_array['entry_data']['TagPage'][0]['graphql']['hashtag']['edge_hashtag_to_media']['edges'] ) ) {
    		        $images = $insta_array['entry_data']['TagPage'][0]['graphql']['hashtag']['edge_hashtag_to_media']['edges'];
    		        $type = 'new';
    		    } else {
    		        return new WP_Error( 'bad_json_2', esc_html__( 'Instagram has returned invalid data.', 'basel' ) );
    		    }
    		
    		    if ( !is_array( $images ) )
    		        return new WP_Error( 'bad_array', esc_html__( 'Instagram has returned invalid data.', 'basel' ) );
    		        
    		    $instagram = array();
    		    
    		    switch ( $type ) {
    		        case 'old':
    		            foreach ( $images as $image ) {
    		                if ( $image['user']['username'] == $username ) {
    		                    $image['link']						  = $image['link'];
    		                    $image['images']['thumbnail']		   = preg_replace( "/^http:/i", "", $image['images']['thumbnail'] );
    		                    $image['images']['standard_resolution'] = preg_replace( "/^http:/i", "", $image['images']['standard_resolution'] );
    		                    $image['images']['low_resolution']	  = preg_replace( "/^http:/i", "", $image['images']['low_resolution'] );
    		                    $instagram[] = array(
    		                        'description'   => $image['caption']['text'],
    		                        'link'		  	=> $image['link'],
    		                        'time'		  	=> $image['created_time'],
    		                        'comments'	  	=> $image['comments']['count'],
    		                        'likes'		 	=> $image['likes']['count'],
    		                        'thumbnail'	 	=> $image['images']['thumbnail'],
    		                        'large'		 	=> $image['images']['standard_resolution'],
    		                        'small'		 	=> $image['images']['low_resolution'],
    		                        'type'		  	=> $image['type']
    		                    );
    		                }
    		            }
    		        break;
    		        case 'old_2':
    		            foreach ( $images as $image ) {
    						$image['thumbnail_src'] = preg_replace( "/^https:/i", "", $image['thumbnail_src'] );
    						$image['thumbnail'] = preg_replace( "/^https:/i", "", $image['thumbnail_resources'][0]['src'] );
    						$image['medium'] = preg_replace( "/^https:/i", "", $image['thumbnail_resources'][2]['src'] );
    						$image['large'] = $image['thumbnail_src'];
    						$image['display_src'] = preg_replace( "/^https:/i", "", $image['display_src'] );
    		                if ( $image['is_video'] == true ) {
    		                    $type = 'video';
    		                } else {
    		                    $type = 'image';
    		                }
    		                $caption = esc_html__( 'Instagram Image', 'basel' );
    		                if ( ! empty( $image['caption'] ) ) {
    		                    $caption = $image['caption'];
    		                }
    		                $instagram[] = array(
    		                    'description'   => $caption,
    		                    'link'		  	=> '//instagram.com/p/' . $image['code'],
    		                    'time'		  	=> $image['date'],
    		                    'comments'	  	=> $image['comments']['count'],
    		                    'likes'		 	=> $image['likes']['count'],
    		                    'thumbnail'	 	=> $image['thumbnail'],
    		                    'medium'		=> $image['medium'],
    		                    'large'			=> $image['large'],
    		                    'original'		=> $image['display_src'],
    		                    'type'		  	=> $type
    		                );
    		            }
    		        break;
    		        default:
    		            foreach ( $images as $image ) {
    		                $image = $image['node'];
    		                $caption = esc_html__( 'Instagram Image', 'basel' );
    		                if ( ! empty( $image['edge_media_to_caption']['edges'][0]['node']['text'] ) ) $caption = $image['edge_media_to_caption']['edges'][0]['node']['text'];
    		                
    						$image['thumbnail_src'] = preg_replace( "/^https:/i", "", $image['thumbnail_src'] );
    						$image['thumbnail'] = preg_replace( "/^https:/i", "", $image['thumbnail_resources'][0]['src'] );
    						$image['medium'] = preg_replace( "/^https:/i", "", $image['thumbnail_resources'][2]['src'] );
    						$image['large'] = $image['thumbnail_src'];
    		                
    		                $type = ( $image['is_video'] ) ? 'video' : 'image';
    		                
    		                $instagram[] = array(
    		                    'description'   => $caption,
    		                    'link'		  	=> '//instagram.com/p/' . $image['shortcode'],
    		                    'comments'	  	=> $image['edge_media_to_comment']['count'],
    		                    'likes'		 	=> $image['edge_liked_by']['count'],
    		                    'thumbnail'	 	=> $image['thumbnail'],
    		                    'medium'		=> $image['medium'],
    		                    'large'			=> $image['large'],
    		                    'type'		  	=> $type
    		                );
    		            }
    		        break;
    		    }
    		    // do not set an empty transient - should help catch private or empty accounts
    		    if ( ! empty( $instagram ) ) {
    		        $instagram = base64_encode( maybe_serialize( $instagram ) );
    		        set_transient( 'instagram-media-new-'.sanitize_title_with_dashes( $username ), $instagram, apply_filters( 'null_instagram_cache_time', HOUR_IN_SECONDS*2 ) );
    		    }
    		}
    		if ( ! empty( $instagram ) ) {
    		    $instagram = maybe_unserialize( base64_decode( $instagram ) );
    		    return array_slice( $instagram, 0, $slice );
    		} else {
    		    return new WP_Error( 'no_images', esc_html__( 'Instagram did not return any images.', 'basel' ) );
    		}
    	}

    Regards

    #33500

    Giulio
    Participant

    Same issue.

    Attachments:
    You must be logged in to view attached files.
    #33513

    Artem Temos
    Keymaster

    You need to clear your WordPress transients on your website to see the changes.

    #33515

    Giulio
    Participant

    Do you mean the cache?

    #33516

    Giulio
    Participant

    I found that option on WP Fastest Cache. Is it sure delete all transient option?

    #33517

    Giulio
    Participant

    I removed them and it works. Thank you!

    #33542

    Artem Temos
    Keymaster

    Great, you are welcome!

Viewing 8 posts - 1 through 8 (of 8 total)