[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fzr3-yqDnFEpMa_aIC-wqd6q04179rJN47g5kyj9YNis":3},{"slug":4,"name":5,"version":6,"author":7,"author_profile":8,"description":9,"short_description":10,"active_installs":11,"downloaded":12,"rating":13,"num_ratings":14,"last_updated":15,"tested_up_to":16,"requires_at_least":17,"requires_php":18,"tags":19,"homepage":25,"download_link":26,"security_score":27,"vuln_count":28,"unpatched_count":28,"last_vuln_date":29,"fetched_at":30,"vulnerabilities":31,"developer":32,"crawl_stats":29,"alternatives":37,"analysis":143,"fingerprints":326},"janzeman-shared-albums-for-google-photos","Shared Albums for Google Photos (by JanZeman)","1.0.7","Jan Zeman","https:\u002F\u002Fprofiles.wordpress.org\u002Fjanzeman\u002F","\u003Cp>Shared Albums for Google Photos (by JanZeman) allows you to easily display publicly shared Google Photos albums in your WordPress posts and pages using a simple shortcode. The plugin uses the modern Swiper library to provide a beautiful, touch-enabled gallery experience.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Note:\u003C\u002Fstrong> This plugin is not affiliated with or endorsed by Google LLC. Google Photos™ is a trademark of Google LLC.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>IMPORTANT:\u003C\u002Fstrong> Short links (photos.app.goo.gl) might stop working in the future. While both full and short link formats work today, we strongly recommend using the full link format \u003Ccode>https:\u002F\u002Fphotos.google.com\u002Fshare\u002F\u003C\u002Fcode> to ensure your galleries continue working. The plugin will display a warning banner when short links are detected.\u003C\u002Fp>\n\u003Ch4>Features\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>Grid Mode\u003C\u002Fstrong> – Display photos as a thumbnail grid with uniform\u002Fjustified layouts\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Grid Paging Or Scrolling\u003C\u002Fstrong> – Use \u003Ccode>grid-rows\u003C\u002Fcode> with optional \u003Ccode>grid-scroller\u003C\u002Fcode> to choose page controls or a single scrollable grid\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Modern Gallery Viewer\u003C\u002Fstrong> – Powered by Swiper 11, a modern mobile-friendly slider\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Responsive Design\u003C\u002Fstrong> – Works perfectly on desktop, tablet, and mobile devices\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Shortcode Playground\u003C\u002Fstrong> – Admin-only sandbox on the Settings page for experimenting with \u003Ccode>[jzsa-album]\u003C\u002Fcode> shortcodes and previews\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Touch Gestures\u003C\u002Fstrong> – Swipe navigation on touch devices\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Fullscreen Mode\u003C\u002Fstrong> – Click to view photos in fullscreen\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Play\u002FPause Control\u003C\u002Fstrong> – Fullscreen play\u002Fpause button with spacebar keyboard shortcut\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Click Navigation\u003C\u002Fstrong> – Optional click\u002Fdouble-click on left\u002Fright areas to navigate between photos\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Dual-Mode Autoplay\u003C\u002Fstrong> – Separate autoplay settings for normal and fullscreen modes\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Zoom Support\u003C\u002Fstrong> – Pinch-to-zoom and double-click to zoom on photos\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Keyboard Navigation\u003C\u002Fstrong> – Use arrow keys to navigate, spacebar to play\u002Fpause in fullscreen\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Progressive Loading\u003C\u002Fstrong> – Loads preview images first, then full-resolution for optimal performance\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Smart Preloading\u003C\u002Fstrong> – Automatically preloads adjacent slides for smooth navigation\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Lazy Loading\u003C\u002Fstrong> – Images load as needed for optimal performance\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Error Recovery\u003C\u002Fstrong> – Graceful fallback with placeholder when images fail to load\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Download Button\u003C\u002Fstrong> – Optional download button to save photos to your device\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Customizable\u003C\u002Fstrong> – Control dimensions, autoplay, delays, and more\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Cached for Performance\u003C\u002Fstrong> – Gallery HTML is cached for 24 hours\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Large Album Support\u003C\u002Fstrong> – Handles up to 300 photos per album (Google Photos limitation; very old iOS\u002FWebKit devices may be limited to 25 photos for stability)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>How It Works\u003C\u002Fh4>\n\u003Cp>The plugin fetches your public Google Photos album and creates a responsive gallery. Simply paste the share link from Google Photos into the shortcode.\u003C\u002Fp>\n\u003Ch4>Security & Error Handling\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>SSRF protection – validates Google Photos URLs\u003C\u002Fli>\n\u003Cli>Proper output escaping for XSS prevention\u003C\u002Fli>\n\u003Cli>WordPress coding standards compliant\u003C\u002Fli>\n\u003Cli>Swiper library bundled locally\u003C\u002Fli>\n\u003Cli>User-friendly error messages for invalid or short links\u003C\u002Fli>\n\u003Cli>Automatic detection and warning for deprecated goo.gl links\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Usage\u003C\u002Fh3>\n\u003Ch4>Basic Usage\u003C\u002Fh4>\n\u003Cp>\u003Cstrong>RECOMMENDED:\u003C\u002Fstrong> Use the full \u003Ccode>photos.google.com\u002Fshare\u002F\u003C\u002Fcode> URL format for future compatibility.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[jzsa-album link=\"https:\u002F\u002Fphotos.google.com\u002Fshare\u002FYOUR_LONG_ALBUM_ID\"]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Concrete example with a real album link (for testing):\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[jzsa-album link=\"https:\u002F\u002Fphotos.google.com\u002Fshare\u002FAF1QipOg3EA51ATc_YWHyfcffDCzNZFsVTU_uBqSEKFix7LY80DIgH3lMkLwt4QDTHd8EQ?key=RGwySFNhbmhqMFBDbnZNUUtwY0stNy1XV1JRbE9R\"]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Note: Short links (photos.app.goo.gl) are still supported but will show a deprecation warning.\u003C\u002Fp>\n\u003Ch4>Advanced Usage\u003C\u002Fh4>\n\u003Cpre>\u003Ccode>[jzsa-album\n    link=\"https:\u002F\u002Fphotos.google.com\u002Fshare\u002FYOUR_LONG_ALBUM_ID\"\n    background-color=\"#000000\"\n    image-fit=\"contain\"\n    width=\"500\"\n    height=\"375\"\n    autoplay=\"true\"\n    autoplay-delay=\"5\"\n    autoplay-inactivity-timeout=\"60\"\n    start-at=\"1\"\n    full-screen-autoplay=\"true\"\n    full-screen-autoplay-delay=\"3\"\n    full-screen-switch=\"double-click\"\n    full-screen-navigation=\"single-click\"\n    show-title=\"true\"\n    show-counter=\"true\"\n    show-link-button=\"true\"\n    show-download-button=\"true\"\n]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Shortcode Parameters\u003C\u002Fh4>\n\u003Cp>The only required parameter is \u003Cstrong>link\u003C\u002Fstrong> — the Google Photos share URL.\u003C\u002Fp>\n\u003Cp>All other parameters are optional and control appearance, autoplay, fullscreen behavior, display options, gallery mode, and grid layout.\u003C\u002Fp>\n\u003Cp>For the complete list of all parameters with descriptions and defaults, visit the plugin’s \u003Cstrong>Settings\u003C\u002Fstrong> page in your WordPress admin (Settings \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Shared Albums for Google Photos). The Settings page also includes a Playground for experimenting with shortcodes and live Samples you can copy.\u003C\u002Fp>\n\u003Ch4>Getting Your Album Share Link\u003C\u002Fh4>\n\u003Col>\n\u003Cli>Open Google Photos and select an album\u003C\u002Fli>\n\u003Cli>Click the share button (or three-dot menu > Share)\u003C\u002Fli>\n\u003Cli>Click “Create link” or “Get link”\u003C\u002Fli>\n\u003Cli>Copy the FULL share link (format: \u003Ccode>https:\u002F\u002Fphotos.google.com\u002Fshare\u002FAF1QipN...\u003C\u002Fcode>)\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>\u003Cstrong>IMPORTANT:\u003C\u002Fstrong> Google Photos may show a short link like \u003Ccode>https:\u002F\u002Fphotos.app.goo.gl\u002Fabc123\u003C\u002Fcode>. These short links \u003Cstrong>might stop working in the future\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Current Behavior:\u003C\u002Fstrong>\u003Cbr \u002F>\n– Short links still work but display a warning banner\u003Cbr \u002F>\n– We strongly recommend using full links to avoid future issues\u003C\u002Fp>\n\u003Cp>\u003Cstrong>How to get the full link:\u003C\u002Fstrong>\u003Cbr \u002F>\n– On web: Right-click the album share link and choose “Copy link address” to get the full link\u003Cbr \u002F>\n– Or visit the short link in your browser and copy the full link from the address bar\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Example:\u003C\u002Fstrong>\u003Cbr \u002F>\nFull link (recommended): \u003Ccode>https:\u002F\u002Fphotos.google.com\u002Fshare\u002FAF1QipNxLo...\u003C\u002Fcode> ✅\u003Cbr \u002F>\nShort link (works with warning): \u003Ccode>https:\u002F\u002Fphotos.app.goo.gl\u002Fabc123\u003C\u002Fcode> ⚠️\u003C\u002Fp>\n\u003Cp>Use the shortcode with full link:\u003Cbr \u002F>\n    [jzsa-album link=”https:\u002F\u002Fphotos.google.com\u002Fshare\u002FAF1QipNxLo…”]\u003C\u002Fp>\n\u003Cp>Or with short link (not recommended):\u003Cbr \u002F>\n    [jzsa-album link=”https:\u002F\u002Fphotos.app.goo.gl\u002Fabc123″]\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Important:\u003C\u002Fstrong> The album must be public (shared via link) for the plugin to access it.\u003C\u002Fp>\n\u003Ch3>Credits\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Uses \u003Ca href=\"https:\u002F\u002Fswiperjs.com\u002F\" rel=\"nofollow ugc\">Swiper\u003C\u002Fa> – MIT License\u003C\u002Fli>\n\u003Cli>Developed by Jan Zeman\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Privacy Policy\u003C\u002Fh3>\n\u003Cp>This plugin does not collect or store any user data.\u003C\u002Fp>\n\u003Ch4>Use of external Google services\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>The plugin fetches public Google Photos album pages from \u003Ccode>https:\u002F\u002Fphotos.google.com\u003C\u002Fcode> and image files from \u003Ccode>*.googleusercontent.com\u003C\u002Fcode> in order to render the galleries.\u003C\u002Fli>\n\u003Cli>Only publicly shared album links are supported; the plugin has no access to private albums or any content that is not already available via a public share link.\u003C\u002Fli>\n\u003Cli>The plugin does not collect, store, or transmit user credentials or personal data. It only caches album HTML and image URLs in WordPress transients for performance, and this cache is stored locally in your WordPress database.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Support\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>Bug reports:\u003C\u002Fstrong> \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FJanZeman\u002Fshared-albums-for-google-photos\u002Fissues\u002Fnew\" rel=\"nofollow ugc\">Open an issue on GitHub\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Feature requests:\u003C\u002Fstrong> \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fsupport\u002Fplugin\u002Fjanzeman-shared-albums-for-google-photos\u002F\" rel=\"ugc\">Post on the support forum\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Leave a rating:\u003C\u002Fstrong> \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fsupport\u002Fplugin\u002Fjanzeman-shared-albums-for-google-photos\u002Freviews\u002F#new-post\" rel=\"ugc\">Review on WordPress.org\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Buy Me a Coffee:\u003C\u002Fstrong> \u003Ca href=\"https:\u002F\u002Fwww.buymeacoffee.com\u002Fjanzeman\" rel=\"nofollow ugc\">buymeacoffee.com\u002Fjanzeman\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n","Display publicly shared Google Photos albums with a modern, responsive Swiper-based gallery viewer.",20,374,80,1,"2026-03-11T22:07:00.000Z","6.9.4","5.0","7.0",[20,21,22,23,24],"album","embed","gallery","google-photos","swiper","https:\u002F\u002Fgithub.com\u002FJanZeman\u002Fshared-albums-for-google-photos","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fjanzeman-shared-albums-for-google-photos.1.0.7.zip",100,0,null,"2026-03-15T15:16:48.613Z",[],{"slug":33,"display_name":7,"profile_url":8,"plugin_count":14,"total_installs":11,"avg_security_score":27,"avg_patch_time_days":34,"trust_score":35,"computed_at":36},"janzeman",30,94,"2026-04-04T07:10:12.999Z",[38,62,84,100,118],{"slug":39,"name":40,"version":41,"author":42,"author_profile":43,"description":44,"short_description":45,"active_installs":46,"downloaded":47,"rating":48,"num_ratings":49,"last_updated":50,"tested_up_to":51,"requires_at_least":17,"requires_php":52,"tags":53,"homepage":58,"download_link":59,"security_score":60,"vuln_count":14,"unpatched_count":28,"last_vuln_date":61,"fetched_at":30},"embed-google-photos-album-easily","Embed Google Photos album","2.2.1","pavex","https:\u002F\u002Fprofiles.wordpress.org\u002Fpavex\u002F","\u003Cp>This plugin requires a shared Google Photos album link to view photos using gallery\u002Fplayer or carousel. This widget is free to use for WordPress users.\u003C\u002Fp>\n\u003Cp>It is very easy to use. Just write a \u003Cstrong>shortcode\u003C\u002Fstrong> to your post and include a link of shared Google Photos album as a parameter. Instead of shortcode, html code with links to the photo will be inserted and it will be decorated using Public album javascript.\u003C\u002Fp>\n\u003Ch3>Example\u003C\u002Fh3>\n\u003Cpre>\u003Ccode>[embed-google-photos-album link=\"https:\u002F\u002Fphotos.app.goo.gl\u002FCSV7NDstShTUwUZq5\"]\n\n[embed-google-photos-album link=\"https:\u002F\u002Fphotos.app.goo.gl\u002FCSV7NDstShTUwUZq5\" mode=\"carousel\"]\n\n[embed-google-photos-album link=\"https:\u002F\u002Fphotos.app.goo.gl\u002FCSV7NDstShTUwUZq5\" mediaitems-cover=\"true\"]\n\n[embed-google-photos-album link=\"https:\u002F\u002Fphotos.app.goo.gl\u002FCSV7NDstShTUwUZq5\" background-color=\"#007acc\"]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cul>\n\u003Cli>\u003Cstrong>link\u003C\u002Fstrong> – [string] public link of Google Photos album\u003C\u002Fli>\n\u003Cli>\u003Cstrong>mode\u003C\u002Fstrong> – [carousel | gallery-player] setup decorator mode, default id \u003Ccode>gallery-player\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>width\u003C\u002Fstrong> – [int | ‘auto’] set widget width in pixel or “auto” to stretch to 100%\u003C\u002Fli>\n\u003Cli>\u003Cstrong>height\u003C\u002Fstrong> – [int | ‘auto’] set widget height in pixels or “auto” to stretch to 100%\u003C\u002Fli>\n\u003Cli>\u003Cstrong>image-width\u003C\u002Fstrong> – [int] image max-width in pixels, default is 1920\u003C\u002Fli>\n\u003Cli>\u003Cstrong>image-height\u003C\u002Fstrong> – [int] image max-height in pixels, default is 1080\u003C\u002Fli>\n\u003Cli>\u003Cstrong>autoplay\u003C\u002Fstrong> – [true | false] start slideshow in normal view (currently not allowed by decorator)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>delay\u003C\u002Fstrong> – [true | false] slideshow delay in seconds, default is 5 seconds.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>repeat\u003C\u002Fstrong> – [true | false] Enable or disable repeat slideshow, delfault is \u003Ccode>true\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>mediaitems-aspectration\u003C\u002Fstrong> – [true | false], Keep asspect ration of images delfault is \u003Ccode>true\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>mediaitems-enlarge\u003C\u002Fstrong> – [true | false], Turn on\u002Foff image enlarge, delfault is \u003Ccode>true\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>mediaitems-stretch\u003C\u002Fstrong> – [true | false], Tunr on\u002Foff image stretch, delfault is \u003Ccode>true\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>mediaitems-cover\u003C\u002Fstrong> – [true | false], Cover full canvas. Combine with aspect ratio parameter. Delfault is \u003Ccode>false\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>background-color\u003C\u002Fstrong> – [#RRGGBB | transparent], Setup background color to RGB or transparent. Default is \u003Ccode>#000000\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>expiration\u003C\u002Fstrong> – [int] setup expiration timeout in secons; default is 0; min. custom value is 86400s (experimental property)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>This widget, unsupported some features like a picture’s timestamp and captions. For a more detailed description of the component, go to \u003Ca href=\"https:\u002F\u002Fwww.publicalbum.org\u002Fblog\u002Fwordpress-google-photos-album-plugin\" rel=\"nofollow ugc\">WordPress Google Photos album plugin\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>In some cases, it may be better to use the following code directly in the template.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u003C?php\n    echo (new Pavex_embed_google_photos_album()) -> getcode(\n        'https:\u002F\u002Fphotos.app.goo.gl\u002FCSV7NDstShTUwUZq5', 0, 480, 1920, 1080\n    );\n?>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>How do I update my album?\u003C\u002Fh3>\n\u003Cp>The album will update automatically as soon as you save or update your post.\u003C\u002Fp>\n\u003Ch3>Javascript decorator\u003C\u002Fh3>\n\u003Cp>External javascript decorator is stored on CDN and loading and running of them is \u003Cstrong>optimized for performance\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Cp>Javascript widget can be used without photos from Google photos. Detailed information on how to use javascript is available in one of older posts about \u003Ca href=\"https:\u002F\u002Fwww.publicalbum.org\u002Fblog\u002Fcarousel-slideshow-gallery-widget-july-update\" rel=\"nofollow ugc\">carusel slideshow\u003C\u002Fa> on my blog.\u003C\u002Fp>\n\u003Ch3>About Public album photo sharing website\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Public album\u003C\u002Fstrong> is now a \u003Ca href=\"https:\u002F\u002Fwww.publicalbum.org\u002Fblog\u002Fphoto-sharing-website\" rel=\"nofollow ugc\">photo sharing website\u003C\u002Fa> and service for sharing short photosets available in single user profile.\u003C\u002Fp>\n\u003Cp>The service can also be used as an alternative to \u003Ca href=\"https:\u002F\u002Fwww.publicalbum.org\u002Fblog\u002Fpublic-google-photos\" rel=\"nofollow ugc\">public Google Photos\u003C\u002Fa>. It is very suitable for the blogs focused mainly on photos. For example, a \u003Cstrong>photoblog\u003C\u002Fstrong> or a \u003Ca href=\"https:\u002F\u002Fwww.reabr.com\" rel=\"nofollow ugc\">\u003Cstrong>online bookmark manager\u003C\u002Fstrong>\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3>Important links\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>Public album sharing website\u003C\u002Fstrong> \u003Ca href=\"https:\u002F\u002Fwww.publicalbum.org\" rel=\"nofollow ugc\">https:\u002F\u002Fwww.publicalbum.org\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Blog\u003C\u002Fstrong> \u003Ca href=\"https:\u002F\u002Fwww.publicalbum.org\u002Fblog\" rel=\"nofollow ugc\">https:\u002F\u002Fwww.publicalbum.org\u002Fblog\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Facebook\u003C\u002Fstrong> \u003Ca href=\"https:\u002F\u002Fwww.facebook.com\u002Fpublicalbumapp\" rel=\"nofollow ugc\">https:\u002F\u002Fwww.facebook.com\u002Fpublicalbumapp\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Reabr.com\u003C\u002Fstrong> \u003Ca href=\"https:\u002F\u002Fwww.reabr.com\" rel=\"nofollow ugc\">online bookmark manager\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n","Embed Google Photos album using Player widget.",4000,45666,88,15,"2024-03-19T10:32:00.000Z","6.4.8","5.3",[54,55,56,23,57],"carousel-slideshow","embed-gallery","embed-google-photos","wordpress-carousel","https:\u002F\u002Fwww.publicalbum.org\u002Fblog\u002Fembedding-google-photos-albums","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fembed-google-photos-album-easily.zip",84,"2024-04-22 00:00:00",{"slug":63,"name":64,"version":65,"author":66,"author_profile":67,"description":68,"short_description":69,"active_installs":70,"downloaded":71,"rating":72,"num_ratings":73,"last_updated":74,"tested_up_to":75,"requires_at_least":76,"requires_php":77,"tags":78,"homepage":80,"download_link":81,"security_score":82,"vuln_count":14,"unpatched_count":28,"last_vuln_date":83,"fetched_at":30},"simple-google-photos-grid","Simple Google Photos Grid","1.6","josheli","https:\u002F\u002Fprofiles.wordpress.org\u002Fuwonder\u002F","\u003Cp>A simple, no-frills solution to display a Google Photos album on your site using a widget or a shortcode. There is only one layout option: grid. There is only one required attribute: album url. That’s it, that easy. \u003Ca href=\"https:\u002F\u002Fjosheli.com\u002Fknob\u002F2017\u002F11\u002F21\u002Fsimple-google-photos-a-wordpress-plugin\u002F\" rel=\"nofollow ugc\">See a demo and read more about the plugin\u003C\u002Fa>. The code is also \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdatvance\u002Fsimple-google-photos-grid\" rel=\"nofollow ugc\">available on Github\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3>Notes\u003C\u002Fh3>\n\u003Cp>Your album on Google Photos must be “public”, which means you need to go into Google Photos on the web and set “Sharing options” to on, i.e. “Anyone with the link can see these photos and the people who’ve been invited or joined.”\u003C\u002Fp>\n\u003Cp>Requires curl or similar to fetch the photo urls.\u003C\u002Fp>\n\u003Cp>No support is provided. Probably no features will be added. You are free to ask, or to fork. Pull requests accepted.\u003C\u002Fp>\n\u003Ch3>Widget\u003C\u002Fh3>\n\u003Cp>Go to Appearance -> Widgets and a new widget named Simple Google Photos Grid should be available to use. Drag to your desired widget area and configure.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Title: Heading of the widget on your site. Default to empty.\u003C\u002Fli>\n\u003Cli>Album URL: The full URL to your public gallery on Google Photos. URL must use one of the following domains: ‘photos.app.goo.gl’ or ‘photos.google.com’. Ideally should be the short, “shared” link (such as https:\u002F\u002Fphotos.app.goo.gl\u002FG8EOLs5YtESchh4g1z).\u003C\u002Fli>\n\u003Cli>Num Photos to Show: Even numbers probably work best. There’s a maximum number, not sure what it is, but it’s pretty low.\u003C\u002Fli>\n\u003Cli>Num Photos per Row: How many photos to show per row? Probably some number that works well with Num Photos.\u003C\u002Fli>\n\u003Cli>Cache Interval (in minutes): How long to cache photo URLs before checking the album on Google again. 0 for no cache.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Shortcode\u003C\u002Fh3>\n\u003Cp>Place the shortcode in a post, page or theme.\u003Cbr \u002F>\n    [simple_google_photos_grid album-url=”https:\u002F\u002Fphotos.app.goo.gl\u002FG8EOLs5YtESchh4g1″]\u003C\u002Fp>\n\u003Cp>Available attributes are:\u003Cbr \u002F>\n– album-url: (required) the url to a public Google Photos album, domain must be one of ‘photos.app.goo.gl’ or ‘photos.google.com’\u003Cbr \u002F>\n– number-photos: (optional) number of photos to display, defaults to 4\u003Cbr \u002F>\n– number-photos-per-row: (optional) number of photos per row, defaults to 2\u003Cbr \u002F>\n– cache-interval: (optional) length, in minutes, to cache the photo urls retrieved from Google, defaults to 15\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[simple_google_photos_grid album-url=\"https:\u002F\u002Fphotos.app.goo.gl\u002FG8EOLs5YtESchh4g1\" number-photos=\"6\" number-photos-per-row=\"3\" cache-interval=\"120\"]\n\u003C\u002Fcode>\u003C\u002Fpre>\n","Provides a widget and shortcode to display photos from a public Google Photos album in a simple grid.",1000,10730,90,2,"2025-05-04T22:52:00.000Z","6.8.5","4.0","",[20,22,23,79],"photos","https:\u002F\u002Fgithub.com\u002Fdatvance\u002Fsimple-google-photos-grid","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fsimple-google-photos-grid.zip",99,"2025-04-24 00:00:00",{"slug":85,"name":86,"version":87,"author":88,"author_profile":89,"description":90,"short_description":91,"active_installs":92,"downloaded":93,"rating":28,"num_ratings":28,"last_updated":94,"tested_up_to":75,"requires_at_least":17,"requires_php":95,"tags":96,"homepage":98,"download_link":99,"security_score":27,"vuln_count":28,"unpatched_count":28,"last_vuln_date":29,"fetched_at":30},"fast-image-gallery-for-google-photos","Fast Image Gallery by Google Photos","1.0.5","techiereviewstuts","https:\u002F\u002Fprofiles.wordpress.org\u002Ftechiereviewstuts\u002F","\u003Cp>The Fast Image Gallery by Google Photos offers a seamless solution for integrating beautiful Google Photos galleries directly into your WordPress website. With its intuitive interface and robust functionality, this plugin simplifies the process of showcasing your photos and galleries in a visually stunning way. Whether you’re a photographer, blogger, or business owner, this plugin provides a convenient and efficient way to share your visual content with your audience. With features like customizable layouts, responsive design, and easy-to-use settings, you can effortlessly create and manage your Google Photos galleries with ease. Say goodbye to complex embedding codes and manual updates – streamline your workflow and enhance your website’s visual appeal with the Embed Google Photos plugin.\u003C\u002Fp>\n\u003Ch4>Features\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Display all photos from Google Photos.\u003C\u002Fli>\n\u003Cli>Show all albums contained within Google Photos.\u003C\u002Fli>\n\u003Cli>Display photos from specific albums.\u003C\u002Fli>\n\u003Cli>Customize the layout columns with various options.\u003C\u002Fli>\n\u003Cli>Set image aspect ratios.\u003C\u002Fli>\n\u003Cli>Customize the “Load More” button’s color, typography, border, and padding.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Usage\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Create a post or page and add the shortcode:\u003C\u002Fli>\n\u003Cli>\u003Ccode>[figgp_gallery url=\"YOUR_GALLERY_URL\"]\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Optional parameters: \u003Ccode>columns\u003C\u002Fcode>, \u003Ccode>rows\u003C\u002Fcode>, \u003Ccode>size\u003C\u002Fcode>, \u003Ccode>spacing\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>Example: \u003Ccode>[figgp_gallery url=\"https:\u002F\u002Fphotos.app.goo.gl\u002Fexample\" columns=\"3\" rows=\"2\" size=\"medium\" spacing=\"10\"]\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Feedback\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Liked the plugin? Hate it? Want a new feature? Please use the WordPress.org support forum once the plugin is published.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>External Services\u003C\u002Fh3>\n\u003Cp>This plugin relies on the Google Photos API to fetch and display your photos and albums.\u003Cbr \u002F>\n– \u003Cstrong>Service:\u003C\u002Fstrong> Google Photos API\u003Cbr \u002F>\n– \u003Cstrong>Usage:\u003C\u002Fstrong> Used to retrieve your albums and media items (photos\u002Fvideos) to display them in the gallery.\u003Cbr \u002F>\n– \u003Cstrong>Data Sent:\u003C\u002Fstrong> Requests are sent to Google servers containing your API key or OAuth token to authenticate and fetch your data. No user data is sent to the plugin author’s servers.\u003Cbr \u002F>\n– \u003Cstrong>Terms of Service:\u003C\u002Fstrong> \u003Ca href=\"https:\u002F\u002Fdevelopers.google.com\u002Fphotos\u002Fterms\" rel=\"nofollow ugc\">Google Photos API Terms\u003C\u002Fa>\u003Cbr \u002F>\n– \u003Cstrong>Privacy Policy:\u003C\u002Fstrong> \u003Ca href=\"https:\u002F\u002Fpolicies.google.com\u002Fprivacy\" rel=\"nofollow ugc\">Google Privacy Policy\u003C\u002Fa>\u003C\u002Fp>\n","Embed stunning Google Photos galleries directly into your WordPress site with the Fast Image Gallery by Google Photos.",10,166,"2025-12-11T19:03:00.000Z","7.4",[21,22,23,79,97],"shortcode","https:\u002F\u002Fwww.kataskeuastisistoselidon.gr\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Ffast-image-gallery-for-google-photos.1.0.5.zip",{"slug":101,"name":102,"version":103,"author":104,"author_profile":105,"description":106,"short_description":107,"active_installs":92,"downloaded":108,"rating":28,"num_ratings":28,"last_updated":109,"tested_up_to":110,"requires_at_least":76,"requires_php":77,"tags":111,"homepage":115,"download_link":116,"security_score":117,"vuln_count":28,"unpatched_count":28,"last_vuln_date":29,"fetched_at":30},"grisha-gplus-gallery","Grisha's GPlus Gallery Shortcode","4.3.1.2","Grigory Metlenko","https:\u002F\u002Fprofiles.wordpress.org\u002Fgrigory-metlenko\u002F","\u003Cp>Shortcode that lets you display your public Google Albums as a photo gallery on your website\u003C\u002Fp>\n","Shortcode that lets you display your public Google Albums as a photo gallery on your website",1751,"2015-12-11T23:23:00.000Z","4.3.34",[22,23,112,113,114],"google-plus","photo-albums","picasa","http:\u002F\u002Fgoogle.com\u002F+GrigoryMetlenko","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fgrisha-gplus-gallery.4.3.1.2.zip",85,{"slug":119,"name":120,"version":121,"author":122,"author_profile":123,"description":124,"short_description":125,"active_installs":126,"downloaded":127,"rating":128,"num_ratings":129,"last_updated":130,"tested_up_to":16,"requires_at_least":131,"requires_php":132,"tags":133,"homepage":138,"download_link":139,"security_score":140,"vuln_count":141,"unpatched_count":28,"last_vuln_date":142,"fetched_at":30},"simply-gallery-block","Mixed Media Gallery Blocks","3.3.2.3","GalleryCreator","https:\u002F\u002Fprofiles.wordpress.org\u002Fgallerycreator\u002F","\u003Ch4>Blocks\u003C\u002Fh4>\n\u003Cp>SimpLy Gallery Blocks is a friendly, easy-to-use gallery plugin with advanced options for creating responsive image, video, and audio galleries in multiple layouts, including Slider \u002F Carousel, Masonry, Justified, Grid, and more.\u003C\u002Fp>\n\u003Ch4>Albums\u003C\u002Fh4>\n\u003Cp>Combine multiple galleries into a single album with a dedicated splash page. Albums work as gallery collections, allowing you to group related galleries under one entry point.\u003C\u002Fp>\n\u003Cp>Each gallery inside an album is loaded dynamically via AJAX and opened in a modal view, so visitors can browse galleries directly from the album splash page without reloading the page, keeping navigation fast and seamless.\u003C\u002Fp>\n\u003Ch4>Lightbox Plugin\u003C\u002Fh4>\n\u003Cp>SimpLy Lightbox Plugin easily displays all linked images from a post or page in highly customizable lightbox. Compatible with native WordPress gallery (Block or Classic Editor). Each Post or Page can have a unique lightbox setting.\u003C\u002Fp>\n\u003Ch3>Links\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fsimplygallery.co\u002F\" rel=\"nofollow ugc\">Masonry, Justified, Grid, Slider, Viewer Gallery Blocks – Live DEMO\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fsimplygallery.co\u002Falbum-navigator\u002F\" rel=\"nofollow ugc\">Album Navigator Block – Live DEMO\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fsimplygallery.co\u002Falbum-beginning\u002F\" rel=\"nofollow ugc\">Albums Block – Live DEMO\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fsimplygallery.co\u002Fsimply-viewer\u002F\" rel=\"nofollow ugc\">Viewer Gallery Block – Live DEMO\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fsimplygallery.co\u002Fshowcase-gallery-block\u002F\" rel=\"nofollow ugc\">Premium Showcase Gallery Block – Live DEMO\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fsimplygallery.co\u002Fdiamond\u002F\" rel=\"nofollow ugc\">Premium Diamond Gallery Block – Live DEMO\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fsimplygallery.co\u002Fhorizon-premium-gallery-block\u002F\" rel=\"nofollow ugc\">Premium Horizon Gallery Block – Live DEMO\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fsimplygallery.co\u002Fsplit-carousel\u002F\" rel=\"nofollow ugc\">Premium Split Carousel Block – Live DEMO\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fsimplygallery.co\u002Ftagsbox-covers-gallery\u002F\" rel=\"nofollow ugc\">Premium TagsBox Block – Live DEMO\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fsimplygallery.co\u002Fportfolio-premium-block\u002F\" rel=\"nofollow ugc\">Premium Portfolio Block – Live DEMO\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fsimplygallery.co\u002Fgrid-tags-filter\u002F\" rel=\"nofollow ugc\">Tags Filter – Live DEMO\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fsimplygallery.co\u002Fsimply-slider-carousel\u002F\" rel=\"nofollow ugc\">SimpLy Slider \u002F Carousel – Live DEMO\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fsimplygallery.co\u002Fportfolio2-youtube-vimeo-mp4\u002F\" rel=\"nofollow ugc\">YouTube and Vimeo Gallery – DEMO\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fsimplygallery.co\u002Fsimply-lightbox\u002F\" rel=\"nofollow ugc\">SimpLy Lightbox and WordPress Native Gallery – DEMO\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Features\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Albums\u003C\u002Fli>\n\u003Cli>Build dynamic video galleries by simply adding a \u003Ca href=\"https:\u002F\u002Fsimplygallery.co\u002Fyoutube-playlist\u002F\" rel=\"nofollow ugc\">YouTube Playlist\u003C\u002Fa> *PRO\u003C\u002Fli>\n\u003Cli>Build dynamic Vimeo video galleries by simply adding a \u003Ca href=\"https:\u002F\u002Fsimplygallery.co\u002Fvimeo-showcase\u002F\" rel=\"nofollow ugc\">Video Showcase \u002F Album, User Uploads, Channel or Category\u003C\u002Fa> *PRO\u003C\u002Fli>\n\u003Cli>Advanced Tags Filter. DeepLinking for tags. Filter without button “All” \u003Ca href=\"https:\u002F\u002Fsimplygallery.co\u002Fadvanced-tag-filter\u002F\" rel=\"nofollow ugc\">Demo\u003C\u002Fa> *PLUS\u002FPRO\u003C\u002Fli>\n\u003Cli>WooCommerce Products list, Categories and Tags – \u003Ca href=\"https:\u002F\u002Fsimplygallery.co\u002Fwoocommerce-products-gallery\u002F\" rel=\"nofollow ugc\">Dynamic Gallery *PRO\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Media Library Assistant.  Att. Cattegory and Att. Tag – Dynamic Gallery *PRO\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fsimplygallery.co\u002Ffilebird-folders-in-media-library\u002F\" rel=\"nofollow ugc\">FileBird Media Folders – Dynamic Gallery *PRO\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fsimplygallery.co\u002Ftags-filter\u002F\" rel=\"nofollow ugc\">Tags Filter\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Poster generator for a self-hosted video (.mp4). Just select a frame and set it as a featured image for your video.\u003C\u002Fli>\n\u003Cli>Hidden Gallery\u003C\u002Fli>\n\u003Cli>Supports Photo, Video \u003Cem>MP4, YouTube, Vimeo and Audio *MP3 Lightbox is enabled by default\u003C\u002Fem>\u003C\u002Fli>\n\u003Cli>HTML5 Browser History support – Deep linking. Disabled by default*\u003C\u002Fli>\n\u003Cli>Lightbox – Mouse wheel navigation and Fading Transition\u003C\u002Fli>\n\u003Cli>Automatic SlideShow support (with CountDown timer)\u003C\u002Fli>\n\u003Cli>Multi-touch gestures support\u003C\u002Fli>\n\u003Cli>Thumbnails support\u003C\u002Fli>\n\u003Cli>Fully Responsive\u003C\u002Fli>\n\u003Cli>Mobile Friendly\u003C\u002Fli>\n\u003Cli>Unlimited colors\u003C\u002Fli>\n\u003Cli>SVG icon\u003C\u002Fli>\n\u003Cli>Physics Based Animations\u003C\u002Fli>\n\u003Cli>FullScreen support\u003C\u002Fli>\n\u003Cli>Browser features control (scrollbar, mousewheel, right click prevention)\u003C\u002Fli>\n\u003Cli>Inactive State detection\u003C\u002Fli>\n\u003Cli>Smart Resizing\u003C\u002Fli>\n\u003Cli>HTML Caption (Attachment Caption or Alternative Text)\u003C\u002Fli>\n\u003Cli>Keyboard and mouse wheel support (navigate and zoom)\u003C\u002Fli>\n\u003Cli>Social Sharing (Facebook, Twitter, Pinterest)\u003C\u002Fli>\n\u003Cli>Smart Loading\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Flexible gallery building\u003C\u002Fh3>\n\u003Cp>Mixed Media Gallery Blocks provides a flexible gallery building experience for images, video, and audio. Add media items to your gallery, adjust display settings, and publish galleries using different layouts depending on your content needs.\u003C\u002Fp>\n\u003Ch3>Transformable gallery layouts\u003C\u002Fh3>\n\u003Cp>Galleries can be transformed between different layouts such as Masonry, Grid, Justified, and fullscreen views. This allows you to reuse the same gallery content while changing its visual presentation without rebuilding it.\u003C\u002Fp>\n\u003Ch3>Responsive by design\u003C\u002Fh3>\n\u003Cp>Gallery layouts are responsive by default and adapt to different screen sizes. Separate styling controls for desktop and mobile help ensure galleries remain usable and visually consistent across devices.\u003C\u002Fp>\n\u003Ch3>Lightbox experience\u003C\u002Fh3>\n\u003Cp>The built-in lightbox supports touch gestures, keyboard navigation, and mouse wheel controls. Users can navigate, zoom, and interact with gallery items on both desktop and mobile devices.\u003C\u002Fp>\n\u003Cp>The lightbox interface is designed to be familiar and intuitive, making it easy for visitors to browse media content without leaving the page.\u003C\u002Fp>\n\u003Ch3>Performance-focused\u003C\u002Fh3>\n\u003Cp>The plugin is designed with performance in mind, using dynamic loading and optimized rendering to keep galleries responsive and pages lightweight.\u003C\u002Fp>\n\u003Ch3>A short demo of SimpLy Gallery Blocks\u003C\u002Fh3>\n\u003Cp>In this video you will see how easily you can create photo gallery using SGB Gutenberg photo gallery block.\u003Cbr \u002F>\n\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FYEFVCGdTwtM?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\u003Cbr \u002F>\nPlease note that you easily convert block gallery from Masonry to Justified or to Grid or to WordPress image gallery and vice versa.\u003C\u002Fp>\n\u003Ch4>Included Gallery Gutenberg Blocks\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Albums Block\u003C\u002Fli>\n\u003Cli>Slider \u002F Carousel Gallery Block\u003C\u002Fli>\n\u003Cli>Masonry Gallery Block\u003C\u002Fli>\n\u003Cli>Justified Block\u003C\u002Fli>\n\u003Cli>Grid Block\u003C\u002Fli>\n\u003C\u002Ful>\n","Create mixed media galleries with images, HTML5 video, YouTube, Vimeo, and VideoPress — all in one gallery by Simply Gallery.",40000,1073876,96,114,"2026-03-09T09:10:00.000Z","6.6","5.3.8",[20,134,135,136,137],"audio-gallery","lightbox","media-gallery","video-gallery","https:\u002F\u002Fsimplygallery.co\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fsimply-gallery-block.3.3.2.3.zip",92,7,"2025-12-12 15:46:53",{"attackSurface":144,"codeSignals":198,"taintFlows":267,"riskAssessment":317,"analyzedAt":325},{"hooks":145,"ajaxHandlers":177,"restRoutes":190,"shortcodes":191,"cronEvents":196,"entryPointCount":197,"unprotectedCount":28},[146,152,156,160,165,168,173],{"type":147,"name":148,"callback":149,"file":150,"line":151},"action","wp_enqueue_scripts","enqueue_assets","includes\\class-orchestrator.php",127,{"type":147,"name":153,"callback":154,"file":150,"line":155},"save_post","clear_cache",128,{"type":147,"name":157,"callback":158,"file":150,"line":159},"admin_enqueue_scripts","enqueue_admin_assets",136,{"type":147,"name":161,"callback":162,"file":163,"line":164},"admin_menu","add_settings_page","includes\\class-settings-page.php",24,{"type":147,"name":157,"callback":166,"file":163,"line":167},"enqueue_admin_styles",25,{"type":147,"name":169,"callback":170,"file":171,"line":172},"init","jzsa_init_plugin","janzeman-shared-albums-for-google-photos.php",50,{"type":147,"name":174,"callback":175,"file":171,"line":176},"admin_init","jzsa_activation_redirect",86,[178,184,186],{"action":179,"nopriv":180,"callback":181,"hasNonce":182,"hasCapCheck":180,"file":150,"line":183},"jzsa_download_image",false,"handle_download_image",true,129,{"action":179,"nopriv":182,"callback":181,"hasNonce":182,"hasCapCheck":180,"file":150,"line":185},130,{"action":187,"nopriv":180,"callback":188,"hasNonce":182,"hasCapCheck":182,"file":150,"line":189},"jzsa_shortcode_preview","handle_shortcode_preview",131,[],[192],{"tag":193,"callback":194,"file":150,"line":195},"jzsa-album","handle_shortcode",126,[],4,{"dangerousFunctions":199,"sqlUsage":200,"outputEscaping":207,"fileOperations":28,"externalRequests":73,"nonceChecks":73,"capabilityChecks":73,"bundledLibraries":266},[],{"prepared":28,"raw":73,"locations":201},[202,205],{"file":171,"line":203,"context":204},60,"$wpdb->query() with variable interpolation",{"file":171,"line":206,"context":204},113,{"escaped":208,"rawEcho":209,"locations":210},76,27,[211,214,216,218,220,222,224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,254,256,258,260,262,264],{"file":150,"line":212,"context":213},1010,"raw output",{"file":163,"line":215,"context":213},258,{"file":163,"line":217,"context":213},277,{"file":163,"line":219,"context":213},292,{"file":163,"line":221,"context":213},307,{"file":163,"line":223,"context":213},322,{"file":163,"line":225,"context":213},337,{"file":163,"line":227,"context":213},352,{"file":163,"line":229,"context":213},367,{"file":163,"line":231,"context":213},382,{"file":163,"line":233,"context":213},397,{"file":163,"line":235,"context":213},412,{"file":163,"line":237,"context":213},427,{"file":163,"line":239,"context":213},442,{"file":163,"line":241,"context":213},457,{"file":163,"line":243,"context":213},472,{"file":163,"line":245,"context":213},487,{"file":163,"line":247,"context":213},502,{"file":163,"line":249,"context":213},517,{"file":163,"line":251,"context":213},532,{"file":163,"line":253,"context":213},547,{"file":163,"line":255,"context":213},562,{"file":163,"line":257,"context":213},577,{"file":163,"line":259,"context":213},592,{"file":163,"line":261,"context":213},607,{"file":163,"line":263,"context":213},983,{"file":163,"line":265,"context":213},1007,[],[268,303],{"entryPoint":269,"graph":270,"unsanitizedCount":28,"severity":302},"handle_download_image (includes\\class-orchestrator.php:926)",{"nodes":271,"edges":298},[272,277,283,287,292,294],{"id":273,"type":274,"label":275,"file":150,"line":276},"n0","source","$_POST",940,{"id":278,"type":279,"label":280,"file":150,"line":281,"wp_function":282},"n1","sink","wp_remote_get() [SSRF]",957,"wp_remote_get",{"id":284,"type":274,"label":285,"file":150,"line":286},"n2","$_POST (x2)",941,{"id":288,"type":279,"label":289,"file":150,"line":290,"wp_function":291},"n3","header() [Header Injection]",1003,"header",{"id":293,"type":274,"label":275,"file":150,"line":276},"n4",{"id":295,"type":279,"label":296,"file":150,"line":212,"wp_function":297},"n5","echo() [XSS]","echo",[299,300,301],{"from":273,"to":278,"sanitized":182},{"from":284,"to":288,"sanitized":182},{"from":293,"to":295,"sanitized":182},"low",{"entryPoint":304,"graph":305,"unsanitizedCount":28,"severity":302},"\u003Cclass-orchestrator> (includes\\class-orchestrator.php:0)",{"nodes":306,"edges":313},[307,308,309,310,311,312],{"id":273,"type":274,"label":275,"file":150,"line":276},{"id":278,"type":279,"label":280,"file":150,"line":281,"wp_function":282},{"id":284,"type":274,"label":285,"file":150,"line":286},{"id":288,"type":279,"label":289,"file":150,"line":290,"wp_function":291},{"id":293,"type":274,"label":275,"file":150,"line":276},{"id":295,"type":279,"label":296,"file":150,"line":212,"wp_function":297},[314,315,316],{"from":273,"to":278,"sanitized":182},{"from":284,"to":288,"sanitized":182},{"from":293,"to":295,"sanitized":182},{"summary":318,"deductions":319},"The janzeman-shared-albums-for-google-photos plugin, version 1.0.7, exhibits a generally good security posture based on the static analysis. A key strength is the complete absence of unprotected entry points, with all AJAX handlers and REST API routes appearing to have appropriate authentication and capability checks. The lack of dangerous functions, file operations, and critical\u002Fhigh severity taint flows further contributes to its positive security profile.  The plugin also demonstrates good practices by implementing nonce checks and capability checks on its entry points, and a high percentage of output escaping.",[320,322],{"reason":321,"points":92},"SQL queries not using prepared statements",{"reason":323,"points":324},"Output escaping is not 100%",5,"2026-03-16T22:47:18.053Z",{"wat":327,"direct":342},{"assetPaths":328,"generatorPatterns":333,"scriptPaths":334,"versionParams":337},[329,330,331,332],"\u002Fwp-content\u002Fplugins\u002Fjanzeman-shared-albums-for-google-photos\u002Fassets\u002Fcss\u002Fjzsa-frontend.css","\u002Fwp-content\u002Fplugins\u002Fjanzeman-shared-albums-for-google-photos\u002Fassets\u002Fjs\u002Fjzsa-frontend.js","\u002Fwp-content\u002Fplugins\u002Fjanzeman-shared-albums-for-google-photos\u002Fassets\u002Fvendor\u002Fswiper\u002Fswiper-bundle.min.css","\u002Fwp-content\u002Fplugins\u002Fjanzeman-shared-albums-for-google-photos\u002Fassets\u002Fvendor\u002Fswiper\u002Fswiper-bundle.min.js",[],[335,336],"assets\u002Fvendor\u002Fswiper\u002Fswiper-bundle.min.js","assets\u002Fjs\u002Fjzsa-frontend.js",[338,339,340,341],"janzeman-shared-albums-for-google-photos\u002Fassets\u002Fcss\u002Fjzsa-frontend.css?ver=","janzeman-shared-albums-for-google-photos\u002Fassets\u002Fjs\u002Fjzsa-frontend.js?ver=","janzeman-shared-albums-for-google-photos\u002Fassets\u002Fvendor\u002Fswiper\u002Fswiper-bundle.min.css?ver=","janzeman-shared-albums-for-google-photos\u002Fassets\u002Fvendor\u002Fswiper\u002Fswiper-bundle.min.js?ver=",{"cssClasses":343,"htmlComments":355,"htmlAttributes":402,"restEndpoints":414,"jsGlobals":416,"shortcodeOutput":419},[344,345,346,347,348,349,350,351,352,353,354],"jzsa-album-wrapper","jzsa-album-gallery","jzsa-album-caption","jzsa-album-navigation","jzsa-album-pagination","jzsa-album-button-prev","jzsa-album-button-next","jzsa-album-scrollbar","jzsa-photo-container","jzsa-photo-image","jzsa-loading-indicator",[356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,363,396,397,398,399,400,381,401,356,364,366,367,368,369,370,371,372,373,374,375,376,377,378,379],"\u003C!-- Main Plugin Orchestrator -->","\u003C!-- Smart Caching Strategy:","\u003C!-- Cache key based on MD5(URL) for global album caching -->","\u003C!-- Stores only base photo URLs (without dimensions) in cache -->","\u003C!-- Tracks cache expiration separately in wp_options -->","\u003C!-- Allows same album to be reused across multiple posts -->","\u003C!-- Invalidates cache if CACHE_DURATION constant changes -->","\u003C!-- Exit if accessed directly -->","\u003C!-- Constructor - Initialize plugin -->","\u003C!-- Enqueue front-end gallery assets on the plugin's settings page in admin. -->","\u003C!-- Enqueue CSS and JavaScript assets -->","\u003C!-- Swiper library (bundled locally) -->","\u003C!-- Custom assets -->","\u003C!-- AJAX action to download image -->","\u003C!-- AJAX action to preview shortcode -->","\u003C!-- Frontend assets for the settings page -->","\u003C!-- Loads assets necessary for the shortcode preview on the settings page -->","\u003C!-- Shortcode [jzsa-album] -->","\u003C!-- Retrieve album data based on URL -->","\u003C!-- Render the album gallery -->","\u003C!-- Prepare data for the shortcode preview -->","\u003C!-- Fetch image data for download -->","\u003C!-- Generate a unique cache key for the album URL -->","\u003C!-- Clear transient cache for a specific album -->","\u003C!-- Clear all plugin transients on deactivation. -->","\u003C!-- Activation hook -->","\u003C!-- Clear any cached album data on activation. -->","\u003C!-- Set a transient to redirect to settings page after activation -->","\u003C!-- Redirect to settings page after activation -->","\u003C!-- Only do this once after activation -->","\u003C!-- Don't redirect if activating multiple plugins at once -->","\u003C!-- Redirect to settings page -->","\u003C!-- Add Settings link to plugin listing page -->","\u003C!-- Plugin Name: Shared Albums for Google Photos (by JanZeman) -->","\u003C!-- Plugin URI: https:\u002F\u002Fgithub.com\u002FJanZeman\u002Fshared-albums-for-google-photos -->","\u003C!-- Author URI: https:\u002F\u002Fgithub.com\u002FJanZeman -->","\u003C!-- Description: Display publicly shared Google Photos albums with a modern Swiper-based gallery viewer. Not affiliated with or endorsed by Google LLC. -->","\u003C!-- License URI: https:\u002F\u002Fwww.gnu.org\u002Flicenses\u002Fgpl-2.0.html -->","\u003C!-- Text Domain: janzeman-shared-albums-for-google-photos -->","\u003C!-- Domain Path: \u002Flanguages -->","\u003C!-- Define plugin constants -->","\u003C!-- Load plugin classes -->","\u003C!-- Initialize the plugin -->","\u003C!-- Initialize the main orchestrator with plugin file path -->","\u003C!-- Initialize settings page (admin only) -->","\u003C!-- Deactivation hook -->",[403,404,405,406,407,408,409,410,411,412,413],"data-album-url","data-max-photos","data-gallery-width","data-gallery-height","data-autoplay-delay","data-fullscreen-autoplay-delay","data-autoplay-inactivity-timeout","data-lazyload","data-photo-url","data-caption","data-download-url",[415],"\u002Fwp-json\u002Fjzsa\u002Fv1\u002Falbum",[417,418],"jzsa_frontend_data","JZSA_Swiper",[420,421,422,423,424,425,426,427,428,429,430],"\u003Cdiv class=\"jzsa-album-wrapper\" data-album-url","\u003Cdiv class=\"jzsa-album-gallery swiper\">","\u003Cdiv class=\"swiper-wrapper\">","\u003Cdiv class=\"swiper-slide jzsa-photo-container\">","\u003Cimg class=\"jzsa-photo-image\" src","\u003Cdiv class=\"jzsa-album-caption\">","\u003Cdiv class=\"jzsa-album-navigation\">","\u003Cdiv class=\"jzsa-album-button-prev\">","\u003Cdiv class=\"jzsa-album-button-next\">","\u003Cdiv class=\"jzsa-album-pagination\">","\u003Cdiv class=\"jzsa-album-scrollbar\">"]