{"id":350135,"date":"2026-08-24T06:35:49","date_gmt":"2026-08-24T06:35:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/npcink-site-toolbox\/"},"modified":"2026-08-24T06:35:18","modified_gmt":"2026-08-24T06:35:18","slug":"npcink-site-toolbox","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/npcink-site-toolbox\/","author":16786901,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"3.3.2","stable_tag":"3.3.2","tested":"7.1","requires":"6.3","requires_php":"7.4","requires_plugins":null,"header_name":"Npcink Site Toolbox","header_author":"Npcink","header_description":"An opt-in toolbox for site settings, media, SEO, security, integrations, diagnostics, and maintenance.","assets_banners_color":"","last_updated":"2026-08-24 06:35:18","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/www.npc.ink\/","header_plugin_uri":"https:\/\/www.npc.ink\/277510.html","header_author_uri":"https:\/\/www.npc.ink\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":48,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"3.3.2":{"tag":"3.3.2","author":"muze233","date":"2026-08-24 06:35:18"}},"upgrade_notice":{"3.3.0":"<p>Adds opt-in read-only AI diagnostics and authenticated self-service comment tools, fixes module activation contracts, bounds search-statistics storage, and strengthens release security gates. Review the documented external-service and HTTPS requirements before enabling the new features.<\/p>","3.2.0":"<p>Requires WordPress 6.3 or later and adds editor-native patterns, a live site-statistics block, and a GitHub project block.<\/p>","3.1.1":"<p>Fixes configured compliance notices and makes restricted-content output more reliable.<\/p>","3.1.0":"<p>Public identity is now Npcink Site Toolbox. Existing settings keys are unchanged; no reset or data migration is required.<\/p>","3.0.1":"<p>This release aligns public WordPress.org metadata and documentation. It does not reset existing settings or change runtime option keys.<\/p>","3.0.0":"<p>\u8fd9\u662f Pre-GA clean-break \u57fa\u7ebf\uff0c\u4e0d\u63d0\u4f9b\u65e7\u540e\u53f0\u6216\u5df2\u6e05\u9000\u529f\u80fd\u7684\u517c\u5bb9\u5165\u53e3\u3002\u5347\u7ea7\u540e\u8bf7\u91cd\u65b0\u6838\u5bf9\u8bbe\u7f6e\uff0c\u5e76\u5728\u542f\u7528\u9ad8\u98ce\u9669\u7ef4\u62a4\u80fd\u529b\u524d\u5b8c\u6210\u9884\u89c8\u548c\u786e\u8ba4\u3002<\/p>","2.6.1":"<p>\u4fee\u590d\u641c\u7d22\u5065\u5eb7\u91c7\u96c6\u94fe\u8def\u3001REST \u6743\u9650\u6a21\u578b\u3001\u7248\u672c\u4e00\u81f4\u6027\u3002\u5efa\u8bae\u6240\u6709\u7528\u6237\u5347\u7ea7\u3002<\/p>","2.6.0":"<p>\u5efa\u8bae\u6240\u6709\u7528\u6237\u5347\u7ea7\u3002\u672c\u6b21\u66f4\u65b0\u4fee\u590d\u767e\u5ea6\u63a8\u9001\u548c\u641c\u7d22\u589e\u5f3a\u6a21\u5757\u8bed\u6cd5\u9519\u8bef\uff0c\u65b0\u589e\u9996\u6b21\u914d\u7f6e\u5411\u5bfc\u548c\u56fd\u5185\u73af\u5883\u9002\u914d\uff0c\u52a0\u5f3a\u9ad8\u98ce\u9669\u529f\u80fd\u6cbb\u7406\u3002<\/p>","2.5.0":"<p>\u5efa\u8bae\u6240\u6709\u7528\u6237\u5347\u7ea7\u3002\u672c\u6b21\u66f4\u65b0\u65b0\u589e\u7ad9\u70b9\u4f53\u68c0\u4e2d\u5fc3\u3001\u4fdd\u5b58\u524d\u53d8\u66f4\u786e\u8ba4\u3001\u6a21\u5757\u7ea7\u6062\u590d\u7b49\u529f\u80fd\uff0c\u5347\u7ea7\u540e\u5efa\u8bae\u8fdb\u5165 Dashboard \u67e5\u770b\u4f53\u68c0\u7ed3\u679c\u5e76\u91cd\u65b0\u4fdd\u5b58\u4e00\u6b21\u8bbe\u7f6e\u3002<\/p>","2.4.0":"<p>\u5efa\u8bae\u6240\u6709\u7528\u6237\u5347\u7ea7\u3002\u672c\u6b21\u66f4\u65b0\u5305\u542b\u5b89\u5168\u52a0\u56fa\u548c\u67b6\u6784\u4f18\u5316\uff0c\u5efa\u8bae\u5347\u7ea7\u540e\u91cd\u65b0\u4fdd\u5b58\u4e00\u6b21\u8bbe\u7f6e\u3002<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":{"npcink\/site-stats":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"npcink\/site-stats","version":"3.3.2","title":"\u7ad9\u70b9\u6570\u636e","category":"npcink-site-toolbox","icon":"chart-bar","description":"\u5c55\u793a\u6587\u7ae0\u3001\u8bc4\u8bba\u3001\u5206\u7c7b\u548c\u7528\u6237\u6570\u91cf\uff0c\u5e76\u59cb\u7ec8\u8bfb\u53d6\u5f53\u524d\u7ad9\u70b9\u6570\u636e\u3002","keywords":["\u7edf\u8ba1","\u6570\u636e","\u7ad9\u70b9"],"textdomain":"npcink-site-toolbox","attributes":{"title":{"type":"string","default":"\u7ad9\u70b9\u6570\u636e"},"showPosts":{"type":"boolean","default":true},"showComments":{"type":"boolean","default":true},"showCategories":{"type":"boolean","default":true},"showUsers":{"type":"boolean","default":true}},"supports":{"html":false,"align":["wide","full"],"anchor":true,"color":{"background":true,"text":true},"spacing":{"margin":true,"padding":true}},"editorScript":"file:.\/index.js","style":"file:.\/style.css"},"npcink\/github-project":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"npcink\/github-project","version":"3.3.2","title":"GitHub \u9879\u76ee","category":"npcink-site-toolbox","icon":"admin-links","description":"\u5c55\u793a\u516c\u5f00 GitHub \u4ed3\u5e93\u7684\u63cf\u8ff0\u3001\u4e3b\u8981\u8bed\u8a00\u3001Stars \u548c Forks\u3002","keywords":["GitHub","\u5f00\u6e90","\u9879\u76ee","\u4ed3\u5e93"],"textdomain":"npcink-site-toolbox","attributes":{"repositoryUrl":{"type":"string","default":""},"customDescription":{"type":"string","default":""}},"supports":{"html":false,"align":["wide","full"],"anchor":true,"color":{"background":true,"text":true},"spacing":{"margin":true,"padding":true}},"editorScript":"file:.\/index.js","style":"file:.\/style.css"}},"tagged_versions":["3.3.2"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Overview with live diagnostics, search health, and task-oriented navigation.","2":"Site and Media settings with clear labels and opt-in controls.","3":"Maintenance tools with preview-first safeguards for irreversible database cleanup."}},"plugin_section":[],"plugin_tags":[187,247,600,23575],"plugin_category":[52,54],"plugin_contributors":[265919],"plugin_business_model":[],"class_list":["post-350135","plugin","type-plugin","status-publish","hentry","plugin_tags-optimization","plugin_tags-performance","plugin_tags-security","plugin_tags-toolbox","plugin_category-performance","plugin_category-security-and-spam-protection","plugin_contributors-muze233","plugin_committers-muze233"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/npcink-site-toolbox.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Npcink Site Toolbox is a utility plugin for WordPress site owners. Version 3.3.2 provides 56 registered modules: 55 opt-in modules and one always-loaded runtime module, plus three editor patterns and two dynamic blocks. Features cover site and media settings, content and SEO, login and comment safeguards, China-focused integrations, diagnostics, and maintenance.<\/p>\n\n<h4>Current features<\/h4>\n\n<ul>\n<li>Seven admin views: Overview, Site and Media, Content and Pages, SEO and Enhancements, China Ecosystem, Maintenance Tools, and About and Help.<\/li>\n<li>Site and media: link, upload, image, admin-list, and optional CDN settings.<\/li>\n<li>Content and SEO: comment controls, restricted content, reading tools, metadata, internal links, search health, and publishing statistics.<\/li>\n<li>Security: login-attempt protection and anonymous author-enumeration protection.<\/li>\n<li>China-focused integrations: ICP information, WeChat JSSDK, cookie notice, and optional object storage.<\/li>\n<li>Maintenance: diagnostics, SEO checks, media health, and guarded database cleanup.<\/li>\n<li>Admin experience: feature search, risk labels, change confirmation, secret-status handling, and responsive layouts.<\/li>\n<li>Editor tools: three core-block patterns, a live site-statistics block, and a GitHub project block with cached public repository metadata plus an optional author-written summary.<\/li>\n<li>Public source and reproducible build instructions: <a href=\"https:\/\/github.com\/npcink\/npcink-site-toolbox#readme\">GitHub repository<\/a>.<\/li>\n<\/ul>\n\n<h4>Important behavior<\/h4>\n\n<p>All modules that contact a third party are disabled by default. An administrator must explicitly enable the related module or manually run a connectivity check. The plugin does not send telemetry to its developer.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>No external service is contacted merely by activating the plugin.<\/p>\n\n<h4>GitHub project block<\/h4>\n\n<p>Only after a content author inserts this block and supplies a public repository URL does the server call GitHub's \"Get a repository\" API on a cache miss. The endpoint is formed from the submitted public owner and repository names. The author may also save an optional custom project summary in the article; that summary is rendered locally and is not sent to GitHub. The request sends the public owner\/repository identifier, the site server's IP address, the plugin User-Agent, and normal HTTP headers to retrieve the repository description, primary language, Stars, Forks, and archive status. Successful responses are cached locally for up to 12 hours and failures for 30 minutes. No GitHub credentials, article content, custom summary, plugin settings, visitor IP address, or visitor browser request is sent. <a href=\"https:\/\/docs.github.com\/en\/rest\/repos\/repos#get-a-repository\">Service and endpoint documentation<\/a>, <a href=\"https:\/\/docs.github.com\/en\/site-policy\/github-terms\/github-terms-of-service\">GitHub Terms of Service<\/a>, <a href=\"https:\/\/docs.github.com\/en\/site-policy\/privacy-policies\/github-general-privacy-statement\">GitHub General Privacy Statement<\/a>.<\/p>\n\n<h4>WeChat JSSDK<\/h4>\n\n<p>When an administrator enables WeChat JSSDK and configures an AppID and AppSecret, the server sends those credentials to the WeChat token API and later sends the access token to the ticket API. On singular content, the visitor's browser loads the remote JSSDK and supplies the current URL, title, excerpt, and thumbnail URL for sharing. <a href=\"https:\/\/developers.weixin.qq.com\/doc\/offiaccount\/OA_Web_Apps\/JS-SDK.html\">Service<\/a>, <a href=\"https:\/\/weixin.qq.com\/cgi-bin\/readtemplate?lang=zh_CN&amp;t=weixin_agreement&amp;s=default\">terms<\/a>, <a href=\"https:\/\/weixin.qq.com\/cgi-bin\/readtemplate?lang=zh_CN&amp;t=weixin_agreement&amp;s=privacy\">privacy<\/a>.<\/p>\n\n<h4>Object storage<\/h4>\n\n<p>Before saving or enabling object storage, an administrator may explicitly run the connection test. It sends the selected provider the current saved or draft credentials, bucket, provider-specific endpoint or region, optional object-key prefix, signed authorization data, and a short text payload. The payload writes or overwrites <code>npcink-site-toolbox\/connection-test.txt<\/code>, placed below the configured prefix when one is present. The test object remains in the selected bucket; rerunning the test overwrites the same object instead of creating more objects. The test does not require a public media URL, save settings, or change the module's enabled state.<\/p>\n\n<p>When an administrator enables object storage and selects a provider, each new media upload sends the file bytes, prefixed object key, bucket, provider-specific endpoint or region, access-key identifier, and signed authorization data to that provider. Local media files are retained. The configured public URL prefix is used only to replace media URLs after every generated file uploads successfully. Saved credentials and target settings remain in the local WordPress database; unsaved draft credentials are used only for the administrator-triggered connection test. Providers: <a href=\"https:\/\/www.aliyun.com\/product\/oss\">Alibaba Cloud OSS<\/a> (<a href=\"https:\/\/terms.aliyun.com\/legal-agreement\/terms\/suit_bu1_ali_cloud\/suit_bu1_ali_cloud201912232313_55403.html\">terms<\/a>, <a href=\"https:\/\/terms.aliyun.com\/legal-agreement\/terms\/suit_bu1_ali_cloud\/suit_bu1_ali_cloud202107091605_49213.html\">privacy<\/a>); <a href=\"https:\/\/cloud.tencent.com\/product\/cos\">Tencent Cloud COS<\/a> (<a href=\"https:\/\/cloud.tencent.com\/document\/product\/301\/1967\">terms<\/a>, <a href=\"https:\/\/cloud.tencent.com\/document\/product\/301\/11470\">privacy<\/a>); <a href=\"https:\/\/www.qiniu.com\/products\/kodo\">Qiniu Kodo<\/a> (<a href=\"https:\/\/www.qiniu.com\/agreements\/user-agreement\">terms<\/a>, <a href=\"https:\/\/www.qiniu.com\/agreements\/privacy-right\">privacy<\/a>).<\/p>\n\n<h4>Baidu Analytics<\/h4>\n\n<p>When its module is enabled and a site ID is saved, front-end pages load Baidu Analytics. The visitor's browser may send the page URL, referrer, IP address, User-Agent, and data described by Baidu. <a href=\"https:\/\/tongji.baidu.com\/\">Service<\/a>, <a href=\"https:\/\/tongji.baidu.com\/web\/help\/article?id=314&amp;type=0\">terms<\/a>, <a href=\"https:\/\/tongji.baidu.com\/web\/help\/article?id=330&amp;type=0\">privacy<\/a>.<\/p>\n\n<h4>DeepSeek diagnostic analysis<\/h4>\n\n<p>This optional action requires WordPress 7.0 or newer and a separately installed and connected DeepSeek Provider. The AI tab offers troubleshooting, performance analysis, maintenance-result interpretation, pending-setting risk explanation, and before\/after verification. Only after an administrator reviews the relevant allowlisted snapshot or ordinary pending-setting paths and explicitly starts analysis does the server send data through the WordPress AI Client. An administrator may ask up to three follow-up questions under the same bounded allowlisted facts; each follow-up resends the original facts, initial answer, and completed follow-up turns. This temporary history exists only in the current browser page and is cleared by switching modes or refreshing. Performance data is a one-time snapshot rather than monitoring or load testing. Maintenance analysis may include aggregate database, SEO, media, search-health, and object-storage configuration facts; raw search terms are excluded. Setting analysis excludes every credential path and summarizes non-boolean strings by empty\/configured state and length rather than content. Verification baselines remain only in the current browser page. The diagnostic allowlist excludes site URLs, file paths, database identities, users, content, comments, request logs, and credentials. DeepSeek receives the server IP, normal HTTP headers, the prompt, and the API credential managed by WordPress Connectors and the provider plugin. Npcink Site Toolbox does not read that credential and does not persist goals, snapshots, baselines, follow-up history, or AI responses. No suggested action is performed automatically. <a href=\"https:\/\/www.deepseek.com\/\">DeepSeek<\/a>, <a href=\"https:\/\/cdn.deepseek.com\/policies\/en-US\/deepseek-open-platform-terms-of-service.html\">terms<\/a>, <a href=\"https:\/\/cdn.deepseek.com\/policies\/en-US\/deepseek-privacy-policy.html\">privacy<\/a>.<\/p>\n\n<p>Google Search Console and Bing Webmaster Tools options only print administrator-supplied verification meta tags. They do not make outbound requests. <a href=\"https:\/\/search.google.com\/search-console\/about\">Google service<\/a>, <a href=\"https:\/\/policies.google.com\/terms\">Google terms<\/a>, <a href=\"https:\/\/policies.google.com\/privacy\">Google privacy<\/a>; <a href=\"https:\/\/www.bing.com\/webmasters\/about\">Bing service<\/a>, <a href=\"https:\/\/www.microsoft.com\/servicesagreement\">Microsoft terms<\/a>, <a href=\"https:\/\/privacy.microsoft.com\/privacystatement\">Microsoft privacy<\/a>.<\/p>\n\n<h3>Source Code and Build<\/h3>\n\n<p>The public source matching this exact plugin release is published at tag <a href=\"https:\/\/github.com\/npcink\/npcink-site-toolbox\/tree\/v3.3.2\">v3.3.2<\/a>. The readable sources are in <a href=\"https:\/\/github.com\/npcink\/npcink-site-toolbox\/tree\/v3.3.2\/vite\/admin\/src\">vite\/admin\/src<\/a> and <a href=\"https:\/\/github.com\/npcink\/npcink-site-toolbox\/tree\/v3.3.2\/vite\/count\/src\">vite\/count\/src<\/a>, with the build manifest at <a href=\"https:\/\/github.com\/npcink\/npcink-site-toolbox\/blob\/v3.3.2\/vite\/package.json\">vite\/package.json<\/a>.<\/p>\n\n<p>Reproduce the Admin and Count assets with:<\/p>\n\n<pre><code>git clone https:\/\/github.com\/npcink\/npcink-site-toolbox.git\n\ncd npcink-site-toolbox\n\ngit checkout v3.3.2\n\ncd vite\n\ncorepack enable\n\npnpm install --frozen-lockfile\n\npnpm run build\n<\/code><\/pre>\n\n<p>The generated files are written to <code>vite\/admin\/dist\/<\/code> and <code>vite\/count\/dist\/<\/code>.<\/p>\n\n<p>The site-statistics and GitHub project block editor scripts are shipped as readable source in <code>blocks\/site-stats\/index.js<\/code> and <code>blocks\/github-project\/index.js<\/code>; they have no separate build step.<\/p>\n\n<h3>Privacy Policy<\/h3>\n\n<p>Search Health can store search terms and counters in the local WordPress database. Login protection, audit, and diagnostic features can store login failures, IP addresses, actions, and diagnostic results locally when enabled. Site administrators are responsible for an appropriate privacy notice and retention policy.<\/p>\n\n<p>The plugin does not automatically upload this local data or telemetry to its developer. Third-party requests occur only under the triggers documented in External Services. Credentials used by this plugin are stored in WordPress options and are sent only to the administrator-selected WeChat or object-storage provider when required for authentication. DeepSeek credentials are managed by WordPress Connectors and the separately installed provider plugin; Npcink Site Toolbox does not read or store them.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install the ZIP through Plugins &gt; Add Plugin &gt; Upload Plugin, or copy the plugin directory to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate Npcink Site Toolbox from the Plugins screen.<\/li>\n<li>Open Plugins &gt; Npcink Site Toolbox and enable only the features you need.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20support%20multisite%3F\"><h3>Does it support multisite?<\/h3><\/dt>\n<dd><p>The current release targets single-site installations. Multisite behavior is not guaranteed.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20every%20theme%3F\"><h3>Does it work with every theme?<\/h3><\/dt>\n<dd><p>No. Features that depend on theme markup are identified in the admin interface. Test them on a staging site before enabling them in production.<\/p><\/dd>\n<dt id=\"what%20happens%20on%20uninstall%3F\"><h3>What happens on uninstall?<\/h3><\/dt>\n<dd><p>Deactivate and delete the plugin. Its uninstall routine removes plugin options, scheduled tasks, temporary caches, comment moderation markers, and runtime-only attachment markers. It does not delete or rewrite media files, remote object-storage objects, posts, comments, or terms. WebP recovery metadata is retained so an already converted attachment does not lose the information needed to restore its original JPEG; restore converted media before uninstalling if you want the plugin to perform that rollback.<\/p><\/dd>\n<dt id=\"is%20it%20translation-ready%3F\"><h3>Is it translation-ready?<\/h3><\/dt>\n<dd><p>Yes. Its text domain is <code>npcink-site-toolbox<\/code>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>3.3.2<\/h4>\n\n<ul>\n<li>Release date: 2026-08-21.<\/li>\n<li>Escaped output returned by content, title, excerpt, and image filters according to its HTML context.<\/li>\n<li>Replaced dynamic PHP gettext calls in module metadata and privacy disclosures with literal translation mappings.<\/li>\n<li>Added release contracts for output filters, literal gettext arguments, and external-service disclosures.<\/li>\n<\/ul>\n\n<h4>3.3.1<\/h4>\n\n<ul>\n<li>Release date: 2026-08-17.<\/li>\n<li>Prefixed browser globals, localized objects, thumbnail AJAX actions, asset handles, nonce actions, and image-size names for WordPress.org compatibility.<\/li>\n<li>Made the readable Admin and Count sources and reproducible build contract explicit in the public readme and release verifier.<\/li>\n<li>Retired remote CDN URL rewriting, external connectivity checks, and automatic mirror-fix proposals; object-storage integrations are unchanged.<\/li>\n<li>Added the latest official Plugin Check to the exact-ZIP release gate.<\/li>\n<\/ul>\n\n<h4>3.3.0<\/h4>\n\n<ul>\n<li>Release date: 2026-08-13.<\/li>\n<li>Added read-only DeepSeek diagnostics through the WordPress AI Client, with allowlisted previews, five analysis modes, and up to three temporary follow-up turns under the same facts.<\/li>\n<li>Added an opt-in authenticated self-service comment REST API and browser fallback page; users can manage only their own comments with WordPress application passwords.<\/li>\n<li>Hardened WordPress.org packaging, portable ZIP verification, Plugin Check evidence, and documentation-link governance.<\/li>\n<li>Fixed activation through secondary switches in compound modules and loading of always-on modules on fresh installations.<\/li>\n<li>Bounded search-health write rate, daily unique terms, overflow aggregation, and serialized storage size.<\/li>\n<li>Upgraded ECharts and zrender to 6.1.0 and added production dependency auditing to CI.<\/li>\n<\/ul>\n\n<h4>3.2.0<\/h4>\n\n<ul>\n<li>Release date: 2026-07-18.<\/li>\n<li>Added editor patterns for resource downloads, article conclusions, and source\/copyright notes.<\/li>\n<li>Added a dynamic site-statistics block with live article, comment, category, and user counts.<\/li>\n<li>Added a dynamic GitHub project block with cached public repository metadata, an optional author-written summary, and a direct-link fallback.<\/li>\n<li>Reused one statistics provider across the site-statistics block and legacy widget instead of duplicating count logic.<\/li>\n<li>Kept the editor script as readable, build-free source so the block does not create another Vite target or Node dependency.<\/li>\n<li>Unified long admin settings pages with accessible, search-aware secondary tabs while keeping compact views direct.<\/li>\n<li>Added an overview guide with direct post and page editor links for using the bundled patterns and dynamic blocks.<\/li>\n<li>Grouped the dynamic blocks and bundled patterns under matching Npcink Site Toolbox inserter categories.<\/li>\n<li>Unified pre-release PHP identifiers and plugin-owned storage keys under the Npcink Site Toolbox identity without compatibility shims.<\/li>\n<li>Added a write-based object-storage connection test, provider-specific setup examples, and an explicit local-file retention notice.<\/li>\n<\/ul>\n\n<h4>3.1.1<\/h4>\n\n<ul>\n<li>Release date: 2026-07-18.<\/li>\n<li>Fixed configured Cookie notice text and now constructs the notice with safe DOM APIs.<\/li>\n<li>Linked the ICP registration number to the configured lookup URL.<\/li>\n<li>Rendered category, tag, and page restriction notices on the server and removed redundant front-end DOM replacement.<\/li>\n<li>Added runtime coverage for compliance and restricted-content behavior.<\/li>\n<\/ul>\n\n<h4>3.1.0<\/h4>\n\n<ul>\n<li>Release date: 2026-07-17.<\/li>\n<li>Unified the public identity as Npcink Site Toolbox.<\/li>\n<li>Aligned the plugin file, target WordPress.org slug, text domain, admin page, REST namespace, and release ZIP with <code>npcink-site-toolbox<\/code>.<\/li>\n<li>Added public-identity and release-package contract tests.<\/li>\n<li>Kept internal <code>MaBox_*<\/code> classes, <code>MAGICK_MIXTURE_*<\/code> constant names, and existing option keys unchanged; no settings migration or reset is required.<\/li>\n<\/ul>\n\n<h4>3.0.1<\/h4>\n\n<ul>\n<li>Release date: 2026-07-16.<\/li>\n<li>Changed the public plugin name to Magick Toolbox and aligned the WordPress.org slug and text domain to <code>magick-toolbox<\/code>.<\/li>\n<li>Completed the plugin header, documented external services and reproducible front-end builds, and removed screenshot captions that had no assets.<\/li>\n<li>Restored TLS certificate verification for connectivity checks and aligned automatic mirror suggestions with the documented Loli.net defaults.<\/li>\n<li>Kept existing runtime constants and option keys unchanged; this release does not migrate or reset settings.<\/li>\n<\/ul>\n\n<h4>3.0.0<\/h4>\n\n<ul>\n<li>\u53d1\u5e03\u65e5\u671f\uff1a2026-07-16<\/li>\n<li>Pre-GA clean break\uff1a\u540e\u53f0\u6536\u53e3\u4e3a\u4e03\u4e2a\u8bed\u4e49\u5316\u89c6\u56fe\u548c 57 \u4e2a\u6ce8\u518c\u6a21\u5757<\/li>\n<li>Registry \u4e0e\u914d\u7f6e Schema \u6210\u4e3a\u5355\u4e00\u4e8b\u5b9e\u6e90\uff0c\u524d\u7aef\u7c7b\u578b\u3001\u654f\u611f\u8def\u5f84\u548c\u641c\u7d22\u7d22\u5f15\u7531\u5951\u7ea6\u751f\u6210<\/li>\n<li>\u654f\u611f\u8bbe\u7f6e\u53ea\u8fd4\u56de\u914d\u7f6e\u72b6\u6001\uff0c\u66ff\u6362\u6216\u6e05\u9664\u5fc5\u987b\u663e\u5f0f\u63d0\u4ea4\uff1b\u4fdd\u5b58\u524d\u5c55\u793a\u771f\u5b9e\u5dee\u5f02\u4e0e\u98ce\u9669\u786e\u8ba4<\/li>\n<li>\u79fb\u9664 AI Provider Runtime\u3001\u4e0d\u53ef\u4fe1\u767b\u5f55\u9a8c\u8bc1\u7801\u3001\u9632\u722c\u866b\/\u9632\u6c34\u5899\u9057\u7559\u3001\u767e\u5ea6\u63a8\u9001\u548c\u65e0\u6d88\u8d39\u8005 REST \u8868\u9762<\/li>\n<li>\u7edf\u4e00\u7ba1\u7406 REST \u5ba2\u6237\u7aef\uff0c\u91cd\u5efa\u52a0\u8f7d\u3001\u9519\u8bef\u3001\u7a7a\u72b6\u6001\u3001\u952e\u76d8\u8def\u5f84\u548c\u79fb\u52a8\u7aef\u5e03\u5c40<\/li>\n<\/ul>\n\n<h4>2.6.1<\/h4>\n\n<ul>\n<li>PHPStan \u9759\u6001\u5206\u6790\u95e8\u7981\uff08CI \u4e0e\u672c\u5730\u547d\u4ee4\u7edf\u4e00\uff09<\/li>\n<li>\u641c\u7d22\u5065\u5eb7\u4e2d\u5fc3\uff1a\u5f00\u542f hotwords \u540e\u81ea\u52a8\u6302\u8f7d\u4e3b\u67e5\u8be2\u91c7\u96c6\u4e0e\u65e0\u7ed3\u679c\u8ffd\u8e2a<\/li>\n<li>REST \u641c\u7d22\u65e5\u5fd7\u7aef\u70b9\u517c\u5bb9 keyword \u53c2\u6570\uff0c\u79fb\u9664 check_ajax_referer \u4f9d\u8d56<\/li>\n<li>\u7248\u672c\u53f7\u540c\u6b65\u5230 2.6.1<\/li>\n<li>Vite base \u8def\u5f84\u4fee\u590d<\/li>\n<\/ul>\n\n<h4>2.6.0<\/h4>\n\n<ul>\n<li>\u4fee\u590d\u767e\u5ea6\u63a8\u9001\u6a21\u5757\u8bed\u6cd5\u9519\u8bef\uff08\u7c7b\u4f53\u63d0\u524d\u5173\u95ed\uff09<\/li>\n<li>\u4fee\u590d\u641c\u7d22\u589e\u5f3a\u6a21\u5757\u8bed\u6cd5\u9519\u8bef\uff08\u540c\u6a21\u5f0f\uff09<\/li>\n<li>\u4fee\u590d\u77ed\u4ee3\u7801\u8fd0\u884c\u5668\u8bed\u6cd5\u9519\u8bef\uff08PHP \u6807\u7b7e\u6df7\u5408\uff09<\/li>\n<li>\u4fee\u590d PHP 8.2 \u5e9f\u5f03\u8b66\u544a\uff08${var} \u2192 {$var}\uff09<\/li>\n<li>\u65b0\u589e\u5168\u91cf PHP \u8bed\u6cd5\u68c0\u67e5\u811a\u672c\uff08bin\/php-lint.sh\uff09<\/li>\n<li>\u65b0\u589e\u9996\u6b21\u914d\u7f6e\u5411\u5bfc\uff083 \u573a\u666f\uff1a\u535a\u5ba2\/\u4f01\u4e1a\/\u5185\u5bb9\u7ad9\uff09<\/li>\n<li>\u65b0\u589e\u4e00\u952e\u56fd\u5185\u73af\u5883\u9002\u914d\uff08\u68c0\u6d4b + \u4fee\u590d Gravatar\/Google Fonts\/Ajax\uff09<\/li>\n<li>\u4f53\u68c0\u4e2d\u5fc3\u65b0\u589e\"\u4e2d\u56fd\u8bbf\u95ee\u9002\u914d\"\u8bc4\u5206\u9879<\/li>\n<li>\u6570\u636e\u5e93\u6e05\u7406\u3001\u6570\u636e\u5e93\u5bfc\u51fa\u79fb\u5165\u9ad8\u98ce\u9669\u5c42\u7ea7<\/li>\n<li>SVG \u4e0a\u4f20\u79fb\u5165\u8fdb\u9636\u5c42\u7ea7<\/li>\n<li>\u9ad8\u98ce\u9669\u529f\u80fd\u9ed8\u8ba4\u6298\u53e0\uff0c\u5f00\u542f\u524d\u5fc5\u987b\u786e\u8ba4<\/li>\n<li>\u6570\u636e\u5e93\u6e05\u7406\u5fc5\u987b\u5148\u9884\u89c8\u518d\u6267\u884c<\/li>\n<li>\u4fee\u590d\u767b\u5f55\u5b89\u5168 IP \u9501\u5b9a IP \u4f2a\u9020\u98ce\u9669<\/li>\n<li>\u8bca\u65ad\u62a5\u544a\u5bfc\u51fa\u8131\u654f\uff08\u9690\u85cf API Key\/Secret\uff09<\/li>\n<li>\u7edf\u4e00 Dashboard \u53cc\u8bc4\u5206\u5361\u4e3a\u540e\u7aef\u8bca\u65ad\u9a71\u52a8<\/li>\n<li>\u65b0\u589e\"\u5bfc\u51fa\u8bca\u65ad\u62a5\u544a\u5e76\u53cd\u9988\"\u5f15\u5bfc\u5165\u53e3<\/li>\n<\/ul>\n\n<h4>2.5.0<\/h4>\n\n<ul>\n<li>\u65b0\u589e\u7ad9\u70b9\u4f53\u68c0\u4e2d\u5fc3\uff08\u540e\u7aef\u8bca\u65ad\u8bc4\u5206 + \u524d\u7aef Dashboard \u5c55\u793a\uff09<\/li>\n<li>\u4fdd\u5b58\u914d\u7f6e\u524d\u65b0\u589e diff \u786e\u8ba4\u5f39\u7a97\uff0c\u9ad8\u98ce\u9669\u53d8\u66f4\u6807\u7ea2\u63d0\u793a<\/li>\n<li>\u652f\u6301\u6309\u6a21\u5757\u6062\u590d\u9ed8\u8ba4\u503c\uff089 \u4e2a\u9876\u5c42\u6a21\u5757\uff09<\/li>\n<li>\u65b0\u589e\u8bca\u65ad\u62a5\u544a\u5bfc\u51fa\uff08Markdown \u683c\u5f0f\uff09<\/li>\n<li>\u4f18\u5316 3 \u4e2a\u5b98\u65b9\u63a8\u8350\u914d\u7f6e\u65b9\u6848\uff08\u535a\u5ba2\/\u4f01\u4e1a\/\u5185\u5bb9\u7ad9\uff09<\/li>\n<li>\u7edf\u4e00 REST response body \u683c\u5f0f<\/li>\n<li>\u4fee\u590d saveOption \u62fc\u5199\u9519\u8bef<\/li>\n<\/ul>\n\n<h4>2.4.0<\/h4>\n\n<ul>\n<li>\u91cd\u6784\u914d\u7f6e\u5c42\u67b6\u6784\uff0cREST API \u66ff\u4ee3 Ajax<\/li>\n<li>\u6dfb\u52a0 PHP Schema \u6821\u9a8c<\/li>\n<li>\u6dfb\u52a0\u5ba1\u8ba1\u65e5\u5fd7\u4e2d\u5fc3<\/li>\n<li>\u6dfb\u52a0\u9891\u7387\u9650\u5236\u5668<\/li>\n<li>\u6dfb\u52a0\u7ad9\u70b9\u5065\u5eb7\u68c0\u6d4b<\/li>\n<li>\u524d\u7aef\u6570\u636e\u6d41\u4f18\u5316<\/li>\n<li>\u7a33\u5b9a\u6027\u6574\u6539<\/li>\n<\/ul>\n\n<h4>2.3.0<\/h4>\n\n<ul>\n<li>\u6dfb\u52a0 AI \u5ba1\u6838\u5f15\u64ce<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>\u6dfb\u52a0\u56fd\u5185\u751f\u6001\u6a21\u5757<\/li>\n<li>\u6dfb\u52a0\u6027\u80fd\u4f18\u5316\u6a21\u5757<\/li>\n<li>\u914d\u7f6e\u62c6\u5206\u7ba1\u7406<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>\u914d\u7f6e\u5b58\u50a8\u62c6\u5206<\/li>\n<li>\u6dfb\u52a0\u6279\u91cf\u66ff\u6362\u529f\u80fd<\/li>\n<li>\u6dfb\u52a0\u6570\u636e\u5e93\u5bfc\u51fa\u5b89\u5168\u8131\u654f<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>\u5168\u65b0 React \u7ba1\u7406\u540e\u53f0<\/li>\n<li>\u6309\u9700\u52a0\u8f7d\u67b6\u6784<\/li>\n<li>Vite \u6784\u5efa\u5de5\u5177\u8fc1\u79fb<\/li>\n<\/ul>","raw_excerpt":"An opt-in toolbox for WordPress site settings, media, SEO, security, China-focused integrations, and maintenance.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/350135","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=350135"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/muze233"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=350135"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=350135"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=350135"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=350135"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=350135"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=350135"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}