| 开发者 | snagbane |
|---|---|
| 更新时间 | 2026年9月23日 04:19 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 7.1 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
/wp-content/plugins/snagbane-link-scanner, or install it directly through the WordPress plugins screen.Because a firewall-blocked response usually won't change no matter how many times an automated tool retries it -- the firewall is rejecting the checker, not reporting a real outage. Flagging it as "blocked, likely fine" tells you it's worth a quick manual look in a real browser, rather than an automatic "fix this" alarm for a page that's actually working.
No. Checks run in small batches on WordPress's background cron, separate from any page a visitor loads.
No. Link Scanner only reports verdicts; it never edits your post content or removes links on its own.
They're automatically cleaned up from the tracked list a set number of days after no longer being referenced anywhere, so the report doesn't accumulate stale entries forever.
Whatever WordPress is set to. Translations for German, Spanish, French, Italian, Portuguese (Brazil), Dutch, and Polish ship with the plugin; every other locale falls back to English. If a community translation for your language exists on translate.wordpress.org, WordPress uses that instead -- language packs take priority over the files bundled here, so contributing there improves the plugin for everyone rather than fighting with it. The verdict explanation in the "Why" column follows the language of whoever is reading the screen, not the language the check ran under. An administrator whose profile language is Polish sees Polish explanations even on a site running in German.
Domain Path header and a load_plugin_textdomain() call on init (not earlier -- WordPress 6.7 warns about textdomains loaded before init).Snagbane_Scanner_Reasons class.reason_code and reason_args, added in place by dbDelta(). No data is rewritten or lost, and the existing reason column is still written exactly as before.display:flex rule overrode the hidden attribute, so an empty progress bar sat on the screen on every page load until a scan was started._n() picks the plural form. Choosing between two forms in JavaScript is wrong for Polish, which has three.Plugin URI header pointed at this plugin's own wordpress.org listing page, which WordPress.org's own header requirements explicitly disallow ("you cannot use a WordPress.org URL here" -- that URL is assigned automatically and isn't meant to be self-referenced). Now points to linkscanner.snagbane.com.linkverdict.png) inside the vendored Freemius SDK's assets folder, and corrected a stale "linkverdict-premium/" example name in a code comment inside the SDK's own deliberately-modified class-freemius.php. Cosmetic only, but nothing carrying the plugin's old name should ship in the zip.Description field was 150 characters -- over WordPress.org's documented under-140-character limit for that specific header (a different field, with a different limit, from this readme's own short description line above, already fixed in 0.3.3). Shortened to 125 characters.License from the SPDX-style GPL-2.0-or-later to GPLv2 or later, matching both WordPress.org's own documented header example and this readme's License field, which already used that form.$_GET read added in 0.3.6 (the Add-Ons checkout-link fix) had its nonce-verification suppression comment placed so it only covered the first of two superglobal reads on adjacent lines -- the second was still flagged. Both are read-only, non-state-changing checks; the suppression now correctly covers both.current_time( 'timestamp' ) for human_time_diff() display and one cutoff calculation were flagged by an automated sniff that (correctly, in general) discourages that pattern -- but here it's deliberately the site's LOCAL time, matching how last_checked/orphaned_since are stored (current_time('mysql')), which is the same idiom WordPress core itself uses. Annotated with the sniff exception and the reasoning inline, so this doesn't show up as an unexplained finding in a future automated scan.$GLOBALS['post'] swap in the content-rendering scan (needed so third-party block/shortcode render callbacks that assume "the loop" is set up work correctly during a background scan) is a deliberately safe, always-restored pattern that a "no global overrides" sniff flags on principle. Annotated with the sniff exception and reasoning rather than left as an unexplained flag.match, enums, readonly properties, nullsafe chaining, or first-class callables) -- genuinely compatible with the declared "Requires PHP: 7.4", not just untested on it.SNAGBANE_SCANNER_VERSION constant had been left at 0.3.4 while the header above already said 0.3.5 -- a mismatch from the previous release that meant cache-busted asset URLs (?ver=...) and the stored upgrade-routine version check were one release behind the actual code. Both now read 0.3.6 consistently.$_GET check in the Freemius Add-Ons checkout-link fix compared raw superglobal values instead of sanitized ones (unlike the equivalent pattern already used elsewhere in this plugin). No functional impact -- brought in line with the rest of the codebase for Plugin Check consistency.snagbane---link-scanner (was snagbane---link-verdict), finishing the "Link Verdict" -> "Link Scanner" rename on the one identifier 0.3.4 had deliberately left alone. Done only after the matching slugs were already created on the Freemius dashboard itself, so this is a code change to match an already-live record, not a blind rename. Purely an internal licensing identifier -- not visible to site owners and no action needed on existing installs.linkverdict/linkverdict.php on the theory that they were separate from the public-facing rename in 0.3.3) are now snagbane-link-scanner throughout, so nothing in this plugin still carries the "Link Verdict" name WordPress.org's naming review flagged. All internal function, class, constant, and hook names updated to match (Snagbane_Scanner_* / snagbane_scanner_* / SNAGBANE_SCANNER_*). The Freemius product-identity slug (snagbane---link-verdict) is unrelated to any of this and is unchanged on purpose -- see this plugin's main file for why.Link ScannerAjax -- a space inside what needs to be a single JavaScript identifier. This silently broke the admin screen's AJAX nonce (and therefore "Check due links now", "Re-scan content now", and the per-row ignore/re-check actions) wherever the JS engine didn't just fall back to the plain form-POST path. Renamed to SnagbaneScannerAjax.<script> on the wp-admin Add-Ons "View version details" dialog (correcting the Pro add-on's per-plan checkout links) is now enqueued via wp_register_script() / wp_add_inline_script() instead of being printed directly. No behavior change.lv_fs) renamed to linkverdict_fs to match the plugin's own naming prefix throughout.