Plugin Directory

Changeset 3088940


Ignore:
Timestamp:
05/19/2024 10:54:38 AM (23 months ago)
Author:
openstream
Message:

Converts ipfs.io to cloudflare-ipfs.com image URLs for caching, skips video NFTs

Location:
nft-gallery/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • nft-gallery/trunk/inc/shortcodes.php

    r3088491 r3088940  
    66* you will find all functions related to the shortcodes that are available on the plugin.
    77*
    8 * @author   Hendra Setiawan
     8* @authors   Hendra Setiawan, Nick Weisser
    99* @version  1.3.0
    1010*/
     
    2222        $args = array(
    2323            'headers'     => array(
    24                 'X-API-KEY' => get_option('nftgallery-api'),
    25             ),
     24                'accept' => 'application/json',
     25                'x-api-key' => get_option('nftgallery-api')
     26            )
    2627        );
    2728
     
    3132        $style = get_option('nftgallery-style');
    3233
    33         $request = wp_remote_get( 'https://api.opensea.io/api/v1/assets?format=json&limit='.$limit.'&offset=0&order_direction=desc&'.$type.'='.$id,$args );
    34 
     34        if ($type == 'owner') {
     35            $request = wp_remote_get('https://api.opensea.io/api/v2/chain/ethereum/account/'.$id.'/nfts?limit='.$limit, $args);
     36        } else {
     37            $request = wp_remote_get('https://api.opensea.io/api/v2/collection/'.$id.'/nfts?limit='.$limit, $args);
     38        }
     39       
    3540        ob_start();
    3641        $nfts = '';
     
    4247
    4348            $data = json_decode( $body );
    44 
    4549            if( ! empty( $data ) ) {
    4650                if($style == 'grid') {
    4751                    wp_enqueue_style( 'flexbox' );
    4852                    $nfts .= '<div class="row nftgallery">';
    49                     foreach( $data->assets as $asset ) {
    50                         if($asset->name) { $title = $asset->name; } else { $title = '#'.$asset->token_id; }
     53                    foreach( $data->nfts as $asset ) {
     54                        $image_headers = @get_headers($asset->image_url, 1);
     55                        if ($image_headers === false) { continue; }
     56                        if (isset($image_headers['Content-Type']) && strpos($image_headers['Content-Type'], 'video') !== false) {
     57                            continue; // Skip this iteration if the content type is a video
     58                        }
     59                        // IPFS images with parentheses wouldn't render ...
     60                        // Parse URL
     61                        $parsed_url = parse_url($asset->image_url);
     62                        if ($parsed_url === false) {
     63                            echo "<!-- Failed to parse URL: {$asset->image_url} -->\n";
     64                            continue;
     65                        }             
     66                        // Manually encode the path
     67                        $encoded_path = implode('/', array_map('rawurlencode', explode('/', $parsed_url['path'])));
     68                        // Rebuild the URL
     69                        $encoded_image_url = $parsed_url['scheme'] . '://' . $parsed_url['host'] . $encoded_path;
    5170
    52                         $imageURL = $asset->image_preview_url;
    53                         $parsedUrl = parse_url($imageURL);
    54                         $scheme = $parsedUrl['scheme'];
    55                         $host = $parsedUrl['host'];
    56                         $path = $parsedUrl['path'];
     71                        // Replace ipfs.io with Cloudflare's IPFS gateway for caching
     72                        $image_url = str_replace('https://ipfs.io/ipfs/', 'https://cloudflare-ipfs.com/ipfs/', $encoded_image_url);
    5773
    58                         $clenedImageURL = $scheme . '://' . $host . $path;
    59                        
     74                        if($asset->name) { $title = $asset->name; } else { $title = '#'.$asset->identifier; }
     75
    6076                        $nfts .= '<div class="col-xs-6 col-sm-6 col-md-6 col-lg-4 nftgallery-wrapper">';
    61                             $nfts .= '<div class="nft" data-url="'.$asset->permalink.'">';
    62                             $nfts .= '<div class="image" style="background-image: url('.$clenedImageURL.');"></div>';
     77                            $nfts .= '<div class="nft" data-url="'.$asset->opensea_url.'">';
     78                            $nfts .= '<div class="image" style="background-image: url(\''.$image_url.'\');"></div>';
    6379                            $nfts .= '<div class="desc">
    64                                         <div class="collection">'.$asset->collection->name.'</div>
     80                                        <div class="collection">'.$asset->collection.'</div>
    6581                                        <h2>'.$title.'</h2>
    6682                                      </div>';
     
    7187                    if($type == 'collection'):
    7288
    73                         $nfts .= '<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 os-button-wrapper"><a href="https://opensea.io/collection/'.$id.'" class="view-opensea" target="_blank">View '.$asset->collection->name.' on OpenSea</a></div>';
     89                        $nfts .= '<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 os-button-wrapper"><a href="https://opensea.io/collection/'.$id.'" class="view-opensea" target="_blank">View '.$asset->name.' on OpenSea</a></div>';
    7490                   
    7591                    endif;
     
    87103                    $nfts .= '<div class="gallery-container nftgallery" id="lightgallery">';
    88104                    $no = 1;
    89                     foreach( $data->assets as $asset ) {
     105                    foreach( $data->nfts as $asset ) {
     106                        $image_headers = @get_headers($asset->image_url, 1);
     107                        if ($image_headers === false) { continue; }
     108                        if (isset($image_headers['Content-Type']) && strpos($image_headers['Content-Type'], 'video') !== false) {
     109                            continue; // Skip this iteration if the content type is a video
     110                        }
    90111                        $basename = basename($asset->image_url);
    91                         if($asset->name) { $title = $asset->name; } else { $title = $asset->token_id; }
     112                        if($asset->name) { $title = $asset->name; } else { $title = $asset->identifier; }
    92113                        $title = strip_tags($title);
    93114                        $title = preg_replace('#[^\w()/.%\-&]#'," ",$title);
    94115                       
    95116                        $nfts .= '<a data-src="'.$asset->image_url.'" data-download-url="false" class="gallery-item" data-sub-html=".caption'.$no.'">';
    96                         $nfts .= '<img class="img-fluid" src="'.$asset->image_preview_url.'" />';
    97                         $nfts .= '<div class="caption caption'.$no.'"><p class="nft-title">'.$title.'</p><p>Minted by <strong>'.$asset->creator->user->username.'</strong> in <strong>'.$asset->collection->name.'</strong></p><button class="openseaBtn" data-url="'.$asset->permalink.'">View on OpenSea</button></div>';
     117                        $nfts .= '<img class="img-fluid" src="'.$asset->image_url.'" />';
     118                        $nfts .= '<div class="caption caption'.$no.'"><p class="nft-title">'.$title.'</p><p>Collection: '.$asset->collection.'</strong></p><button class="openseaBtn" data-url="'.$asset->opensea_url.'">View on OpenSea</button></div>';
    98119                        $nfts .= '</a>';
    99120                        $no++;
  • nft-gallery/trunk/readme.txt

    r3087315 r3088940  
    5454
    5555= 1.3.0 =
    56 * Added basic support for OpenSea API v2
     56* Adds support for OpenSea API v2
     57* Converts ipfs.io to cloudflare-ipfs.com image URLs for caching
    5758
    5859= 1.2.0 =
Note: See TracChangeset for help on using the changeset viewer.