=== 4zero4 === Contributors: DevFabio Tags: 404, search, redirect, error page Requires at least: 6.5 Tested up to: 7.0 Stable tag: 1.2 Requires PHP: 7.4 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html Turn "page not found" (404) errors into a helpful search instead of a dead end. == Description == 4zero4 makes your 404 pages useful. When a visitor reaches a URL that no longer exists, the plugin builds a search query from the requested address and redirects the visitor to your site's search results, so they land on relevant content instead of an empty error page. For example, a request for `/my-old-product-name/` that no longer resolves is turned into a search for "my old product name". Key points: * **Zero configuration.** Activate it and it works. * **Temporary redirect (302).** The original URL may become valid again, so the redirect is never cached as permanently moved. * **Front-end only.** It never interferes with the admin area, feeds or the REST API, and only acts on normal GET page views. * **No external services.** The plugin does not send any data anywhere and does not use tracking or analytics. = Developer hooks = The behaviour can be customised with filters: * `p4zero4_search_terms` — change (or clear, to skip) the terms extracted from the URL. * `p4zero4_redirect_url` — change (or clear, to cancel) the destination URL. * `p4zero4_redirect_status` — change the HTTP status code (default `302`). == Installation == 1. Upload the `4zero4` folder to `/wp-content/plugins/`, or install the plugin from the Plugins screen in WordPress. 2. Activate the plugin through the "Plugins" menu in WordPress. 3. That's it — there are no settings. Any 404 will now redirect to a matching site search. == Frequently Asked Questions == = Does the plugin have a settings page? = No. It works out of the box with no configuration. = Why am I redirected with a 302 and not a 301? = A 404 is, by definition, temporary: the page might be restored later. A permanent 301 redirect would be cached by browsers and search engines and would be hard to undo. You can change the status code with the `p4zero4_redirect_status` filter. = Can I customise the search terms or the destination? = Yes. Use the `p4zero4_search_terms`, `p4zero4_redirect_url` and `p4zero4_redirect_status` filters described in the Description. = Does the plugin send any data to external services? = No. It performs a local redirect on your own site and contacts no third party. == Changelog == = 1.2 = * Security: the requested URL is now read, unslashed and sanitised safely instead of using a raw server variable. * Redirects now use `wp_safe_redirect()` with a temporary 302 status instead of a raw permanent 301 header. * Switched to the `template_redirect` hook and added guards for admin, feeds, REST and non-GET requests. * Added a guard against direct file access (ABSPATH check). * Added the `p4zero4_search_terms`, `p4zero4_redirect_url` and `p4zero4_redirect_status` filters. * Completed the plugin header (License, Text Domain, Requires at least, Requires PHP). * Rewrote the readme in English with full sections; fixed the Stable tag to match the plugin version. = 1.1 = * Previous public release. == Upgrade Notice == = 1.2 = Recommended security and reliability update: safe input handling, temporary (302) redirects via wp_safe_redirect(), and new developer filters.