{"id":273213,"date":"2026-01-26T16:42:58","date_gmt":"2026-01-26T16:42:58","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/shared-google-photos\/"},"modified":"2026-04-15T17:11:44","modified_gmt":"2026-04-15T17:11:44","slug":"janzeman-shared-albums-for-google-photos","status":"publish","type":"plugin","link":"https:\/\/da.wordpress.org\/plugins\/janzeman-shared-albums-for-google-photos\/","author":15014516,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"2.1.5","stable_tag":"2.1.5","tested":"6.9.4","requires":"5.0","requires_php":"7.0","requires_plugins":null,"header_name":"Shared Albums for Google Photos (by JanZeman)","header_author":"Jan Zeman","header_description":"Display publicly shared Google Photos albums with a modern Swiper-based gallery viewer. Not affiliated with or endorsed by Google LLC.","assets_banners_color":"","last_updated":"2026-04-15 17:11:44","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/JanZeman\/shared-albums-for-google-photos","header_author_uri":"https:\/\/github.com\/JanZeman","rating":4.8,"author_block_rating":0,"active_installs":40,"downloads":1463,"num_ratings":5,"support_threads":12,"support_threads_resolved":12,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"janzeman","date":"2026-01-26 16:48:14"},"1.0.1":{"tag":"1.0.1","author":"janzeman","date":"2026-01-27 10:28:50"},"1.0.3":{"tag":"1.0.3","author":"janzeman","date":"2026-01-31 19:53:10"},"1.0.4":{"tag":"1.0.4","author":"janzeman","date":"2026-02-01 16:39:38"},"1.0.5":{"tag":"1.0.5","author":"janzeman","date":"2026-02-01 16:45:54"},"1.0.6":{"tag":"1.0.6","author":"janzeman","date":"2026-02-01 17:31:48"},"1.0.7":{"tag":"1.0.7","author":"janzeman","date":"2026-03-11 22:07:16"},"2.0.0":{"tag":"2.0.0","author":"janzeman","date":"2026-03-22 10:48:01"},"2.0.1":{"tag":"2.0.1","author":"janzeman","date":"2026-03-22 23:19:53"},"2.0.10":{"tag":"2.0.10","author":"janzeman","date":"2026-04-09 17:39:54"},"2.0.11":{"tag":"2.0.11","author":"janzeman","date":"2026-04-09 20:03:56"},"2.0.2":{"tag":"2.0.2","author":"janzeman","date":"2026-03-23 21:13:54"},"2.0.3":{"tag":"2.0.3","author":"janzeman","date":"2026-03-24 20:18:47"},"2.0.4":{"tag":"2.0.4","author":"janzeman","date":"2026-03-26 20:08:49"},"2.0.5":{"tag":"2.0.5","author":"janzeman","date":"2026-03-28 13:56:48"},"2.0.6":{"tag":"2.0.6","author":"janzeman","date":"2026-03-30 13:03:38"},"2.0.7":{"tag":"2.0.7","author":"janzeman","date":"2026-04-06 17:07:39"},"2.0.8":{"tag":"2.0.8","author":"janzeman","date":"2026-04-07 17:32:25"},"2.0.9":{"tag":"2.0.9","author":"janzeman","date":"2026-04-08 15:03:22"},"2.1.0":{"tag":"2.1.0","author":"janzeman","date":"2026-04-11 18:02:16"},"2.1.1":{"tag":"2.1.1","author":"janzeman","date":"2026-04-12 09:15:34"},"2.1.2":{"tag":"2.1.2","author":"janzeman","date":"2026-04-12 09:48:26"},"2.1.3":{"tag":"2.1.3","author":"janzeman","date":"2026-04-13 17:00:01"},"2.1.4":{"tag":"2.1.4","author":"janzeman","date":"2026-04-13 22:00:17"},"2.1.5":{"tag":"2.1.5","author":"janzeman","date":"2026-04-15 17:11:44"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":1,"5":4},"assets_icons":{"icon-256x256.gif":{"filename":"icon-256x256.gif","revision":3488383,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.0.3","1.0.4","1.0.5","1.0.6","1.0.7","2.0.0","2.0.1","2.0.10","2.0.11","2.0.2","2.0.3","2.0.4","2.0.5","2.0.6","2.0.7","2.0.8","2.0.9","2.1.0","2.1.1","2.1.2","2.1.3","2.1.4","2.1.5"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3505601,"resolution":"1","location":"assets","locale":""},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3505601,"resolution":"2","location":"assets","locale":""},"screenshot-3.jpg":{"filename":"screenshot-3.jpg","revision":3505601,"resolution":"3","location":"assets","locale":""},"screenshot-4.jpg":{"filename":"screenshot-4.jpg","revision":3505601,"resolution":"4","location":"assets","locale":""},"screenshot-5.jpg":{"filename":"screenshot-5.jpg","revision":3505601,"resolution":"5","location":"assets","locale":""},"screenshot-6.jpg":{"filename":"screenshot-6.jpg","revision":3505601,"resolution":"6","location":"assets","locale":""},"screenshot-7.jpg":{"filename":"screenshot-7.jpg","revision":3505601,"resolution":"7","location":"assets","locale":""},"screenshot-8.jpg":{"filename":"screenshot-8.jpg","revision":3505601,"resolution":"8","location":"assets","locale":""}},"screenshots":{"1":"Slider mode with navigation and paging","2":"Slider mode with mosaic strip","3":"Gallery mode","4":"Carousel mode (also shows the video capability)","5":"Fullscreen mode with description and EXIF info overlay","6":"From low- to high-resolution image support","7":"Shortcode example in page editor (with preview)","8":"Descripton with custom font"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[5719,230,210,21826,71207],"plugin_category":[50,56],"plugin_contributors":[254676],"plugin_business_model":[],"class_list":["post-273213","plugin","type-plugin","status-publish","hentry","plugin_tags-album","plugin_tags-embed","plugin_tags-gallery","plugin_tags-google-photos","plugin_tags-swiper","plugin_category-media","plugin_category-social-and-sharing","plugin_contributors-janzeman","plugin_committers-janzeman"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/janzeman-shared-albums-for-google-photos\/assets\/icon-256x256.gif?rev=3488383","icon_2x":"https:\/\/ps.w.org\/janzeman-shared-albums-for-google-photos\/assets\/icon-256x256.gif?rev=3488383","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/janzeman-shared-albums-for-google-photos\/assets\/screenshot-1.jpg?rev=3505601","caption":"Slider mode with navigation and paging"},{"src":"https:\/\/ps.w.org\/janzeman-shared-albums-for-google-photos\/assets\/screenshot-2.jpg?rev=3505601","caption":"Slider mode with mosaic strip"},{"src":"https:\/\/ps.w.org\/janzeman-shared-albums-for-google-photos\/assets\/screenshot-3.jpg?rev=3505601","caption":"Gallery mode"},{"src":"https:\/\/ps.w.org\/janzeman-shared-albums-for-google-photos\/assets\/screenshot-4.jpg?rev=3505601","caption":"Carousel mode (also shows the video capability)"},{"src":"https:\/\/ps.w.org\/janzeman-shared-albums-for-google-photos\/assets\/screenshot-5.jpg?rev=3505601","caption":"Fullscreen mode with description and EXIF info overlay"},{"src":"https:\/\/ps.w.org\/janzeman-shared-albums-for-google-photos\/assets\/screenshot-6.jpg?rev=3505601","caption":"From low- to high-resolution image support"},{"src":"https:\/\/ps.w.org\/janzeman-shared-albums-for-google-photos\/assets\/screenshot-7.jpg?rev=3505601","caption":"Shortcode example in page editor (with preview)"},{"src":"https:\/\/ps.w.org\/janzeman-shared-albums-for-google-photos\/assets\/screenshot-8.jpg?rev=3505601","caption":"Descripton with custom font"}],"raw_content":"<!--section=description-->\n<p>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.<\/p>\n\n<p><strong>Note:<\/strong> This plugin is not affiliated with or endorsed by Google LLC. Google Photos\u2122 is a trademark of Google LLC.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>Google Photos Gallery And Slider<\/strong> - Display public Google Photos albums as responsive galleries or sliders<\/li>\n<li><strong>Photo And Video Support<\/strong> - Supports both images and videos from shared Google Photos albums<\/li>\n<li><strong>Fullscreen Viewer<\/strong> - Mobile-friendly fullscreen viewing with touch gestures, keyboard controls, and slideshow support<\/li>\n<li><strong>Photo Info Overlays<\/strong> - Dynamic placeholders for counters, filenames, dimensions, dates, and EXIF data<\/li>\n<li><strong>Download And Link Buttons<\/strong> - Optional inline and fullscreen action buttons<\/li>\n<li><strong>Performance Features<\/strong> - Lazy loading, progressive loading, caching, and large album support<\/li>\n<li><strong>Shortcode Playground<\/strong> - Admin-only sandbox on the Settings page for experimenting with <code>[jzsa-album]<\/code> shortcodes and previews<\/li>\n<li><strong>Mosaic Strip<\/strong> - Optional mosaic thumbnail strip alongside the main viewer<\/li>\n<\/ul>\n\n<p>Many more customization parameters and samples are available on the plugin's Settings &amp; Onboarding page.<\/p>\n\n<h4>How It Works<\/h4>\n\n<p>The plugin fetches your public Google Photos album and creates a responsive gallery. Simply paste the share link from Google Photos into the shortcode.<\/p>\n\n<h4>Security &amp; Error Handling<\/h4>\n\n<ul>\n<li>SSRF protection - validates Google Photos URLs<\/li>\n<li>Proper output escaping for XSS prevention<\/li>\n<li>WordPress coding standards compliant<\/li>\n<li>Swiper library bundled locally<\/li>\n<li>User-friendly error messages for invalid album links<\/li>\n<\/ul>\n\n<h3>Usage<\/h3>\n\n<h4>Basic Usage<\/h4>\n\n<pre><code>[jzsa-album link=\"https:\/\/photos.google.com\/share\/AF1QipOg3EA51ATc_YWHyfcffDCzNZFsVTU_uBqSEKFix7LY80DIgH3lMkLwt4QDTHd8EQ?key=RGwySFNhbmhqMFBDbnZNUUtwY0stNy1XV1JRbE9R\"]\n<\/code><\/pre>\n\n<h4>Common Example<\/h4>\n\n<pre><code>[jzsa-album link=\"https:\/\/photos.google.com\/share\/AF1QipOg3EA51ATc_YWHyfcffDCzNZFsVTU_uBqSEKFix7LY80DIgH3lMkLwt4QDTHd8EQ?key=RGwySFNhbmhqMFBDbnZNUUtwY0stNy1XV1JRbE9R\" mode=\"slider\" corner-radius=\"16\" show-link-button=\"true\" show-download-button=\"true\"]\n<\/code><\/pre>\n\n<h4>Shortcode Parameters<\/h4>\n\n<p>The only required parameter is <strong>link<\/strong> - the Google Photos share URL.<\/p>\n\n<p>All other parameters are optional.<\/p>\n\n<p>This readme intentionally keeps shortcode examples short to avoid drift.<\/p>\n\n<p>For the complete and current parameter reference, defaults, inheritance rules, a very very large number of customization parameters, many samples, and the shortcode playground, use the plugin's <strong>Settings &amp; Onboarding<\/strong> page in WordPress admin:<\/p>\n\n<pre><code>Settings -&gt; Shared Albums for Google Photos\n<\/code><\/pre>\n\n<h4>Getting Your Album Share Link<\/h4>\n\n<ol>\n<li>Open Google Photos and select an album<\/li>\n<li>Click the share button (or three-dot menu &gt; Share)<\/li>\n<li>Click \"Create link\" or \"Get link\"<\/li>\n<li><p>Copy the album share link and paste it into the shortcode:<\/p>\n\n<p>[jzsa-album link=\"https:\/\/photos.google.com\/share\/AF1QipNxLo...\"]<\/p><\/li>\n<\/ol>\n\n<p><strong>Important:<\/strong> The album must be public (shared via link) for the plugin to access it.<\/p>\n\n<h3>Credits<\/h3>\n\n<ul>\n<li>Uses <a href=\"https:\/\/swiperjs.com\/\">Swiper<\/a> - MIT License<\/li>\n<li>Uses <a href=\"https:\/\/plyr.io\/\">Plyr<\/a> - MIT License<\/li>\n<li>Developed by Jan Zeman<\/li>\n<\/ul>\n\n<h3>Privacy Policy<\/h3>\n\n<p>This plugin does not collect or store any user data.<\/p>\n\n<h4>Use of external Google services<\/h4>\n\n<ul>\n<li>The plugin fetches public Google Photos album pages from <code>https:\/\/photos.google.com<\/code> and image files from <code>*.googleusercontent.com<\/code> in order to render the galleries.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<\/ul>\n\n<h3>Support<\/h3>\n\n<ul>\n<li><strong>Bug reports:<\/strong> <a href=\"https:\/\/github.com\/JanZeman\/shared-albums-for-google-photos\/issues\/new\">Open an issue on GitHub<\/a><\/li>\n<li><strong>Feature requests:<\/strong> <a href=\"https:\/\/wordpress.org\/support\/plugin\/janzeman-shared-albums-for-google-photos\/\">Post on the support forum<\/a><\/li>\n<li><strong>Leave a rating:<\/strong> <a href=\"https:\/\/wordpress.org\/support\/plugin\/janzeman-shared-albums-for-google-photos\/reviews\/#new-post\">Review on WordPress.org<\/a><\/li>\n<li><strong>Buy Me a Coffee:<\/strong> <a href=\"https:\/\/www.buymeacoffee.com\/janzeman\">buymeacoffee.com\/janzeman<\/a><\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install &amp; Activate the plugin<\/li>\n<li>Open the plugin's Settings &amp; Onboarding page. It includes a very very large number of customization parameters, many samples, and a live shortcode playground.<\/li>\n<li>Start with a sample there, then use your own Google Photos albums in posts and pages.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20with%20private%20albums%3F\"><h3>Does this work with private albums?<\/h3><\/dt>\n<dd><p>No, the album must be shared publicly via a link. Google Photos does not provide API access to private albums without OAuth authentication.<\/p><\/dd>\n<dt id=\"how%20many%20photos%20can%20i%20embed%3F\"><h3>How many photos can I embed?<\/h3><\/dt>\n<dd><p>The plugin can handle up to 300 photos per album. This is a limitation from Google Photos, which typically returns around 300 photos in the initial page load.<\/p>\n\n<p>For performance and stability reasons, <strong>very old iOS devices using legacy WebKit<\/strong> may automatically be limited to 25 photos on the client side, even if the server-side limit is higher. All other platforms (desktop, Android, modern iOS\/iPadOS) can use the full per-album limit you configure.<\/p><\/dd>\n<dt id=\"will%20this%20slow%20down%20my%20site%3F\"><h3>Will this slow down my site?<\/h3><\/dt>\n<dd><p>No. The plugin uses lazy loading, progressive image loading, and local bundled frontend assets. Album data is cached, and the refresh interval is configurable with <code>cache-refresh<\/code> (default: 7 days).<\/p><\/dd>\n<dt id=\"can%20i%20customize%20the%20appearance%3F\"><h3>Can I customize the appearance?<\/h3><\/dt>\n<dd><p>Yes! You can override the CSS by adding custom styles to your theme. The main container class is <code>.jzsa-album<\/code>.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20mobile%3F\"><h3>Does it work on mobile?<\/h3><\/dt>\n<dd><p>Absolutely! The gallery is fully responsive and supports touch gestures (swipe, pinch-to-zoom).<\/p><\/dd>\n<dt id=\"how%20does%20the%20download%20button%20work%3F\"><h3>How does the download button work?<\/h3><\/dt>\n<dd><p>When enabled with <code>show-download-button=\"true\"<\/code>, a download button appears in inline (non-fullscreen) view. Clicking it downloads the current full-resolution photo to your device. The download uses a server-side proxy to bypass CORS restrictions from Google Photos.<\/p>\n\n<p>Use <code>fullscreen-show-download-button<\/code> to control the fullscreen download button separately. If omitted, it inherits from <code>show-download-button<\/code>.<\/p><\/dd>\n<dt id=\"how%20does%20the%20play%2Fpause%20button%20work%3F\"><h3>How does the play\/pause button work?<\/h3><\/dt>\n<dd><p>In fullscreen mode, a play\/pause button appears above the photo counter at the bottom center. Click it or press the spacebar to toggle slideshow on\/off. The button shows a play icon (\u25b6) when paused and a pause icon (\u23f8) when playing. This works regardless of the <code>fullscreen-slideshow<\/code> setting - if slideshow is disabled, the button lets you start it manually.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20update%20the%20shortcode%3F\"><h3>What happens if I update the shortcode?<\/h3><\/dt>\n<dd><p>The cache is automatically cleared when you save the post, so changes take effect immediately.<\/p><\/dd>\n<dt id=\"what%20if%20i%20use%20the%20wrong%20url%20format%3F\"><h3>What if I use the wrong URL format?<\/h3><\/dt>\n<dd><p>The plugin provides clear feedback:<\/p>\n\n<p><strong>Errors (gallery won't display):<\/strong>\n- Invalid URL: Not a valid Google Photos link\n- Album is private or link expired: \"Unable to Load Album\" error\n- Empty album: \"No Photos Found\" error<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.1.5<\/h4>\n\n<ul>\n<li>Progressively loaded Guide page<\/li>\n<\/ul>\n\n<h4>2.1.4<\/h4>\n\n<ul>\n<li>Screenshots added<\/li>\n<\/ul>\n\n<h4>2.1.3<\/h4>\n\n<ul>\n<li>Add \"How the cache works\" section<\/li>\n<li>Improve Guide page loading experience<\/li>\n<\/ul>\n\n<h4>2.1.2<\/h4>\n\n<ul>\n<li>Make caching description more clear and prominent<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>Settings page moved to top-level admin menu with subpages for easier navigation and reference<\/li>\n<li>Google Photo description can be supported after all :-)<\/li>\n<li>Introduce a halo effect to improve text readability<\/li>\n<\/ul>\n\n<h4>2.0.11<\/h4>\n\n<ul>\n<li>Swiper loop navigation<\/li>\n<\/ul>\n\n<h4>2.0.10<\/h4>\n\n<ul>\n<li>Lighter loading for large sliders<\/li>\n<\/ul>\n\n<h4>2.0.9<\/h4>\n\n<ul>\n<li>New <code>fullscreen-display-max-width<\/code> and <code>fullscreen-display-max-height<\/code><\/li>\n<li>New <code>info-wrap<\/code> and info text alignment parameters<\/li>\n<li>New <code>gallery-buttons-on-mobile<\/code> behavior for touch devices<\/li>\n<li>Responsive layout improvements<\/li>\n<\/ul>\n\n<h4>2.0.8<\/h4>\n\n<ul>\n<li>File name bug fix<\/li>\n<\/ul>\n\n<h4>2.0.7<\/h4>\n\n<ul>\n<li>New dynamic photo info overlays<\/li>\n<li>EXIF placeholders with background loading<\/li>\n<li>Slider, carousel, gallery and fullscreen photo info<\/li>\n<li>All Settings page samples are editable by now, not only the Playground<\/li>\n<\/ul>\n\n<h4>2.0.6<\/h4>\n\n<ul>\n<li>Touch devices: Controls appear on tap and fade out on inactivity<\/li>\n<\/ul>\n\n<h4>2.0.5<\/h4>\n\n<ul>\n<li>Fullscreen vs inline controls<\/li>\n<li>Video download support<\/li>\n<li>Download UX &amp; settings improvements<\/li>\n<\/ul>\n\n<h4>2.0.4<\/h4>\n\n<ul>\n<li>New: Mosaic thumbnail strip (<code>mosaic=\"true\"<\/code>) for slider and carousel modes<\/li>\n<li>Mosaic feature inspired by Mateusz Starzak's fork<\/li>\n<li>Added <code>fullscreen-background-color<\/code> (default <code>#000<\/code>) to control fullscreen background separately<\/li>\n<li>Fixed gallery mode where <code>show-download-button=\"true\"<\/code> did not render the download button<\/li>\n<li>Fixed slideshow option logic: use <code>disabled<\/code>, <code>manual<\/code>, or <code>auto<\/code> for <code>slideshow<\/code> and <code>fullscreen-slideshow<\/code><\/li>\n<li>Fixed <code>fullscreen-toggle=\"click\"<\/code> for video slides in gallery mode<\/li>\n<li>Improved iPhone pseudo-fullscreen behavior, including fullscreen arrow navigation<\/li>\n<li>Added restore-to-last-viewed position when closing fullscreen<\/li>\n<li>Thanks to Peter and Ulf for detailed bug reports and testing<\/li>\n<\/ul>\n\n<h4>2.0.3<\/h4>\n\n<ul>\n<li>New parameter: \"cache-refresh\"<\/li>\n<li>Clear Cache button added<\/li>\n<\/ul>\n\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>Fixed album titles being truncated (dates and special characters are now preserved)<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Gallery mode support<\/li>\n<li>Experimental video support<\/li>\n<li>Shortcode parameters and their default values changed (Breaking. Apologies!)<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>New animated logo<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Improved Settings page with more intuitive onboarding and richer, example-driven documentation<\/li>\n<li>Added Shortcode Playground on the Settings page to test and preview <code>[jzsa-album]<\/code> shortcodes without leaving admin<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Initial Settings page and onboarding content<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Release related improvements<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Modern Swiper 11 library integration<\/li>\n<li>Fullscreen mode with dedicated button<\/li>\n<li>Play\/pause button in fullscreen with spacebar keyboard shortcut<\/li>\n<li>Download button with server-side proxy (optional, disabled by default)<\/li>\n<li>Zoom support (pinch on touch devices)<\/li>\n<li>Keyboard navigation (arrows to navigate, spacebar to play\/pause in fullscreen)<\/li>\n<li>Lazy loading for optimal performance<\/li>\n<li>Progressive image loading with error recovery and placeholders<\/li>\n<li>Click-to-fullscreen option<\/li>\n<li>Random start position for galleries<\/li>\n<li>SSRF protection and proper escaping<\/li>\n<li>WordPress coding standards compliance<\/li>\n<li>24-hour caching mechanism<\/li>\n<li>User-friendly error messages for invalid album URLs<\/li>\n<li>Responsive design with touch gestures<\/li>\n<\/ul>","raw_excerpt":"Display publicly shared Google Photos albums with a modern, responsive Swiper-based gallery viewer.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/273213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=273213"}],"author":[{"embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/janzeman"}],"wp:attachment":[{"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=273213"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=273213"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=273213"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=273213"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=273213"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=273213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}