{"id":280097,"date":"2026-03-08T17:33:57","date_gmt":"2026-03-08T17:33:57","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/seljegoogledocslibrary\/"},"modified":"2026-04-03T19:00:22","modified_gmt":"2026-04-03T19:00:22","slug":"seljedrive-document-library-for-google-drive","status":"publish","type":"plugin","link":"https:\/\/pcd.wordpress.org\/plugins\/seljedrive-document-library-for-google-drive\/","author":23448416,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.2.1","stable_tag":"1.2.1","tested":"6.9.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"seljeDrive Document Library for Google Drive","header_author":"Tormod Seljenes","header_description":"Displays a public Google Drive folder (shared link) as an explorer-style document library via shortcode.","assets_banners_color":"95b3c6","last_updated":"2026-04-03 19:00:22","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/buy.stripe.com\/28EbJ1aRyfwp3tncUWbQY0h","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/seljedrive-document-library-for-google-drive\/","header_author_uri":"https:\/\/seljenes.no","rating":0,"author_block_rating":0,"active_installs":0,"downloads":264,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0":{"tag":"1.0","author":"seljenes","date":"2026-03-08 17:52:08"},"1.1.0":{"tag":"1.1.0","author":"seljenes","date":"2026-03-09 11:19:09"},"1.2.0":{"tag":"1.2.0","author":"seljenes","date":"2026-04-03 17:52:10"},"1.2.1":{"tag":"1.2.1","author":"seljenes","date":"2026-04-03 19:00:22"}},"upgrade_notice":{"1.2.1":"<p>Fixes a broken admin page introduced in 1.2.0. Please update immediately.<\/p>","1.2.0":"<p>Settings page moved to the Settings menu. Client Secret is now encrypted at rest \u2014 re-save your OAuth credentials after upgrading to encrypt the stored value.<\/p>","1.1.0":"<ul>\n<li>New frontend language customization option.<\/li>\n<\/ul>","1.0.3":"<ul>\n<li>New customization option.<\/li>\n<\/ul>","1.0.2":"<ul>\n<li>New customization options.<\/li>\n<\/ul>","1.0.1":"<ul>\n<li>Version bump.<\/li>\n<\/ul>","0.70":"<ul>\n<li>UI tweaks and translation improvements.<\/li>\n<\/ul>","0.64":"<ul>\n<li>Removed Freemius dependency and enabled all features in the single version.<\/li>\n<\/ul>","0.63":"<ul>\n<li>WordPress.org compliance fixes.<\/li>\n<\/ul>","0.62":"<ul>\n<li>Minor language update.<\/li>\n<\/ul>","0.61":"<ul>\n<li>Added a donate button.<\/li>\n<\/ul>","0.60":"<ul>\n<li>Search fix release.<\/li>\n<\/ul>","0.5":"<ul>\n<li>Multi-library support and icons.<\/li>\n<\/ul>","0.1.2":"<ul>\n<li>New translation support.<\/li>\n<\/ul>"},"ratings":[],"assets_icons":{"icon-256x256.jpg":{"filename":"icon-256x256.jpg","revision":3477527,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3477527,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0","1.1.0","1.2.0","1.2.1"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3477527,"resolution":"1","location":"assets","locale":""},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3477527,"resolution":"2","location":"assets","locale":""}},"screenshots":{"1":"Frontend file explorer.","2":"Plugin admin page."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[9054,126405,17785,1980,80],"plugin_category":[43],"plugin_contributors":[257347],"plugin_business_model":[],"class_list":["post-280097","plugin","type-plugin","status-publish","hentry","plugin_tags-documents","plugin_tags-file-browser","plugin_tags-google-drive","plugin_tags-library","plugin_tags-shortcode","plugin_category-customization","plugin_contributors-seljenes","plugin_committers-seljenes"],"banners":{"banner":"https:\/\/ps.w.org\/seljedrive-document-library-for-google-drive\/assets\/banner-772x250.jpg?rev=3477527","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/seljedrive-document-library-for-google-drive\/assets\/icon-256x256.jpg?rev=3477527","icon_2x":"https:\/\/ps.w.org\/seljedrive-document-library-for-google-drive\/assets\/icon-256x256.jpg?rev=3477527","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/seljedrive-document-library-for-google-drive\/assets\/screenshot-1.jpg?rev=3477527","caption":"Frontend file explorer."},{"src":"https:\/\/ps.w.org\/seljedrive-document-library-for-google-drive\/assets\/screenshot-2.jpg?rev=3477527","caption":"Plugin admin page."}],"raw_content":"<!--section=description-->\n<p>seljeDrive Document Library for Google Drive lets you publish a Google Drive folder on your WordPress site as a simple file explorer.<\/p>\n\n<p>Find this free plugin useful? Please support my work on this plugin by sending me a <a href=\"https:\/\/buy.stripe.com\/28EbJ1aRyfwp3tncUWbQY0h\">one-time donation<\/a> (50% of the proceeds go to Ukraine).<\/p>\n\n<p>Key features:<\/p>\n\n<ul>\n<li>Browse a Google Drive folder (via a shared folder link)<\/li>\n<li>Search inside the library<\/li>\n<li>Open files in a new tab or download files<\/li>\n<li>Create multiple libraries and embed each with a shortcode<\/li>\n<li>Control access per library:\n\n<ul>\n<li>Public<\/li>\n<li>Logged-in users<\/li>\n<li>Specific roles<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<p>Find this free plugin useful? Please support my work on this plugin by <a href=\"https:\/\/buy.stripe.com\/28EbJ1aRyfwp3tncUWbQY0h\">making a donation<\/a>.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>This plugin relies on third party services to function.<\/p>\n\n<p>Google Drive is a trademark of Google LLC. This plugin is not affiliated with or endorsed by Google.<\/p>\n\n<p>WordPress is a trademark of the WordPress Foundation. This plugin is not affiliated with or sponsored by,  the WordPress Foundation.<\/p>\n\n<h3>Third Party Services<\/h3>\n\n<h4>Google (Google OAuth + Google Drive API)<\/h4>\n\n<p>What it is used for:<\/p>\n\n<ul>\n<li>Connecting your WordPress site to Google (OAuth)<\/li>\n<li>Listing\/searching files and folders from Google Drive<\/li>\n<li>Opening\/downloading files via Google-hosted URLs<\/li>\n<\/ul>\n\n<p>When data is sent:<\/p>\n\n<ul>\n<li>When an administrator clicks <strong>Connect Google<\/strong> and completes authorization<\/li>\n<li>When anyone views a page that contains the <code>[sg_doc_library]<\/code> shortcode (your WordPress site fetches file\/folder metadata from Google to render the library)<\/li>\n<li>When a visitor uses Search \/ Open \/ Download inside the library<\/li>\n<li>When the plugin refreshes an expired access token (if you have connected with offline access)<\/li>\n<\/ul>\n\n<p>What data is sent:<\/p>\n\n<ul>\n<li>During OAuth authorization (admin action): client ID, redirect URI, state, requested scope, and an authorization code<\/li>\n<li>During API calls to Google Drive: an OAuth access token (in an Authorization header), Google Drive file\/folder IDs, and search terms entered by the user (if search is used)<\/li>\n<li>During Open\/Download (visitor action): your WordPress site returns a redirect URL and the visitor's browser is sent to a Google-hosted URL containing the file ID (for example <code>docs.google.com<\/code> export links or <code>drive.google.com<\/code> download links)<\/li>\n<\/ul>\n\n<p>Data flow \/ conditions:<\/p>\n\n<ul>\n<li>Google Drive API requests are made server-to-server (from your WordPress site to Google) using the OAuth token stored in your WordPress database.<\/li>\n<li>The visitor's browser is only sent directly to Google when the visitor clicks <strong>Open<\/strong> or <strong>Download<\/strong>.<\/li>\n<\/ul>\n\n<p>Endpoints contacted:<\/p>\n\n<ul>\n<li>https:\/\/accounts.google.com\/o\/oauth2\/v2\/auth<\/li>\n<li>https:\/\/oauth2.googleapis.com\/token<\/li>\n<li>https:\/\/www.googleapis.com\/drive\/v3<\/li>\n<\/ul>\n\n<p>Visitor browser destinations (when using Open\/Download):<\/p>\n\n<ul>\n<li>https:\/\/docs.google.com\/<\/li>\n<li>https:\/\/drive.google.com\/<\/li>\n<\/ul>\n\n<p>OAuth scope:<\/p>\n\n<ul>\n<li>https:\/\/www.googleapis.com\/auth\/drive.readonly<\/li>\n<\/ul>\n\n<p>Google Privacy Policy:<\/p>\n\n<ul>\n<li>https:\/\/policies.google.com\/privacy<\/li>\n<\/ul>\n\n<p>Google Terms of Service:<\/p>\n\n<ul>\n<li>https:\/\/policies.google.com\/terms<\/li>\n<\/ul>\n\n<p>Google APIs Terms of Service:<\/p>\n\n<ul>\n<li>https:\/\/developers.google.com\/terms<\/li>\n<\/ul>\n\n<h4>Stripe (Donate link)<\/h4>\n\n<p>What it is used for:<\/p>\n\n<ul>\n<li>Optional donations via a Stripe-hosted checkout page<\/li>\n<\/ul>\n\n<p>When data is sent:<\/p>\n\n<ul>\n<li>Only when an administrator clicks the <strong>Donate<\/strong> button in the plugin admin page<\/li>\n<\/ul>\n\n<p>What data is sent:<\/p>\n\n<ul>\n<li>The plugin itself does not send payment details. Clicking <strong>Donate<\/strong> opens a Stripe-hosted page in your browser. Stripe then receives the data needed to load and process the checkout (such as your IP address, browser\/user agent, and any information you enter on the checkout page).<\/li>\n<\/ul>\n\n<p>Stripe Privacy Policy:<\/p>\n\n<ul>\n<li>https:\/\/stripe.com\/privacy<\/li>\n<\/ul>\n\n<p>Stripe Terms \/ Legal:<\/p>\n\n<ul>\n<li>https:\/\/stripe.com\/legal<\/li>\n<\/ul>\n\n<h3>Configuration<\/h3>\n\n<h3>Google OAuth<\/h3>\n\n<ol>\n<li>In Google Cloud Console:<\/li>\n<\/ol>\n\n<ul>\n<li>Enable <strong>Google Drive API<\/strong><\/li>\n<li>Create an <strong>OAuth 2.0 Client ID<\/strong> (type: Web application)<\/li>\n<\/ul>\n\n<ol>\n<li>In WordPress admin:<\/li>\n<\/ol>\n\n<ul>\n<li>Go to <strong>Settings -&gt; seljeDrive Document Library for Google Drive<\/strong><\/li>\n<li>Add your <strong>Client ID<\/strong> and <strong>Client Secret<\/strong><\/li>\n<li>Copy the <strong>Redirect URI<\/strong> shown on the plugin admin page<\/li>\n<\/ul>\n\n<ol>\n<li>Back in Google Cloud Console:<\/li>\n<\/ol>\n\n<ul>\n<li>Add that Redirect URI as an authorized redirect URI<\/li>\n<\/ul>\n\n<ol>\n<li>Back in WordPress:<\/li>\n<\/ol>\n\n<ul>\n<li>Click <strong>Connect Google<\/strong><\/li>\n<\/ul>\n\n<h3>Create a library<\/h3>\n\n<ol>\n<li>Go to <strong>Settings -&gt; seljeDrive Document Library for Google Drive<\/strong><\/li>\n<li>Under <strong>Libraries<\/strong>, add a library:<\/li>\n<\/ol>\n\n<ul>\n<li>Name<\/li>\n<li>Public Folder Share URL<\/li>\n<li>Access mode<\/li>\n<\/ul>\n\n<ol>\n<li>Save.<\/li>\n<\/ol>\n\n<!--section=installation-->\n<ol>\n<li>In WordPress admin, go to <strong>Plugins -&gt; Add New<\/strong>.<\/li>\n<li>Search for <strong>seljeDrive Document Library for Google Drive<\/strong>.<\/li>\n<li>Click <strong>Install Now<\/strong> and then <strong>Activate<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20embed%20a%20library%20on%20a%20page%3F\"><h3>How do I embed a library on a page?<\/h3><\/dt>\n<dd><p>Use the shortcode shown in the Libraries list, for example:<\/p>\n\n<pre><code>[sg_doc_library id=\"YOUR_LIBRARY_ID\"]\n<\/code><\/pre><\/dd>\n<dt id=\"what%20php%20version%20is%20required%3F\"><h3>What PHP version is required?<\/h3><\/dt>\n<dd><p>Minimum required PHP is <strong>7.4<\/strong>.<\/p><\/dd>\n<dt id=\"does%20it%20support%20norwegian%20language%3F\"><h3>Does it support Norwegian language?<\/h3><\/dt>\n<dd><p>Yes. The plugin is translation-ready and includes a Norwegian Bokm\u00e5l (<code>nb_NO<\/code>) translation source file.<\/p>\n\n<p>WordPress typically uses compiled <code>.mo<\/code> files at runtime.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Fixed missing template file and admin CSS that caused a broken admin page after the 1.2.0 update<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Moved settings page from Tools to Settings menu<\/li>\n<li>Admin notices now display feedback after save, connect, disconnect, and delete actions<\/li>\n<li>Client Secret is now encrypted at rest (AES-256-CBC)<\/li>\n<li>Folder listings now paginate beyond 200 files (up to 2 000)<\/li>\n<li>Added rate limiting on REST endpoints (60 requests\/minute per IP)<\/li>\n<li>Stale folder cache cleared automatically when a library is deleted<\/li>\n<li>Admin page HTML extracted to a separate template file for maintainability<\/li>\n<li>Added placeholder text to the Allowed file extensions field<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added per-library option to choose frontend language (installed WordPress languages)<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Added option to show Google Drive file preview thumbnails as icons<\/li>\n<li>Improved copied confirmation when clicking the shortcode<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Added option to remove header from frontend<\/li>\n<li>Added option to customize the root folder label<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Renamed main plugin file<\/li>\n<li>Version bump<\/li>\n<\/ul>\n\n<h4>0.70<\/h4>\n\n<ul>\n<li>Backend moved to Tools menu<\/li>\n<li>Added hover tooltips in the backend<\/li>\n<li>Improved translation loading (incl. locale switch support)<\/li>\n<li>Updated donate button styling<\/li>\n<\/ul>\n\n<h4>0.64<\/h4>\n\n<ul>\n<li>Removed Freemius dependency<\/li>\n<li>All features available in the single WordPress.org version (multi-library, access control, full-text search)<\/li>\n<li>Updated external service disclosures (Google APIs, Stripe)<\/li>\n<\/ul>\n\n<h4>0.63<\/h4>\n\n<ul>\n<li>WordPress.org compliance fixes (text domain alignment, translation loading, security\/escaping)<\/li>\n<\/ul>\n\n<h4>0.62<\/h4>\n\n<ul>\n<li>Minor language update<\/li>\n<\/ul>\n\n<h4>0.61<\/h4>\n\n<ul>\n<li>Added a non-intrusive Donate button in the plugin admin page<\/li>\n<\/ul>\n\n<h4>0.60<\/h4>\n\n<ul>\n<li>Fixed Google Drive search error for full-text queries<\/li>\n<li>Security hardening for REST references<\/li>\n<\/ul>\n\n<h4>0.5<\/h4>\n\n<ul>\n<li>Multi-library support (multiple shortcodes on one page)<\/li>\n<li>Added icons in the file list<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Added translations support (including Norwegian Bokm\u00e5l source translation)<\/li>\n<li>Improved admin UI translations<\/li>\n<\/ul>","raw_excerpt":"Embed a Google Drive folder as a browsable document library on your WordPress site using a simple shortcode.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/280097","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=280097"}],"author":[{"embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/seljenes"}],"wp:attachment":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=280097"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=280097"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=280097"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=280097"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=280097"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=280097"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}