{"id":280097,"date":"2026-03-08T17:33:57","date_gmt":"2026-03-08T17:33:57","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/seljegoogledocslibrary\/"},"modified":"2026-06-03T19:26:18","modified_gmt":"2026-06-03T19:26:18","slug":"seljedrive-document-library-for-google-drive","status":"publish","type":"plugin","link":"https:\/\/gu.wordpress.org\/plugins\/seljedrive-document-library-for-google-drive\/","author":23448416,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.0","stable_tag":"1.3.0","tested":"7.0","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-06-03 19:26:18","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":10,"downloads":458,"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"},"1.3.0":{"tag":"1.3.0","author":"seljenes","date":"2026-06-03 19:26:18"}},"upgrade_notice":{"1.3.0":"<p>Admin UI improvements: hover tooltips on all settings fields, copyable Redirect URI, rebuilt developer sidebar with documentation overlay. No database changes required.<\/p>","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":"","width":256,"height":256}},"assets_banners":{"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3477527,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0","1.1.0","1.2.0","1.2.1","1.3.0"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3477527,"resolution":"1","location":"assets","locale":"","width":600,"height":400},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3477527,"resolution":"2","location":"assets","locale":"","width":600,"height":400}},"screenshots":{"1":"Frontend file explorer.","2":"Plugin admin page."}},"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>Plugin settings<\/h3>\n\n<h3>Google OAuth<\/h3>\n\n<p><strong>Client ID<\/strong>\nThe OAuth 2.0 Client ID from your Google Cloud project. Find it under APIs &amp; Services &gt; Credentials &gt; OAuth 2.0 Client IDs in the Google Cloud Console.<\/p>\n\n<p><strong>Client Secret<\/strong>\nThe OAuth 2.0 Client Secret from your Google Cloud project. It is stored encrypted (AES-256-CBC) in the WordPress database. Leave the field blank to keep the existing stored secret when re-saving settings.<\/p>\n\n<p><strong>Redirect URI<\/strong>\nA read-only field showing the URI you must register as an Authorized Redirect URI in your Google Cloud Console OAuth client. Copy it with the Copy button and paste it into Google Cloud Console before clicking Connect Google.<\/p>\n\n<p><strong>Connect Google \/ Disconnect<\/strong>\nAfter saving your Client ID and Client Secret, click Connect Google to start the OAuth authorization flow. Once the authorization is complete, the status shows Connected. Click Disconnect at any time to remove the stored OAuth token.<\/p>\n\n<h3>Libraries<\/h3>\n\n<p><strong>Name<\/strong>\nA label for your own reference to identify this library in the admin. It is not visible to visitors on the frontend.<\/p>\n\n<p><strong>Public Folder Share URL<\/strong>\nThe sharing URL of a Google Drive folder. The folder must be shared with \"Anyone with the link can view\" in Google Drive before it will work with this plugin.<\/p>\n\n<p><strong>Access<\/strong>\nControls who can browse this library:<\/p>\n\n<ul>\n<li>Public: Anyone, including non-logged-in visitors.<\/li>\n<li>Logged-in users: Only authenticated WordPress users.<\/li>\n<li>Specific roles: Only users with the selected WordPress roles.<\/li>\n<\/ul>\n\n<p><strong>Allowed roles<\/strong>\nOnly shown when Access is set to Specific roles. Check all WordPress user roles that should be allowed to view the library. Visitors not matching a selected role will see an access denied message.<\/p>\n\n<p><strong>Hide Open button<\/strong>\nWhen enabled, the Open button is hidden in the file list. Visitors cannot open files in a new browser tab directly from the library.<\/p>\n\n<p><strong>Hide Download button<\/strong>\nWhen enabled, the Download button is hidden in the file list. Visitors cannot download files directly from the library.<\/p>\n\n<p><strong>Remove header from frontend<\/strong>\nWhen enabled, the breadcrumb navigation and the search bar at the top of the library are removed from the frontend display. Useful when you want a minimal, non-navigable file list.<\/p>\n\n<p><strong>Icon is preview of file content<\/strong>\nWhen enabled, Google Drive preview thumbnails are loaded as file icons instead of generic file-type icons. This provides a visual preview of each file's contents, but may slightly increase page load time for large folders.<\/p>\n\n<p><strong>Frontend language<\/strong>\nSets the display language for this library's UI elements (buttons, status messages, labels). Defaults to the WordPress site language if left on Default. Change this per library if you need a different language than the site default.<\/p>\n\n<p><strong>Root folder label<\/strong>\nCustom text displayed as the label for the top-level breadcrumb in the file explorer. Leave empty to use the plugin's built-in default root label (typically \"Root\" or its translation).<\/p>\n\n<p><strong>Allowed file extensions<\/strong>\nA comma-separated list of file extensions to show in the library, e.g. pdf,docx,xlsx. Leave empty to display all file types from the Google Drive folder. Extensions are matched case-insensitively.<\/p>\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.3.0<\/h4>\n\n<ul>\n<li>Added styled hover tooltips (info icons) on every settings field in the admin page<\/li>\n<li>Redirect URI is now copyable via a Copy button<\/li>\n<li>Rebuilt the sidebar developer section: renamed to \"-FROM THE DEVELOPER-\", added structured headings for Other plugins, Other software, Contact, and Visit our vacation homes<\/li>\n<li>Documentation link now opens the full readme in an inline overlay instead of opening an external website<\/li>\n<li>Added links to seljeDrive Document Library for Google Drive, seljeVisitorsFlags, Skriveline, sTimeFlow, Discord, and Sansel Rental<\/li>\n<li>Updated readme Plugin settings section with descriptions of every setting<\/li>\n<li>Tested up to WordPress 7.0<\/li>\n<li>Updated Norwegian Bokm\u00e5l translation<\/li>\n<\/ul>\n\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:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/280097","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=280097"}],"author":[{"embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/seljenes"}],"wp:attachment":[{"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=280097"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=280097"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=280097"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=280097"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=280097"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=280097"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}