{"id":272858,"date":"2026-02-21T14:01:41","date_gmt":"2026-02-21T14:01:41","guid":{"rendered":"https:\/\/cn.wordpress.org\/plugins\/cosmautdl\/"},"modified":"2026-03-18T08:34:06","modified_gmt":"2026-03-18T08:34:06","slug":"cosmautdl","status":"publish","type":"plugin","link":"https:\/\/pcd.wordpress.org\/plugins\/cosmautdl\/","author":23432807,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.9","stable_tag":"1.0.9","tested":"6.9.4","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"CosmautDL","header_author":"Cosmaut","header_description":"\u4e13\u4e1a\u7684\u591a\u7f51\u76d8\u4e0b\u8f7d\u7ba1\u7406\u63d2\u4ef6\uff0c\u652f\u6301\u767e\u5ea6\u7f51\u76d8\u3001\u963f\u91cc\u4e91\u76d8\u3001\u84dd\u594f\u4e91\u7b49\u4e3b\u6d41\u7f51\u76d8\u3002\u63d0\u4f9b\u667a\u80fd\u4e0b\u8f7d\u5361\u7247\u3001\u626b\u7801\u89e3\u9501\u3001\u72ec\u7acb\u4e0b\u8f7d\u9875\u9762\u3001\u4e0b\u8f7d\u7edf\u8ba1\u7b49\u5b8c\u6574\u89e3\u51b3\u65b9\u6848\u3002\u91c7\u7528\u73b0\u4ee3\u5316UI\u8bbe\u8ba1\uff0c\u652f\u6301\u81ea\u5b9a\u4e49\u4e3b\u9898\u8272\u548c\u54cd\u5e94\u5f0f\u5e03\u5c40\u3002","assets_banners_color":"0a427f","last_updated":"2026-03-18 08:34:06","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/cosmaut.com\/cosmautdl\/sponsor\/","header_plugin_uri":"https:\/\/cosmaut.com\/cosmautdl","header_author_uri":"https:\/\/cosmaut.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":294,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.8":{"tag":"1.0.8","author":"cosmaut","date":"2026-02-21 14:29:58"},"1.0.9":{"tag":"1.0.9","author":"cosmaut","date":"2026-03-18 08:34:06"}},"upgrade_notice":{"1.0.9":"<p>Maintenance update: i18n and release metadata alignment for WordPress.org stable language-pack flow.<\/p>","1.0.8":"<p>Maintenance update: Tested up to WordPress 6.9, minor code improvements and compatibility enhancements.<\/p>","1.0.7":"<p>Maintenance update: Bundle on-site QR code generation library and tighten admin capability checks.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3480190,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3480190,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3480190,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3480190,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.8","1.0.9"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3480263,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3480263,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3480263,"resolution":"3","location":"assets","locale":""}},"screenshots":{"1":"Download card UI","2":"Post editor meta box","3":"File tree page","4":"Download statistics"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[256319,568,4721,24613,256320],"plugin_category":[],"plugin_contributors":[256321],"plugin_business_model":[],"class_list":["post-272858","plugin","type-plugin","status-publish","hentry","plugin_tags-cloud-drive","plugin_tags-download","plugin_tags-download-manager","plugin_tags-file-download","plugin_tags-wechat-unlock","plugin_contributors-cosmaut","plugin_committers-cosmaut"],"banners":{"banner":"https:\/\/ps.w.org\/cosmautdl\/assets\/banner-772x250.png?rev=3480190","banner_2x":"https:\/\/ps.w.org\/cosmautdl\/assets\/banner-1544x500.png?rev=3480190","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/cosmautdl\/assets\/icon-128x128.png?rev=3480190","icon_2x":"https:\/\/ps.w.org\/cosmautdl\/assets\/icon-256x256.png?rev=3480190","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/cosmautdl\/assets\/screenshot-1.png?rev=3480263","caption":"Download card UI"},{"src":"https:\/\/ps.w.org\/cosmautdl\/assets\/screenshot-2.png?rev=3480263","caption":"Post editor meta box"},{"src":"https:\/\/ps.w.org\/cosmautdl\/assets\/screenshot-3.png?rev=3480263","caption":"File tree page"}],"raw_content":"<!--section=description-->\n<p>CosmautDL is a multi-cloud download manager plugin for WordPress.\nIt turns scattered cloud-drive links into a clean \"download card\" experience, and provides dedicated download pages, a site-wide file-tree index, and click statistics for site owners.<\/p>\n\n<p>Key features:<\/p>\n\n<ul>\n<li>Unified download card UI for posts\/pages<\/li>\n<li>Dedicated download page route per post<\/li>\n<li>Redirect route to keep outbound links tidy<\/li>\n<li>File-tree page to browse all shared resources<\/li>\n<li>Click statistics stored in your own database<\/li>\n<li>Optional WeChat QR unlock workflow<\/li>\n<li>Assets loaded only when needed<\/li>\n<\/ul>\n\n<h3>Supported providers<\/h3>\n\n<p>Baidu Pan, 123Pan, Aliyun Drive, Tianyi Cloud, Quark, PikPak, Lanzou, Xunlei, Weiyun, OneDrive, Google Drive, Dropbox, MEGA, MediaFire, Box, and Other.<\/p>\n\n<p>Routes (pretty permalinks recommended):<\/p>\n\n<ul>\n<li>Download page: \/downloads\/{post_id}.html (or ?cosmdl_download=1&amp;post_id={id})<\/li>\n<li>File tree: \/downloads\/tree.html (or ?cosmdl_tree=1)<\/li>\n<li>Stats entry: \/downloads\/stats.html (or ?cosmdl_stats=1; admin-only)<\/li>\n<li>Redirect: \/{prefix}\/{post_id}\/{type}.html (or ?cosmdl_redirect=1&amp;post_id={id}&amp;type={type})<\/li>\n<\/ul>\n\n<p>Data and privacy overview:<\/p>\n\n<ul>\n<li>Stores download click logs in a custom table: {wp_prefix}cosmdl_clicks (post_id, type, attach_id, user_id, ip, ua, referer, success, created_at).<\/li>\n<li>Core features do not require external services.<\/li>\n<\/ul>\n\n<h3>Privacy\/External Services<\/h3>\n\n<ul>\n<li>Data Collection: The plugin records the IP, UA, Referer, and time of download clicks only for backend statistics and troubleshooting; data is stored in your database and never sent outside.<\/li>\n<li>External Services (Optional): When \"IP Geolocation Display\" is enabled, the admin backend queries ipapi\/ip-api\/ipinfo for geolocation; results are cached and displayed in wp-admin. No external requests occur when disabled.<\/li>\n<li>WeChat QR Unlock (Optional): Redirects the visitor browser to WeChat authorization (open.weixin.qq.com) and the server calls api.weixin.qq.com endpoints to exchange code for openid and check subscription. The plugin does not persist openid; it uses a short-lived unlock flag (~10 minutes) and caches the official account access_token (up to ~2 hours).<\/li>\n<li>User Control: You can disable these optional features at any time in plugin settings; uninstalling the plugin cleans up plugin-created data and caches.<\/li>\n<li>Compliance Note: In some jurisdictions, IP addresses are personal data; obtain consent or meet legal requirements before enabling IP geolocation.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin can connect to external services only when you enable related options.<\/p>\n\n<h3>1) WeChat OAuth and subscription check<\/h3>\n\n<ul>\n<li>Service: WeChat \/ Tencent<\/li>\n<li>Purpose: Used for WeChat unlock mode authentication<\/li>\n<li>Endpoints:\n\n<ul>\n<li>https:\/\/open.weixin.qq.com\/connect\/oauth2\/authorize (OAuth authorize, visitor browser redirect)<\/li>\n<li>https:\/\/api.weixin.qq.com\/sns\/oauth2\/access_token (exchange OAuth code for openid)<\/li>\n<li>https:\/\/api.weixin.qq.com\/cgi-bin\/token (fetch official account access_token)<\/li>\n<li>https:\/\/api.weixin.qq.com\/cgi-bin\/user\/info (check subscription status)<\/li>\n<\/ul><\/li>\n<li>When: Only if you enable WeChat unlock in CosmautDL settings and visitors open the unlock URL in WeChat after scanning the QR code.<\/li>\n<li>Data sent:\n\n<ul>\n<li>Visitor browser to open.weixin.qq.com: appid, redirect_uri, response_type, scope, state, and standard HTTP request metadata handled by WeChat (for example IP address and user agent).<\/li>\n<li>Your server to api.weixin.qq.com: appid, appsecret, OAuth code, grant_type; later access_token, openid, lang.<\/li>\n<\/ul><\/li>\n<li>Data stored (local): Does not store openid permanently; stores a short-lived unlock flag transient (10 minutes) and caches the official account access_token transient (up to ~2 hours, based on API expires_in).<\/li>\n<li>User control: You can disable this feature at any time in plugin settings.<\/li>\n<li>Data deletion: Transients expire automatically.<\/li>\n<li>Terms of Service: https:\/\/www.wechat.com\/en\/service_terms.html<\/li>\n<li>Privacy Policy: https:\/\/www.wechat.com\/en\/privacy_policy.html<\/li>\n<\/ul>\n\n<h3>2) IP geolocation lookup<\/h3>\n\n<ul>\n<li>Services (selectable in settings):\n\n<ul>\n<li>https:\/\/ipapi.co\/<\/li>\n<li>https:\/\/ip-api.com\/<\/li>\n<li>https:\/\/ipinfo.io\/<\/li>\n<\/ul><\/li>\n<li>Purpose: To display IP location in admin download statistics<\/li>\n<li>When: Only if you enable Show IP location in stats and open stats details in wp-admin.<\/li>\n<li>Data sent: IP address from your click logs, from your server to the chosen provider (requests are cached).<\/li>\n<li>Caching: Results are cached for 168 hours (7 days) by default to reduce API calls.<\/li>\n<li>User control: You can disable this feature at any time in plugin settings.<\/li>\n<li>Data Flow: Your server to IP Geolocation API and back to your server (IP addresses are sent for location lookup)<\/li>\n<li>Privacy Impact: IP addresses are considered personal data in some jurisdictions; cached results help minimize exposure<\/li>\n<li>Data Deletion: Cached geolocation data automatically expires after 7 days; IP addresses in click logs can be deleted from admin stats page<\/li>\n<li>Terms of Service:\n\n<ul>\n<li>ipapi: https:\/\/ipapi.co\/terms\/<\/li>\n<li>ip-api: https:\/\/ip-api.com\/docs\/legal<\/li>\n<li>ipinfo: https:\/\/ipinfo.io\/terms-of-service<\/li>\n<\/ul><\/li>\n<li>Privacy Policies:\n\n<ul>\n<li>ipapi: https:\/\/ipapi.co\/privacy\/<\/li>\n<li>ip-api: https:\/\/ip-api.com\/docs\/legal<\/li>\n<li>ipinfo: https:\/\/ipinfo.io\/privacy-policy<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h3>Third-party libraries<\/h3>\n\n<h3>phpqrcode<\/h3>\n\n<ul>\n<li>Library: phpqrcode (LGPL-3.0)<\/li>\n<li>Purpose: On-site QR code generation for WeChat unlock functionality<\/li>\n<li>License: GNU Lesser General Public License v3.0<\/li>\n<li>License URI: https:\/\/www.gnu.org\/licenses\/lgpl-3.0.html<\/li>\n<li>Usage: Used for generating unlock QR codes without external dependencies<\/li>\n<li>Compatibility: LGPL-3.0 is compatible with GPLv3<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>cosmautdl<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin in Plugins.<\/li>\n<li>Go to CosmautDL in wp-admin and configure:\n\n<ul>\n<li>Drive management (enable\/rename\/reorder)<\/li>\n<li>Route prefix<\/li>\n<li>Download page modules and optional unlock settings<\/li>\n<\/ul><\/li>\n<li>Edit a post\/page, fill in cloud-drive links in the CosmautDL meta box, and publish.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20add%20a%20download%20card%20to%20a%20post%3F\"><h3>How do I add a download card to a post?<\/h3><\/dt>\n<dd><p>Edit a post\/page, find the CosmautDL meta box, paste cloud-drive links (and extraction codes if any), then update\/publish. The plugin renders the card automatically on the frontend.<\/p><\/dd>\n<dt id=\"i%20see%20404%20on%20%2Fdownloads%2F%7Bid%7D.html.%20what%20should%20i%20do%3F\"><h3>I see 404 on \/downloads\/{id}.html. What should I do?<\/h3><\/dt>\n<dd><p>Go to Settings &gt; Permalinks and click Save Changes once to refresh rewrite rules. Also ensure your site supports pretty permalinks.<\/p><\/dd>\n<dt id=\"what%20data%20does%20cosmautdl%20store%20for%20statistics%3F\"><h3>What data does CosmautDL store for statistics?<\/h3><\/dt>\n<dd><p>It stores click logs in your own database table, including post_id, drive type, IP, user agent, referer, timestamp, and related fields. This is used only for download statistics and can be deleted from the stats page.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20make%20external%20requests%20by%20default%3F\"><h3>Does the plugin make external requests by default?<\/h3><\/dt>\n<dd><p>No. External requests happen only if you enable:<\/p>\n\n<ul>\n<li>WeChat unlock<\/li>\n<li>IP geolocation in stats<\/li>\n<\/ul><\/dd>\n<dt id=\"can%20i%20customize%20the%20redirect%20prefix%20and%20drive%20list%3F\"><h3>Can I customize the redirect prefix and drive list?<\/h3><\/dt>\n<dd><p>Yes. You can change the redirect prefix in settings, and enable\/rename\/reorder providers in Drive management. There is also an Other type for custom links.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20depend%20on%20a%20specific%20theme%3F\"><h3>Does this plugin depend on a specific theme?<\/h3><\/dt>\n<dd><p>No. CosmautDL uses WordPress routing and template hooks and aims to be compatible with most themes. If your theme or cache plugin is aggressive, clear caches after changes.<\/p><\/dd>\n<dt id=\"is%20multisite%20supported%3F\"><h3>Is multisite supported?<\/h3><\/dt>\n<dd><p>CosmautDL is primarily tested on single-site installations. For multisite, please test in a staging site first.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>2026-03-18 Maintenance: Align plugin version\/readme stable tag, keep Text Domain consistency, and prepare stable release metadata for WordPress.org translation package generation.<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>2026-02-14 Maintenance: Tested up to WordPress 6.9, minor code improvements and compatibility enhancements.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>2026-01-25 Maintenance: Bundle on-site QR code generation library for unlock QR rendering and tighten admin capability checks.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>2026-01-15 Security: Comprehensive security hardening including SQL injection fix, AJAX URL hardcoding removal, nonce verification for download redirects, and full AJAX handler nonce checks.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>2026-01-10 Security: Add nonce verification for admin AJAX actions.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>2026-01-06 Fix download stats details expansion and ensure click logs capture IP\/UA.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>2026-01-03 Smart recognition of cloud drive links in the editor meta box.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>2026-01-02 Initial release with download page, file tree, and click statistics.<\/li>\n<\/ul>","raw_excerpt":"Multi-cloud download manager: unified download cards, dedicated download pages, a file-tree index, and click statistics.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/272858","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=272858"}],"author":[{"embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/cosmaut"}],"wp:attachment":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=272858"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=272858"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=272858"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=272858"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=272858"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=272858"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}