This commit is contained in:
Javier Casares 2026-08-18 19:06:22 +00:00
commit 7ae471e27f
10 changed files with 1876 additions and 143 deletions

View file

@ -1,5 +1,76 @@
== Changelog ==
= 1.1.1 =
_Release date: 2026-08-18_
**Highlights**
* Security and reliability review of the 1.1.0 per-plugin Safe modes
**Added**
* The Plugins screen mode column is now a "Safe Mode" checkbox (checked = Safe, unchecked = Original) with an accessible hidden label and aria-label per row
**Fixed**
* The StellarWP telemetry blocks (iThemes Security, Kadence Blocks, The Events Calendar) are now actually applied: matchers without a host restriction were never reached, so those telemetry reports were silently sent despite Safe mode
**Changed**
* The profile registry is built once per request and cached, instead of being rebuilt on every outbound HTTP call
**Security**
* Full review of the new Plugins screen and Safe-mode guards (capabilities, nonces, multisite global-mode isolation, input whitelisting, output escaping, mock responses, caller attribution, uninstall cleanup) following OWASP and WordPress Plugin Security guidelines; no vulnerabilities found, and the findings above were addressed
**Compatibility**
* WordPress: 4.0 - 7.1
* PHP: 5.6 - 8.5
* MariaDB: 10.6+
* Multisite: compatible (Per-site and Global modes)
**Tests**
* WordPress 7.2-alpha-63320, PHP 8.5.9, MariaDB 11.8.8
* Verified live: path-only matcher application, host scoping, path constraints, per-request cache
* PHP Coding Standards: 3.13.6
* WordPress Coding Standards: 3.4.1
* PHPCompatibilityWP (PHP 5.6 - 8.5) and wp-since (WordPress 4.0) static reviews for the floor versions
= 1.1.0 =
_Release date: 2026-08-18_
**Highlights**
* Per-plugin Safe modes: the privacy reduction now extends beyond WordPress.org to the other installed plugins
**Added**
* "Plugins" screen (Telemetry → Plugins, and Network Admin → Telemetry → Plugins in Multisite global mode) listing every installed plugin with a known telemetry behavior in a table with the mode (Safe/Original per plugin, Safe by default), the plugin name, the installed version, the version the Safe profile was tested against, and the description of what is truncated; saved with a nonce- and capability-protected action
* Safe profiles for 99 popular plugins: usage trackers, analytics SDKs (Freemius, BSF analytics, Themeisle, Mixpanel, Appsero, StellarWP, WPMU DEV Hub), deactivation feedback surveys, and license-update extras are blocked or reduced to the minimum each service needs (license keys and account identifiers are kept), and the specific truncation is explained on every row
* Requests are attributed to the plugin that issues them through the caller backtrace, so endpoints shared by several plugins (api.wordpress.org, public-api.wordpress.com) never affect the others
**Changed**
* The Settings tab formerly shown as "Plugins" is now described as "Hidden plugins" to distinguish it from the new Plugins screen
**Compatibility**
* WordPress: 4.0 - 7.1
* PHP: 5.6 - 8.5
* MariaDB: 10.6+
* Multisite: compatible (Per-site and Global modes)
**Tests**
* WordPress 7.2-alpha-63320, PHP 8.5.9, MariaDB 11.8.8
* Verified live: blocking, query/body/header/User-Agent stripping, caller attribution, Original mode bypass, fake-slug rejection in the save handler
* PHP Coding Standards: 3.13.6
* WordPress Coding Standards: 3.4.1
= 1.0.1 =
_Release date: 2026-08-18_

View file

@ -47,24 +47,33 @@ if ( ! class_exists( 'Robotstxt_Telemetry_Admin' ) ) {
'dashicons-admin-generic'
);
add_submenu_page(
'robotstxt-telemetry',
__( 'Settings', 'robotstxt-telemetry' ),
__( 'Settings', 'robotstxt-telemetry' ),
'manage_options',
'robotstxt-telemetry',
array( $this, 'render_settings_page' )
);
add_submenu_page(
'robotstxt-telemetry',
__( 'Settings', 'robotstxt-telemetry' ),
__( 'Settings', 'robotstxt-telemetry' ),
'manage_options',
'robotstxt-telemetry',
array( $this, 'render_settings_page' )
);
add_submenu_page(
'robotstxt-telemetry',
__( 'Logs', 'robotstxt-telemetry' ),
__( 'Logs', 'robotstxt-telemetry' ),
'manage_options',
'robotstxt-telemetry-logs',
array( $this, 'render_logs_page' )
);
}
add_submenu_page(
'robotstxt-telemetry',
__( 'Plugins', 'robotstxt-telemetry' ),
__( 'Plugins', 'robotstxt-telemetry' ),
'manage_options',
'robotstxt-telemetry-plugins',
array( $this, 'render_plugins_page' )
);
add_submenu_page(
'robotstxt-telemetry',
__( 'Logs', 'robotstxt-telemetry' ),
__( 'Logs', 'robotstxt-telemetry' ),
'manage_options',
'robotstxt-telemetry-logs',
array( $this, 'render_logs_page' )
);
}
/**
* Register the Network Admin menus (Multisite only).
@ -87,16 +96,25 @@ if ( ! class_exists( 'Robotstxt_Telemetry_Admin' ) ) {
'dashicons-admin-generic'
);
add_submenu_page(
'robotstxt-telemetry',
__( 'Settings', 'robotstxt-telemetry' ),
__( 'Settings', 'robotstxt-telemetry' ),
'manage_network_options',
'robotstxt-telemetry',
array( $this, 'render_network_settings_page' )
);
add_submenu_page(
'robotstxt-telemetry',
__( 'Settings', 'robotstxt-telemetry' ),
__( 'Settings', 'robotstxt-telemetry' ),
'manage_network_options',
'robotstxt-telemetry',
array( $this, 'render_network_settings_page' )
);
if ( Robotstxt_Telemetry_Network::is_global() ) {
add_submenu_page(
'robotstxt-telemetry',
__( 'Plugins', 'robotstxt-telemetry' ),
__( 'Plugins', 'robotstxt-telemetry' ),
'manage_network_options',
'robotstxt-telemetry-plugins',
array( $this, 'render_plugins_page' )
);
if ( Robotstxt_Telemetry_Network::is_global() ) {
add_submenu_page(
'robotstxt-telemetry',
__( 'Logs', 'robotstxt-telemetry' ),
@ -245,6 +263,13 @@ if ( ! class_exists( 'Robotstxt_Telemetry_Admin' ) ) {
return;
}
if ( 'save_plugin_modes' === $action ) {
if ( 'robotstxt-telemetry-plugins' === $page ) {
$this->handle_plugin_modes_save();
}
return;
}
if ( 'robotstxt-telemetry-logs' !== $page ) {
return;
}
@ -733,6 +758,136 @@ if ( ! class_exists( 'Robotstxt_Telemetry_Admin' ) ) {
echo '</table>';
}
/**
* Render the Plugins page.
*/
public function render_plugins_page() {
$capability = Robotstxt_Telemetry_Network::is_global() ? 'manage_network_options' : Robotstxt_Telemetry_Network::manage_capability();
if ( ! current_user_can( $capability ) ) {
return;
}
if ( ! function_exists( 'get_plugins' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
$installed = get_plugins();
$profiles = Robotstxt_Telemetry_Plugin_Profiles::get_profiles();
$tested = Robotstxt_Telemetry_Plugin_Profiles::tested_versions();
$modes = Robotstxt_Telemetry_Network::get_plugin_modes();
$supported = array();
foreach ( $installed as $basename => $data ) {
$slug = dirname( $basename );
if ( isset( $profiles[ $slug ] ) && '.' !== $slug ) {
$supported[ $basename ] = $data;
}
}
?>
<div class="wrap">
<h1><?php esc_html_e( 'Telemetry - Plugins', 'robotstxt-telemetry' ); ?></h1>
<?php if ( isset( $_GET['updated'] ) ) : // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Read-only success flag. ?>
<div class="notice notice-success is-dismissible"><p><?php esc_html_e( 'Plugin modes saved.', 'robotstxt-telemetry' ); ?></p></div>
<?php endif; ?>
<p><?php esc_html_e( 'Every installed plugin with a known telemetry behavior is listed below. In Safe mode the known telemetry endpoints are blocked or reduced to the minimum data each service needs to work; in Original mode the plugin behaves exactly as it would without Telemetry disabler. The tested version is the plugin version the Safe profile was verified against.', 'robotstxt-telemetry' ); ?></p>
<form method="post" action="">
<input type="hidden" name="action" value="save_plugin_modes" />
<?php wp_nonce_field( 'robotstxt_telemetry_plugin_modes' ); ?>
<table class="widefat striped robotstxt-telemetry-plugin-modes" style="border: 1px solid #c3c4c7;">
<thead>
<tr>
<th scope="col"><?php esc_html_e( 'Safe Mode', 'robotstxt-telemetry' ); ?></th>
<th scope="col"><?php esc_html_e( 'Plugin', 'robotstxt-telemetry' ); ?></th>
<th scope="col"><?php esc_html_e( 'Actual version', 'robotstxt-telemetry' ); ?></th>
<th scope="col"><?php esc_html_e( 'Tested version', 'robotstxt-telemetry' ); ?></th>
<th scope="col"><?php esc_html_e( 'Description', 'robotstxt-telemetry' ); ?></th>
</tr>
</thead>
<tbody>
<?php foreach ( $supported as $basename => $data ) : ?>
<?php
$slug = dirname( $basename );
$mode = isset( $modes[ $slug ] ) && 'original' === $modes[ $slug ] ? 'original' : 'safe';
$name = isset( $data['Name'] ) && '' !== $data['Name'] ? $data['Name'] : $basename;
$actual = isset( $data['Version'] ) ? $data['Version'] : '';
$version = isset( $tested[ $slug ] ) ? $tested[ $slug ] : '';
$note = $profiles[ $slug ]['note'];
?>
<tr>
<td>
<input type="checkbox" name="robotstxt_telemetry_plugin_modes[<?php echo esc_attr( $slug ); ?>]" value="safe" aria-label="<?php echo esc_attr( sprintf( /* translators: %s: Plugin name. */ __( 'Safe Mode for %s', 'robotstxt-telemetry' ), $name ) ); ?>"<?php checked( $mode, 'safe' ); ?> />
<span class="screen-reader-text"><?php echo esc_html( sprintf( /* translators: %s: Plugin name. */ __( 'Safe Mode for %s', 'robotstxt-telemetry' ), $name ) ); ?></span>
</td>
<td><strong><?php echo esc_html( $name ); ?></strong></td>
<td><?php echo esc_html( $actual ); ?></td>
<td><?php echo esc_html( $version ); ?></td>
<td><?php echo esc_html( $note ); ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php submit_button( __( 'Save plugin modes', 'robotstxt-telemetry' ) ); ?>
</form>
</div>
<?php
}
/**
* Save the per-plugin safe-mode settings.
*/
private function handle_plugin_modes_save() {
check_admin_referer( 'robotstxt_telemetry_plugin_modes' );
if ( ! function_exists( 'get_plugins' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
$posted = isset( $_POST['robotstxt_telemetry_plugin_modes'] ) && is_array( $_POST['robotstxt_telemetry_plugin_modes'] ) ? wp_unslash( $_POST['robotstxt_telemetry_plugin_modes'] ) : array(); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput -- Each value is whitelisted below.
$profiles = Robotstxt_Telemetry_Plugin_Profiles::get_profiles();
$modes = array();
$installed = get_plugins();
foreach ( $posted as $slug => $mode ) {
$slug = sanitize_key( (string) $slug );
if ( ! isset( $profiles[ $slug ] ) ) {
continue;
}
$found = false;
foreach ( array_keys( $installed ) as $basename ) {
if ( dirname( $basename ) === $slug ) {
$found = true;
break;
}
}
if ( ! $found ) {
continue;
}
// Unchecked boxes mean Original mode; store Safe only for checked ones.
if ( 'safe' === $mode ) {
$modes[ $slug ] = 'safe';
} else {
$modes[ $slug ] = 'original';
}
}
Robotstxt_Telemetry_Network::update_setting( 'robotstxt_telemetry_plugin_modes', $modes );
wp_safe_redirect(
add_query_arg(
array(
'page' => 'robotstxt-telemetry-plugins',
'updated' => 'true',
),
Robotstxt_Telemetry_Network::base_url()
)
);
exit;
}
/**
* Render the Plugins tab contents.
*

View file

@ -46,6 +46,7 @@ if ( ! class_exists( 'Robotstxt_Telemetry_Network' ) ) {
'robotstxt_telemetry_wp_themes_check' => 'safe',
'robotstxt_telemetry_wp_plugins_check' => 'safe',
'robotstxt_telemetry_hidden_plugins' => array(),
'robotstxt_telemetry_plugin_modes' => array(),
'robotstxt_telemetry_retention_period' => '12hours',
'robotstxt_telemetry_delete_on_uninstall' => false,
);
@ -204,6 +205,29 @@ if ( ! class_exists( 'Robotstxt_Telemetry_Network' ) ) {
return array_values( array_unique( $hidden ) );
}
/**
* Get the per-plugin safe-mode map (slug => safe|original).
*
* @return array
*/
public static function get_plugin_modes() {
$modes = self::get_setting( 'robotstxt_telemetry_plugin_modes', array() );
return is_array( $modes ) ? $modes : array();
}
/**
* Get the mode of a single plugin (Safe by default).
*
* @param string $slug Plugin slug.
* @return string
*/
public static function get_plugin_mode( $slug ) {
$modes = self::get_plugin_modes();
return isset( $modes[ $slug ] ) && 'original' === $modes[ $slug ] ? 'original' : 'safe';
}
/**
* The User-Agent URL mode: 'url', 'hash' (default), or 'none'.
*

View file

@ -0,0 +1,373 @@
<?php
/**
* Per-plugin safe-mode enforcement.
*
* @package RobotstxtTelemetry
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( ! class_exists( 'Robotstxt_Telemetry_Plugin_Guards' ) ) {
/**
* Class Robotstxt_Telemetry_Plugin_Guards
*
* Applies the per-plugin Safe profiles: telemetry endpoints are blocked
* with a mock response, and environment parameters are stripped from the
* requests of the plugins running in Safe mode. Requests are attributed
* to a plugin through the caller backtrace.
*/
class Robotstxt_Telemetry_Plugin_Guards {
/**
* Re-entry guard for the proxy pattern.
*
* @var bool
*/
private static $busy = false;
/**
* Register hooks.
*/
public function register() {
add_filter( 'pre_http_request', array( $this, 'apply_guards' ), 4, 3 );
}
/**
* Apply the Safe profiles to an outbound request.
*
* @param false|array|WP_Error $preempt Preempt value.
* @param array $args Request arguments.
* @param string $url Request URL.
* @return false|array|WP_Error
*/
public function apply_guards( $preempt, $args, $url ) {
if ( false !== $preempt || self::$busy ) {
return $preempt;
}
$parsed = wp_parse_url( $url );
if ( empty( $parsed['host'] ) ) {
return $preempt;
}
$candidates = $this->match_profiles( $parsed['host'], isset( $parsed['path'] ) ? $parsed['path'] : '' );
if ( empty( $candidates ) ) {
return $preempt;
}
$slug = $this->find_calling_plugin( array_keys( $candidates ) );
if ( '' === $slug ) {
return $preempt;
}
$modified = false;
foreach ( $candidates[ $slug ] as $matcher ) {
$action = isset( $matcher['do'] ) ? $matcher['do'] : '';
if ( 'block' === $action ) {
return $this->mock_response( isset( $matcher['mock'] ) ? $matcher['mock'] : '{}' );
}
if ( 'strip_query' === $action ) {
$new_url = $this->strip_query_keys( $url, $matcher['keys'] );
if ( $new_url !== $url ) {
$url = $new_url;
$modified = true;
}
continue;
}
if ( 'strip_body' === $action ) {
$new_body = $this->strip_body_keys( $args, $matcher['keys'] );
if ( null !== $new_body ) {
$args['body'] = $new_body;
$modified = true;
}
continue;
}
if ( 'strip_headers' === $action ) {
$new_headers = $this->strip_header_keys( $args, $matcher['headers'] );
if ( null !== $new_headers ) {
$args['headers'] = $new_headers;
$modified = true;
}
continue;
}
if ( 'strip_ua' === $action ) {
$new_ua = $this->strip_user_agent( $args );
if ( null !== $new_ua ) {
$args['user-agent'] = $new_ua;
$modified = true;
}
continue;
}
}
if ( ! $modified ) {
return $preempt;
}
self::$busy = true;
$response = wp_remote_request( $url, $args );
self::$busy = false;
return $response;
}
/**
* Find the profiles whose matchers apply to this host and path.
*
* @param string $host Request host.
* @param string $path Request path.
* @return array Slug => list of matching matchers.
*/
private function match_profiles( $host, $path ) {
$candidates = array();
$profiles = Robotstxt_Telemetry_Plugin_Profiles::get_profiles();
foreach ( $profiles as $slug => $profile ) {
if ( 'safe' !== Robotstxt_Telemetry_Network::get_plugin_mode( $slug ) ) {
continue;
}
foreach ( $profile['matchers'] as $matcher ) {
if ( ! $this->host_matches( $host, $matcher ) ) {
continue;
}
if ( isset( $matcher['path'] ) && ! preg_match( $matcher['path'], $path ) ) {
continue;
}
$candidates[ $slug ][] = $matcher;
}
}
return $candidates;
}
/**
* Whether a matcher applies to the request host.
*
* Matchers without a host restriction (path-only) apply to any host;
* the caller attribution keeps them scoped to their own plugin.
*
* @param string $host Request host.
* @param array $matcher Matcher.
* @return bool
*/
private function host_matches( $host, $matcher ) {
if ( isset( $matcher['host'] ) ) {
return strtolower( $host ) === strtolower( $matcher['host'] );
}
if ( isset( $matcher['host_contains'] ) ) {
return false !== strpos( strtolower( $host ), strtolower( $matcher['host_contains'] ) );
}
return true;
}
/**
* Find which of the candidate plugins issued the request.
*
* @param array $slugs Candidate plugin slugs.
* @return string Plugin slug or an empty string.
*/
private function find_calling_plugin( $slugs ) {
// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_debug_backtrace -- File paths are required to attribute the request to its calling plugin.
$backtrace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS );
foreach ( $backtrace as $frame ) {
if ( empty( $frame['file'] ) || ! is_string( $frame['file'] ) ) {
continue;
}
$file = str_replace( '\\', '/', $frame['file'] );
foreach ( $slugs as $slug ) {
if ( false !== strpos( $file, '/plugins/' . $slug . '/' ) ) {
return $slug;
}
}
}
return '';
}
/**
* Build a mock response for a blocked endpoint.
*
* @param string $body Mock body.
* @return array
*/
private function mock_response( $body ) {
return array(
'headers' => array(),
'body' => $body,
'response' => array(
'code' => 200,
'message' => 'OK',
),
'cookies' => array(),
'filename' => '',
);
}
/**
* Remove keys from the URL query string.
*
* @param string $url Request URL.
* @param array $keys Keys to remove.
* @return string
*/
private function strip_query_keys( $url, $keys ) {
$parts = explode( '?', $url, 2 );
if ( count( $parts ) < 2 ) {
return $url;
}
$query = wp_parse_args( $parts[1] );
$lower = array_map( 'strtolower', array_values( $keys ) );
$kept = array();
foreach ( $query as $key => $value ) {
if ( ! in_array( strtolower( (string) $key ), $lower, true ) ) {
$kept[ $key ] = $value;
}
}
$rebuilt = http_build_query( $kept );
return '' === $rebuilt ? $parts[0] : $parts[0] . '?' . $rebuilt;
}
/**
* Remove keys from the request body.
*
* Returns null when nothing changed.
*
* @param array $args Request arguments.
* @param array $keys Keys to remove.
* @return mixed|null
*/
private function strip_body_keys( $args, $keys ) {
if ( ! isset( $args['body'] ) ) {
return null;
}
$body = $args['body'];
if ( is_array( $body ) ) {
$stripped = $this->remove_keys( $body, $keys );
return $stripped === $body ? null : $stripped;
}
if ( ! is_string( $body ) || '' === $body ) {
return null;
}
$decoded = json_decode( $body, true );
if ( is_array( $decoded ) ) {
$stripped = $this->remove_keys( $decoded, $keys );
if ( $stripped === $decoded ) {
return null;
}
return wp_json_encode( $stripped );
}
$parsed = wp_parse_args( $body );
if ( empty( $parsed ) ) {
return null;
}
$stripped = $this->remove_keys( $parsed, $keys );
if ( $stripped === $parsed ) {
return null;
}
return http_build_query( $stripped );
}
/**
* Remove keys from an array (case-insensitive).
*
* @param array $data Source array.
* @param array $keys Keys to remove.
* @return array
*/
private function remove_keys( $data, $keys ) {
$lower = array_map( 'strtolower', array_values( $keys ) );
$kept = array();
foreach ( $data as $key => $value ) {
if ( in_array( strtolower( (string) $key ), $lower, true ) ) {
continue;
}
$kept[ $key ] = $value;
}
return $kept;
}
/**
* Remove headers from the request arguments.
*
* @param array $args Request arguments.
* @param array $headers Header names to remove.
* @return array|null
*/
private function strip_header_keys( $args, $headers ) {
if ( ! isset( $args['headers'] ) || ! is_array( $args['headers'] ) ) {
return null;
}
$lower = array_map( 'strtolower', array_values( $headers ) );
$kept = array();
$found = false;
foreach ( $args['headers'] as $name => $value ) {
if ( in_array( strtolower( (string) $name ), $lower, true ) ) {
$found = true;
continue;
}
$kept[ $name ] = $value;
}
return $found ? $kept : null;
}
/**
* Reduce a WordPress User-Agent to "WordPress/<version>".
*
* Returns null when there is nothing to strip.
*
* @param array $args Request arguments.
* @return string|null
*/
private function strip_user_agent( $args ) {
if ( ! isset( $args['user-agent'] ) || ! is_string( $args['user-agent'] ) ) {
return null;
}
$ua = $args['user-agent'];
if ( preg_match( '#^([^;]+)#', $ua, $matches ) ) {
$trimmed = preg_replace( '#/\d+$#', '', $matches[1] );
if ( $trimmed !== $ua ) {
return $trimmed;
}
}
return null;
}
}
}

View file

@ -0,0 +1,662 @@
<?php
/**
* Per-plugin safe profiles.
*
* @package RobotstxtTelemetry
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( ! class_exists( 'Robotstxt_Telemetry_Plugin_Profiles' ) ) {
/**
* Class Robotstxt_Telemetry_Plugin_Profiles
*
* Registry of the telemetry behaviors observed in popular plugins. Each
* entry lists the request matchers used by the Safe mode and a human
* readable explanation of what is truncated and what is kept.
*
* Matcher fields:
* - host / host_contains: destination match.
* - path: regex matched against the request path.
* - do: block | strip_query | strip_body | strip_headers | strip_ua.
* - keys / headers: fields affected by strip_* actions.
*/
final class Robotstxt_Telemetry_Plugin_Profiles {
/**
* Cached profile registry (built once per request).
*
* @var array|null
*/
private static $cache = null;
/**
* Get every known profile, keyed by plugin slug.
*
* The array is built on demand so translations are loaded.
*
* @return array
*/
public static function get_profiles() {
if ( null !== self::$cache ) {
return self::$cache;
}
$freemius = self::freemius_matchers();
$bsf = self::bsf_matchers();
$isle = self::themeisle_matchers();
$mixpanel = self::mixpanel_matchers();
$wpmudev = self::wpmudev_matchers();
$profiles = array(
'ad-inserter' => array(
'matchers' => array( array( 'host' => 'analytics.adinserter.pro', 'do' => 'block' ) ),
'note' => __( 'Blocks the analytics.adinserter.pro telemetry (site URL, site name, WordPress and PHP versions, admin email, plugin list and options). Update checks keep working.', 'robotstxt-telemetry' ),
),
'all-in-one-seo-pack' => array(
'matchers' => array( array( 'host_contains' => 'aioseo', 'do' => 'strip_ua' ) ),
'note' => __( 'Removes the WordPress version and site URL from the API User-Agent. The connect flow keeps sending the site URL because it is the account identifier.', 'robotstxt-telemetry' ),
),
'all-in-one-wp-migration' => array(
'matchers' => array( array( 'host_contains' => 'servmask', 'do' => 'strip_query', 'keys' => array( 'site_url', 'admin_email' ) ) ),
'note' => __( 'Removes the site URL and the admin email from the extension update-check query. Extension updates keep working (they only need the purchased extension slug and version).', 'robotstxt-telemetry' ),
),
'antispam-bee' => array(
'matchers' => array(
array( 'host' => 'api.pluginkollektiv.org', 'do' => 'block' ),
array( 'host_contains' => 'iplocate.io', 'do' => 'block' ),
),
'note' => __( 'Blocks the comment-language check (which sends the comment text) and the IP country lookup. All the local spam checks keep working.', 'robotstxt-telemetry' ),
),
'astra-sites' => array(
'matchers' => array(
array( 'host_contains' => 'websitedemos', 'do' => 'strip_query', 'keys' => array( 'site_url', 'domain' ) ),
array( 'host_contains' => 'startertemplates', 'do' => 'strip_query', 'keys' => array( 'site_url', 'domain' ) ),
),
'note' => __( 'Removes the site URL from the starter-template requests. License validation keeps sending the site URL because it is the account identifier.', 'robotstxt-telemetry' ),
),
'autoptimize' => array(
'matchers' => array( array( 'host' => 'misc.optimizingmatters.com', 'do' => 'block' ) ),
'note' => __( 'Blocks the usage ping. The critical CSS service keeps receiving the page URL because generating the CSS for a page requires that page URL.', 'robotstxt-telemetry' ),
),
'backwpup' => array(
'matchers' => $mixpanel,
'note' => __( 'Blocks the Mixpanel telemetry events (which include the site host and versions). Backup destinations are admin-configured and untouched.', 'robotstxt-telemetry' ),
),
'better-wp-security' => array(
'matchers' => array( array( 'path' => '#/telemetry#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the StellarWP telemetry reports. The brute-force network and licensing keep working.', 'robotstxt-telemetry' ),
),
'breeze' => array(
'matchers' => array( array( 'host' => 'sitecheck.sucuri.net', 'do' => 'strip_headers', 'headers' => array( 'referer' ) ) ),
'note' => __( 'Removes the Referer header (your site URL) from the Sucuri site-check requests. The scan itself keeps working.', 'robotstxt-telemetry' ),
),
'broken-link-checker' => array(
'matchers' => $wpmudev,
'note' => __( 'Removes the WordPress version, home URL, plugin and theme lists from the WPMU DEV Hub payloads, and the site URL from the User-Agent. The Hub connection keeps the domain as the account identifier.', 'robotstxt-telemetry' ),
),
'broken-link-checker-seo' => array(
'matchers' => array( array( 'host_contains' => 'aioseo', 'do' => 'strip_ua' ) ),
'note' => __( 'Removes the WordPress version and site URL from the API User-Agent. Link analysis keeps working.', 'robotstxt-telemetry' ),
),
'burst-statistics' => array(
'matchers' => array( array( 'host' => 'api.burst-statistics.com', 'path' => '#/telemetry#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the aggregated statistics telemetry. License checks keep sending the site URL as the account identifier.', 'robotstxt-telemetry' ),
),
'call-now-button' => array(
'matchers' => array( array( 'host_contains' => 'callnowbutton', 'do' => 'strip_ua' ) ),
'note' => __( 'Removes the WordPress version, PHP version and site URL from the API User-Agent. All button features keep working.', 'robotstxt-telemetry' ),
),
'cartflows' => array(
'matchers' => array( array( 'host_contains' => 'cartflows', 'path' => '#nps|survey#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the NPS survey requests that automatically attach the admin name and email. Template downloads keep working.', 'robotstxt-telemetry' ),
),
'chaty' => array(
'matchers' => array( array( 'host_contains' => 'premioapps', 'do' => 'block' ) ),
'note' => __( 'Blocks the feedback and support pings that send the site URL. The chat channels keep working.', 'robotstxt-telemetry' ),
),
'click-to-chat-for-whatsapp' => array(
'matchers' => array( array( 'host_contains' => 'holithemes', 'path' => '#feedback|deactivat#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the deactivation feedback (WordPress version, PHP version, site URL, language, theme, plugin list, server software). Chat widgets keep working.', 'robotstxt-telemetry' ),
),
'code-snippets' => array(
'matchers' => array( array( 'host_contains' => 'codesnippets', 'do' => 'strip_query', 'keys' => array( 'site_host' ) ) ),
'note' => __( 'Removes the site host from the cloud search queries. Cloud search keeps working with the account token.', 'robotstxt-telemetry' ),
),
'coming-soon' => array(
'matchers' => array( array( 'host_contains' => 'seedprod', 'do' => 'strip_body', 'keys' => array( 'wp_version' ) ) ),
'note' => __( 'Removes the WordPress version from the license requests. The license key, site URL (account identifier) and installed version (needed for updates) are kept.', 'robotstxt-telemetry' ),
),
'contact-form-7-honeypot' => array(
'matchers' => $freemius,
'note' => __( 'Blocks the Freemius analytics events (plugin and theme lists, versions, site URL, language). License activation keeps working.', 'robotstxt-telemetry' ),
),
'cookie-law-info' => array(
'matchers' => array( array( 'host_contains' => 'webtoffe', 'path' => '#feedback#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the uninstall feedback (MySQL, WordPress and WooCommerce versions, locale, multisite flag). The cookie scanner keeps sending the scanned URLs because that is its function.', 'robotstxt-telemetry' ),
),
'cookie-notice' => array(
'matchers' => array( array( 'host' => 'hu-manity.co', 'path' => '#feedback|deactivat#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the deactivation feedback that sends the site URL. The notice and the account service keep working.', 'robotstxt-telemetry' ),
),
'copy-delete-posts' => array(
'matchers' => array( array( 'host' => 'feedback.sellcodes.com', 'do' => 'block' ) ),
'note' => __( 'Blocks the usage tracker (WordPress version, PHP version, server IP, MySQL version, locale, plugin list). Post duplication is fully local.', 'robotstxt-telemetry' ),
),
'creame-whatsapp-me' => array(
'matchers' => array( array( 'host_contains' => 'connectif', 'do' => 'strip_body', 'keys' => array( 'site', 'lang' ) ) ),
'note' => __( 'Removes the site URL and language from the newsletter subscribe. The admin-entered email is kept (it is an explicit subscription).', 'robotstxt-telemetry' ),
),
'custom-fonts' => array(
'matchers' => $bsf,
'note' => __( 'Blocks the BSF analytics report (site URL, WordPress/PHP/MySQL versions, user count, language, timezone, plugin list, server software). Font uploads are unaffected.', 'robotstxt-telemetry' ),
),
'disable-comments' => array(
'matchers' => array(
array( 'host' => 'send.wpinsight.com', 'do' => 'block' ),
array( 'host' => 'ip-api.com', 'do' => 'block' ),
),
'note' => __( 'Blocks the usage tracker and its country lookup (site URL, plugin slug, server IP). Comment disabling is fully local.', 'robotstxt-telemetry' ),
),
'easy-wp-smtp' => array(
'matchers' => array( array( 'host' => 'tools.keycdn.com', 'do' => 'strip_ua' ) ),
'note' => __( 'Removes the site URL from the geo-lookup User-Agent. Mail delivery keeps working with your mailer credentials only.', 'robotstxt-telemetry' ),
),
'elementor' => array(
'matchers' => array( array( 'host_contains' => 'elementor.com', 'path' => '#feedback#i', 'do' => 'strip_body', 'keys' => array( 'site_lang', 'api_version' ) ) ),
'note' => __( 'Removes the language and API version from the feedback surveys. The template library and the connect flow (site URL as account identifier) are untouched.', 'robotstxt-telemetry' ),
),
'elementskit-lite' => array(
'matchers' => array( array( 'host_contains' => 'wpmet', 'path' => '#unsubscribe#i', 'do' => 'strip_body', 'keys' => array( 'wp_version', 'php_version', 'site_url' ) ) ),
'note' => __( 'Removes the WordPress version, PHP version and site URL from the unsubscribe feedback. Widgets and modules are unaffected.', 'robotstxt-telemetry' ),
),
'enable-media-replace' => array(
'matchers' => array( array( 'host_contains' => 'shortpixel', 'do' => 'strip_body', 'keys' => array( 'DomainCheck', 'Info' ) ) ),
'note' => __( 'Removes the site URL and the WordPress/PHP version block from the ShortPixel key check. The API key alone is enough to validate the account.', 'robotstxt-telemetry' ),
),
'essential-addons-for-elementor-lite' => array(
'matchers' => array( array( 'host_contains' => 'wpdeveloper', 'path' => '#track#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the usage tracker (site URL, site name, WordPress version, language, PHP version, admin email). Elements and templates keep working.', 'robotstxt-telemetry' ),
),
'ewww-image-optimizer' => array(
'matchers' => array( array( 'host' => 'stats.exactlywww.net', 'do' => 'block' ) ),
'note' => __( 'Blocks the weekly check-in (plugin list, locale, WordPress version, OS, limits, image counts). Local and cloud optimization keep working.', 'robotstxt-telemetry' ),
),
'extendify' => array(
'matchers' => array(
array( 'host_contains' => 'extendify', 'do' => 'strip_body', 'keys' => array( 'wpVersion', 'wpLanguage', 'title', 'siteProfile' ) ),
array( 'host_contains' => 'extendify', 'do' => 'strip_headers', 'headers' => array( 'referer' ) ),
),
'note' => __( 'Removes the WordPress version, language, site title, site profile and Referer header from the AI requests. The AI assistance keeps working with the prompt content only.', 'robotstxt-telemetry' ),
),
'fluentform' => array(
'matchers' => array( array( 'host_contains' => 'fluentforms', 'path' => '#track#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the tracker (WordPress version, PHP version, MySQL version, server software, plugin list, admin email, IP). Form integrations keep working.', 'robotstxt-telemetry' ),
),
'fluent-smtp' => array(
'matchers' => array( array( 'host_contains' => 'fluentsmtp.com', 'path' => '#push|notify#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the opt-in ping and the failed-mail notifications (which include email metadata). Mail delivery keeps working with your mailer credentials only.', 'robotstxt-telemetry' ),
),
'formidable' => array(
'matchers' => array( array( 'host' => 'usage2.formidableforms.com', 'do' => 'block' ) ),
'note' => __( 'Blocks the usage snapshot (UUID, WordPress/PHP/MySQL versions, OS, locale, plugin list, form counts) and the onboarding email collection. Forms keep working.', 'robotstxt-telemetry' ),
),
'forminator' => array(
'matchers' => $wpmudev,
'note' => __( 'Removes the WordPress version, home URL, plugin and theme lists from the WPMU DEV Hub payloads, and the site URL from the User-Agent. The domain is kept as the account identifier.', 'robotstxt-telemetry' ),
),
'google-analytics-dashboard-for-wp' => array(
'matchers' => array( array( 'host_contains' => 'miusage', 'do' => 'block' ) ),
'note' => __( 'Blocks the check-in (plugin list, locale, home URL). Your Google Analytics measurement keeps working.', 'robotstxt-telemetry' ),
),
'google-analytics-for-wordpress' => array(
'matchers' => array( array( 'host_contains' => 'miusage', 'do' => 'block' ) ),
'note' => __( 'Blocks the check-in (plugin list, locale, home URL). Your Google Analytics measurement keeps working.', 'robotstxt-telemetry' ),
),
'google-site-kit' => array(
'matchers' => array( array( 'host_contains' => 'withgoogle', 'do' => 'strip_body', 'keys' => array( 'platform_version', 'php_version', 'user_count' ) ) ),
'note' => __( 'Removes the WordPress version, PHP version and user count from the Site Kit feature reports. Search Console, Analytics and AdSense integrations keep working.', 'robotstxt-telemetry' ),
),
'google-sitemap-generator' => array(
'matchers' => array(
array( 'host' => 'ssl.google-analytics.com', 'do' => 'block' ),
array( 'host_contains' => 'auctollo', 'do' => 'block' ),
),
'note' => __( 'Blocks the Google Analytics usage ping and the beta-consent ping (WordPress version, PHP version, post count, email, domain, language). Search-engine pings keep working.', 'robotstxt-telemetry' ),
),
'happy-elementor-addons' => array(
'matchers' => array( array( 'host' => 'api.appsero.com', 'path' => '#insights|stats#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the Appsero insights (site URL, PHP version, MySQL, server software, WordPress version). License and update checks keep working.', 'robotstxt-telemetry' ),
),
'header-footer-elementor' => array(
'matchers' => $bsf,
'note' => __( 'Blocks the BSF analytics report (site URL, PHP/WordPress versions, network URL, plugin list). Header and footer builder keep working.', 'robotstxt-telemetry' ),
),
'hostinger' => array(
'matchers' => array( array( 'host_contains' => 'hostinger.io', 'path' => '#events#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the event reporting that sends your domain. Hosting management actions keep working with your token.', 'robotstxt-telemetry' ),
),
'imagify' => array(
'matchers' => $mixpanel,
'note' => __( 'Blocks the Mixpanel telemetry events (which include the WordPress version). Image optimization keeps working with your API key.', 'robotstxt-telemetry' ),
),
'image-optimization' => array(
'matchers' => array( array( 'host_contains' => 'elementor.com', 'path' => '#notifications#i', 'do' => 'strip_body', 'keys' => array( 'site_lang' ) ) ),
'note' => __( 'Removes the language from the notifications requests. Image optimization and connect keep working.', 'robotstxt-telemetry' ),
),
'instagram-feed' => array(
'matchers' => array(
array( 'host_contains' => 'smashballoon', 'path' => '#usage|checkin#i', 'do' => 'block' ),
array( 'host_contains' => 'sbswapi', 'path' => '#usage|checkin#i', 'do' => 'block' ),
),
'note' => __( 'Blocks the usage check-in (environment payload with a site-URL User-Agent). Feeds keep working with your access tokens.', 'robotstxt-telemetry' ),
),
'jeg-elementor-kit' => array(
'matchers' => array_merge(
$freemius,
array( array( 'host_contains' => 'jegtheme', 'path' => '#newsletter#i', 'do' => 'strip_body', 'keys' => array( 'domain' ) ) )
),
'note' => __( 'Blocks the Freemius analytics events and removes the domain from the newsletter subscribe. Templates and elements keep working.', 'robotstxt-telemetry' ),
),
'kadence-blocks' => array(
'matchers' => array( array( 'path' => '#/telemetry#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the StellarWP telemetry reports. Blocks, AI features and the template library keep working.', 'robotstxt-telemetry' ),
),
'mailchimp-for-woocommerce' => array(
'matchers' => array( array( 'host' => 'tower.vextras.com', 'do' => 'block' ) ),
'note' => __( 'Blocks the support ping and wizard reporting (store name, domain, list data). Order and subscriber synchronization keep working.', 'robotstxt-telemetry' ),
),
'mailpoet' => array(
'matchers' => array( array( 'host' => 'public-api.wordpress.com', 'path' => '#/tracks/#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the Tracks analytics worker. Newsletter sending and subscribers keep working.', 'robotstxt-telemetry' ),
),
'meta-box' => array(
'matchers' => array(
array( 'host' => 'metabox.io', 'do' => 'strip_query', 'keys' => array( 'wp_version', 'php_version', 'language' ) ),
),
'note' => __( 'Removes the WordPress version, PHP version and language from the updater requests. The license key and site URL (account identifier) are kept.', 'robotstxt-telemetry' ),
),
'metform' => array(
'matchers' => array( array( 'host' => 'api.wpmet.com', 'path' => '#/public/#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the onboarding data sender (plugin and theme lists). Form integrations keep working.', 'robotstxt-telemetry' ),
),
'nextgen-gallery' => array(
'matchers' => array( array( 'host' => 'evusage.enviragallery.com', 'do' => 'block' ) ),
'note' => __( 'Blocks the usage tracking (PHP version, WordPress version, server software, home URL, theme, admin email, settings). Galleries keep working.', 'robotstxt-telemetry' ),
),
'ninja-forms' => array(
'matchers' => array( array( 'host_contains' => 'ninjaforms', 'do' => 'strip_body', 'keys' => array( 'site_data', 'nf_be_data' ) ) ),
'note' => __( 'Removes the site data block (site URL and server IP) from the dispatcher requests. Forms and add-on services keep working.', 'robotstxt-telemetry' ),
),
'ocean-extra' => array(
'matchers' => $freemius,
'note' => __( 'Blocks the Freemius analytics events (plugin and theme lists, versions, site URL, language). Demos and license activation keep working.', 'robotstxt-telemetry' ),
),
'otter-blocks' => array(
'matchers' => $isle,
'note' => __( 'Blocks the Themeisle tracker and SDK logger (theme, plugin list, WordPress version). Blocks keep working.', 'robotstxt-telemetry' ),
),
'password-protected' => array(
'matchers' => $freemius,
'note' => __( 'Blocks the Freemius analytics events (plugin and theme lists, versions, site URL, language). Password protection is fully local.', 'robotstxt-telemetry' ),
),
'pdf-embedder' => array(
'matchers' => array( array( 'host_contains' => 'wpauthusagetracking', 'do' => 'block' ) ),
'note' => __( 'Blocks the weekly usage report (home URL, PHP/WordPress/MySQL versions, server software, multisite, plugin list, theme, locale, license, settings). PDF embedding keeps working.', 'robotstxt-telemetry' ),
),
'pojo-accessibility' => array(
'matchers' => array( array( 'host_contains' => 'elementor.com', 'path' => '#notifications#i', 'do' => 'strip_body', 'keys' => array( 'site_lang' ) ) ),
'note' => __( 'Removes the language from the notifications requests. All accessibility widgets keep working.', 'robotstxt-telemetry' ),
),
'polylang' => array(
'matchers' => array(
array( 'host_contains' => 'polylang', 'do' => 'strip_body', 'keys' => array( 'php_version', 'language', 'locale' ) ),
array( 'host_contains' => 'polylang', 'do' => 'strip_query', 'keys' => array( 'php_version', 'language', 'locale' ) ),
),
'note' => __( 'Removes the PHP version and language from the Pro updater requests. The WordPress version, license and site URL (account identifier) are kept so updates keep working.', 'robotstxt-telemetry' ),
),
'popup-maker' => array(
'matchers' => array(
array( 'host_contains' => 'wppopupmaker', 'path' => '#telemetry#i', 'do' => 'block' ),
array( 'host_contains' => 'wppopupmaker', 'do' => 'strip_body', 'keys' => array( 'phpversion', 'php_version' ) ),
array( 'host' => 'ssl.google-analytics.com', 'do' => 'block' ),
),
'note' => __( 'Blocks the telemetry check-in and the Google Analytics usage events, and removes the PHP version from the extension updater requests. Popups keep working.', 'robotstxt-telemetry' ),
),
'post-smtp' => array(
'matchers' => array_merge(
$freemius,
array( array( 'host_contains' => 'postmansmtp', 'do' => 'strip_body', 'keys' => array( 'site_url' ) ) )
),
'note' => __( 'Blocks the Freemius analytics events and removes the site URL from the notification requests. Mail delivery keeps working.', 'robotstxt-telemetry' ),
),
'premium-addons-for-elementor' => array(
'matchers' => array(
array( 'host' => 'feedbackpa.leap13.com', 'do' => 'block' ),
array( 'host_contains' => 'premiumaddons', 'path' => '#install|uninstall#i', 'do' => 'block' ),
),
'note' => __( 'Blocks the feedback and install pings (locale, theme and plugin lists, site domain, memory limit, execution time, used widgets). All addons keep working.', 'robotstxt-telemetry' ),
),
'really-simple-ssl' => array(
'matchers' => array( array( 'host_contains' => 'reallysimplessl', 'path' => '#mailing#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the mailing-list subscribe (email, license, site URL). The vulnerability scan keeps sending your installed versions because checking them is its function.', 'robotstxt-telemetry' ),
),
'redux-framework' => array(
'matchers' => array( array( 'host' => 'redux.io', 'do' => 'strip_ua' ) ),
'note' => __( 'Removes the theme name from the font-converter User-Agent. Font conversion keeps working.', 'robotstxt-telemetry' ),
),
'royal-elementor-addons' => array(
'matchers' => array_merge(
$freemius,
array( array( 'host' => 'reastats.kinsta.cloud', 'do' => 'block' ) )
),
'note' => __( 'Blocks the Freemius analytics events and the usage events server. Templates and widgets keep working.', 'robotstxt-telemetry' ),
),
'seo-by-rank-math' => array(
'matchers' => $mixpanel,
'note' => __( 'Blocks the Mixpanel telemetry. Content AI and module updates keep working.', 'robotstxt-telemetry' ),
),
'sg-cachepress' => array(
'matchers' => array( array( 'host' => 'wpreports.sgvps.net', 'path' => '#collect_plugin_data#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the plugin-data telemetry (home URL, admin email, PHP version and limits, OS, WordPress version, user count, MySQL version, server software). Caching keeps working.', 'robotstxt-telemetry' ),
),
'sg-security' => array(
'matchers' => array( array( 'host' => 'wpreports.sgvps.net', 'path' => '#collect_plugin_data#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the plugin-data telemetry (home URL, admin email, PHP and WordPress versions, user count, MySQL version, server software). Security hardening keeps working.', 'robotstxt-telemetry' ),
),
'shortcodes-ultimate' => array(
'matchers' => $freemius,
'note' => __( 'Blocks the Freemius analytics events (plugin and theme lists, versions, site URL, language). Shortcodes are fully local.', 'robotstxt-telemetry' ),
),
'sticky-header-effects-for-elementor' => array(
'matchers' => array( array( 'host' => 'api.posimyth.com', 'path' => '#/track#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the Posimyth tracker (site URL, PHP version, plugin slugs, theme, install time). Header effects keep working.', 'robotstxt-telemetry' ),
),
'sucuri-scanner' => array(
'matchers' => array( array( 'host' => 'wp-plugin.sucuri.net', 'do' => 'strip_query', 'keys' => array( 'php', 'php_version' ) ) ),
'note' => __( 'Removes the PHP version from the API lookups. The WordPress version and the plugin/theme versions are kept because the integrity checks are the service itself.', 'robotstxt-telemetry' ),
),
'sureforms' => array(
'matchers' => $bsf,
'note' => __( 'Blocks the BSF analytics report (domain, PHP OS, server software, MySQL/PHP versions, WordPress version). Forms and the AI builder keep working.', 'robotstxt-telemetry' ),
),
'surerank' => array(
'matchers' => $bsf,
'note' => __( 'Blocks the BSF analytics report (domain, PHP OS, server software, MySQL/PHP versions, WordPress version). SEO analysis keeps working.', 'robotstxt-telemetry' ),
),
'tablepress' => array(
'matchers' => $freemius,
'note' => __( 'Blocks the Freemius analytics events (plugin and theme lists, versions, site URL, language). Tables are fully local.', 'robotstxt-telemetry' ),
),
'templately' => array(
'matchers' => array( array( 'host_contains' => 'templately', 'do' => 'strip_headers', 'headers' => array( 'x-templately-ip', 'x-templately-url', 'x-templately-version' ) ) ),
'note' => __( 'Removes the server IP, site URL and version headers from every API request. Template downloads keep working with your token.', 'robotstxt-telemetry' ),
),
'the-events-calendar' => array(
'matchers' => array(
array( 'path' => '#/telemetry#i', 'do' => 'block' ),
array( 'host_contains' => 'tri.be', 'do' => 'strip_body', 'keys' => array( 'wp_version', 'phpversion', 'php_version', 'user_count', 'users' ) ),
),
'note' => __( 'Blocks the StellarWP telemetry and removes the WordPress version, PHP version and user counts from the license/update validation. The domain is kept as the account identifier.', 'robotstxt-telemetry' ),
),
'translatepress-multilingual' => array(
'matchers' => array( array( 'host_contains' => 'translatepress', 'path' => '#sync#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the weekly sync and the opt-in subscribe (home URL, email, name, plugin list, WordPress version, locale, PHP version). Translations keep working.', 'robotstxt-telemetry' ),
),
'unlimited-elements-for-elementor' => array(
'matchers' => $freemius,
'note' => __( 'Blocks the Freemius analytics events (plugin and theme lists, versions, site URL, language). Widgets keep working.', 'robotstxt-telemetry' ),
),
'updraftplus' => array(
'matchers' => array( array( 'host' => 'ipinfo.io', 'do' => 'strip_headers', 'headers' => array( 'referer' ) ) ),
'note' => __( 'Removes the Referer header (your network site URL) from the IP info lookups. Backups go to the destinations you configured.', 'robotstxt-telemetry' ),
),
'w3-total-cache' => array(
'matchers' => array( array( 'host' => 'api.w3-edge.com', 'path' => '#survey#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the survey requests that include the home URL and email. CDN and cache configuration keep working.', 'robotstxt-telemetry' ),
),
'woo-cart-abandonment-recovery' => array(
'matchers' => $bsf,
'note' => __( 'Blocks the BSF analytics report (WordPress version, PHP version, locale, site URL). Cart tracking and webhooks keep working.', 'robotstxt-telemetry' ),
),
'woo-checkout-field-editor-pro' => array(
'matchers' => array( array( 'host' => 'feedback.themehigh.in', 'do' => 'block' ) ),
'note' => __( 'Blocks the feedback requests (server software, PHP version, MySQL version, WordPress and WooCommerce versions, locale, multisite). Checkout fields keep working.', 'robotstxt-telemetry' ),
),
'woocommerce' => array(
'matchers' => array( array( 'host' => 'pixel.wp.com', 'path' => '#\.gif#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the WooCommerce.com Tracks pixel (usage analytics). Store functionality and woocommerce.com connections keep working.', 'robotstxt-telemetry' ),
),
'woocommerce-payments' => array(
'matchers' => array( array( 'host' => 'pixel.wp.com', 'path' => '#\.gif#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the WooPay tracker pixel. Payments keep working.', 'robotstxt-telemetry' ),
),
'woo-variation-swatches' => array(
'matchers' => array( array( 'host_contains' => 'getwooplugins', 'path' => '#feedback#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the deactivation feedback (PHP version, WordPress version, server info, plugin list, theme, settings). Swatches keep working.', 'robotstxt-telemetry' ),
),
'wp-file-manager' => array(
'matchers' => array(
array( 'host' => 'filemanagerpro.io', 'do' => 'strip_body', 'keys' => array( 'SITE_URL', 'PHP_version', 'wp_version', 'HTTP_USER_AGENT', 'PHP_ini_max_execution_time', 'PHP_ini_memory_limit', 'PHP_ini_post_max_size', 'PHP_ini_upload_max_filesize' ) ),
),
'note' => __( 'Removes the site URL, PHP and WordPress versions, user agent and PHP limits from the plugin-server requests. File management keeps working.', 'robotstxt-telemetry' ),
),
'wpforms-lite' => array(
'matchers' => array( array( 'host' => 'wpformsusage.com', 'do' => 'block' ) ),
'note' => __( 'Blocks the usage tracking (home URL, PHP version, WordPress version, MySQL version, server, form and entry counts). Forms keep working.', 'robotstxt-telemetry' ),
),
'wp-headers-and-footers' => array(
'matchers' => array( array( 'host' => 'app.telemetry.wpbrigade.com', 'do' => 'block' ) ),
'note' => __( 'Blocks the WPBrigade telemetry (PHP version, WordPress version, server, MySQL version, locale, limits). Header and footer scripts keep working.', 'robotstxt-telemetry' ),
),
'wp-mail-smtp' => array(
'matchers' => array( array( 'host' => 'wpmailsmtpusage.com', 'do' => 'block' ) ),
'note' => __( 'Blocks the usage tracking (MySQL version, server software, locale, theme, site count, mailer configuration). Mail delivery keeps working.', 'robotstxt-telemetry' ),
),
'wp-maintenance-mode' => array(
'matchers' => $isle,
'note' => __( 'Blocks the Themeisle SDK logger (theme, plugin list, WordPress version). The maintenance page is fully local.', 'robotstxt-telemetry' ),
),
'wp-optimize' => array(
'matchers' => array( array( 'host_contains' => 'resmush.it', 'do' => 'strip_ua' ) ),
'note' => __( 'Removes the WordPress version from the re-smush.it User-Agent. Image optimization keeps working.', 'robotstxt-telemetry' ),
),
'wp-reset' => array(
'matchers' => array( array( 'host_contains' => 'wp-reset', 'do' => 'strip_query', 'keys' => array( 'wp_version' ) ) ),
'note' => __( 'Removes the WordPress version from the licensing requests. The license key and site URL (account identifier) are kept.', 'robotstxt-telemetry' ),
),
'wp-reviews-plugin-for-google' => array(
'matchers' => array( array( 'host_contains' => 'trustindex', 'do' => 'strip_body', 'keys' => array( 'wp_info' ) ) ),
'note' => __( 'Removes the WordPress environment block (domain, theme and version, full theme and plugin lists) from the connect requests. Review widgets keep working.', 'robotstxt-telemetry' ),
),
'wp-seopress' => array(
'matchers' => array( array( 'host_contains' => 'seopress', 'do' => 'strip_headers', 'headers' => array( 'X-SEOPress-Locale', 'X-SEOPress-Version', 'X-SEOPress-Pro-Active' ) ) ),
'note' => __( 'Removes the locale and version headers from the promotions requests. SEO features and instant indexing keep working.', 'robotstxt-telemetry' ),
),
'wp-smushit' => array(
'matchers' => $wpmudev,
'note' => __( 'Removes the WordPress version, home URL, plugin and theme lists from the WPMU DEV Hub payloads, and the site URL from the User-Agent. Image compression keeps working.', 'robotstxt-telemetry' ),
),
'wp-statistics' => array(
'matchers' => array( array( 'host_contains' => 'wp-statistics', 'path' => '#usage#i', 'do' => 'block' ) ),
'note' => __( 'Blocks the anonymized usage reports (database version and type, aggregate counts). Statistics collection stays local.', 'robotstxt-telemetry' ),
),
'wp-whatsapp-chat' => array(
'matchers' => array( array( 'host' => 'feedback.quadlayers.com', 'do' => 'block' ) ),
'note' => __( 'Blocks the deactivation feedback (PHP/MySQL/WordPress versions, site URL, theme, plugin list, email). Chat widgets keep working.', 'robotstxt-telemetry' ),
),
'yith-woocommerce-wishlist' => array(
'matchers' => array( array( 'host_contains' => 'yithemes', 'do' => 'strip_query', 'keys' => array( 'lang' ) ) ),
'note' => __( 'Removes the language from the pricing lookups. The store currency is kept because prices depend on it.', 'robotstxt-telemetry' ),
),
);
self::$cache = $profiles;
return $profiles;
}
/**
* Plugin versions each Safe profile was verified against.
*
* @return array Slug => version.
*/
public static function tested_versions() {
return array(
'ad-inserter' => '2.8.18',
'all-in-one-seo-pack' => '5.0.0.1',
'all-in-one-wp-migration' => '7.109',
'antispam-bee' => '2.11.12',
'astra-sites' => '4.7.4',
'autoptimize' => '3.1.15.1',
'backwpup' => '5.7.5',
'better-wp-security' => '10.0.3',
'breeze' => '2.5.13',
'broken-link-checker' => '2.4.13',
'broken-link-checker-seo' => '1.3.0',
'burst-statistics' => '3.6.2',
'call-now-button' => '2.0.2',
'cartflows' => '3.1.4',
'chaty' => '3.6.0',
'click-to-chat-for-whatsapp' => '4.43',
'code-snippets' => '3.9.6',
'coming-soon' => '6.20.8',
'contact-form-7-honeypot' => '3.7.2',
'cookie-law-info' => '3.5.4',
'cookie-notice' => '3.1.6',
'copy-delete-posts' => '1.5.6',
'creame-whatsapp-me' => '6.3.2',
'custom-fonts' => '2.1.17',
'disable-comments' => '2.8.0',
'easy-wp-smtp' => '2.15.1',
'elementor' => '4.2.2',
'elementskit-lite' => '4.0.1',
'enable-media-replace' => '4.2.2',
'essential-addons-for-elementor-lite' => '6.7.3',
'ewww-image-optimizer' => '8.7.5',
'extendify' => '3.1.4',
'fluent-smtp' => '2.3.1',
'fluentform' => '6.2.12',
'formidable' => '6.34',
'forminator' => '1.57.0',
'google-analytics-dashboard-for-wp' => '10.1.2',
'google-analytics-for-wordpress' => '11.1.2',
'google-site-kit' => '1.185.0',
'google-sitemap-generator' => '4.1.24',
'happy-elementor-addons' => '3.23.1',
'header-footer-elementor' => '2.9.3',
'hostinger' => '3.0.75',
'image-optimization' => '1.7.6',
'imagify' => '2.3.2',
'instagram-feed' => '6.12.0',
'jeg-elementor-kit' => '3.2.13',
'kadence-blocks' => '3.7.9.1',
'mailchimp-for-woocommerce' => '6.2',
'mailpoet' => '5.36.0',
'meta-box' => '5.14.1',
'metform' => '4.2.0',
'nextgen-gallery' => '4.3.0',
'ninja-forms' => '3.15.0',
'ocean-extra' => '2.5.9',
'otter-blocks' => '3.2.2',
'password-protected' => '2.8.4',
'pdf-embedder' => '5.0.2',
'pojo-accessibility' => '4.1.3',
'polylang' => '3.8.7',
'popup-maker' => '1.24.0',
'post-smtp' => '3.9.5',
'premium-addons-for-elementor' => '4.11.98',
'really-simple-ssl' => '9.7.0',
'redux-framework' => '4.5.13',
'royal-elementor-addons' => '1.7.1066',
'seo-by-rank-math' => '1.0.276',
'sg-cachepress' => '7.8.1',
'sg-security' => '1.6.5',
'shortcodes-ultimate' => '7.8.4',
'sticky-header-effects-for-elementor' => '2.2.1',
'sucuri-scanner' => '2.7.4',
'sureforms' => '2.12.3',
'surerank' => '1.9.3',
'tablepress' => '3.3.3',
'templately' => '3.7.2',
'the-events-calendar' => '6.17.2',
'translatepress-multilingual' => '3.3.3',
'unlimited-elements-for-elementor' => '2.0.16',
'updraftplus' => '1.26.6',
'w3-total-cache' => '2.10.5',
'woo-cart-abandonment-recovery' => '2.1.3',
'woo-checkout-field-editor-pro' => '2.1.9',
'woo-variation-swatches' => '2.3.0',
'woocommerce' => '11.0.1',
'woocommerce-payments' => '11.0.0',
'wp-file-manager' => '8.0.4',
'wp-headers-and-footers' => '3.1.5',
'wp-mail-smtp' => '4.9.0',
'wp-maintenance-mode' => '2.6.23',
'wp-optimize' => '4.6.1',
'wp-reset' => '2.08',
'wp-reviews-plugin-for-google' => '13.3.2',
'wp-seopress' => '10.1',
'wp-smushit' => '4.3.0',
'wp-statistics' => '14.16.10',
'wp-whatsapp-chat' => '8.6.1',
'wpforms-lite' => '2.0.0.5',
'yith-woocommerce-wishlist' => '4.17.0',
);
}
/**
* Freemius SDK analytics matchers (license and updates untouched).
*
* @return array
*/
private static function freemius_matchers() {
return array( array( 'host' => 'api.freemius.com', 'path' => '#/events\.json#i', 'do' => 'block' ) );
}
/**
* Brainstorm Force analytics matchers.
*
* @return array
*/
private static function bsf_matchers() {
return array( array( 'host' => 'store.brainstormforce.com', 'path' => '#usage-tracking#i', 'do' => 'block' ) );
}
/**
* Themeisle tracker and logger matchers.
*
* @return array
*/
private static function themeisle_matchers() {
return array( array( 'host' => 'api.themeisle.com', 'path' => '#/tracking/#i', 'do' => 'block' ) );
}
/**
* Mixpanel telemetry matchers.
*
* @return array
*/
private static function mixpanel_matchers() {
return array( array( 'host' => 'api.mixpanel.com', 'do' => 'block', 'mock' => '1' ) );
}
/**
* WPMU DEV Hub matchers (domain kept as account identifier).
*
* @return array
*/
private static function wpmudev_matchers() {
return array(
array(
'host_contains' => 'wpmudev',
'do' => 'strip_body',
'keys' => array( 'wp_version', 'home_url', 'plugins', 'themes' ),
),
array( 'host_contains' => 'wpmudev', 'do' => 'strip_ua' ),
);
}
}
}

View file

@ -36,6 +36,9 @@ if ( ! class_exists( 'Robotstxt_Telemetry' ) ) {
$wordpress_api = new Robotstxt_Telemetry_WordPress_Api();
$wordpress_api->register();
$plugin_guards = new Robotstxt_Telemetry_Plugin_Guards();
$plugin_guards->register();
$endpoints = new Robotstxt_Telemetry_Endpoints();
$endpoints->register();

View file

@ -2,14 +2,14 @@
# This file is distributed under the GPL v3 or later.
msgid ""
msgstr ""
"Project-Id-Version: Telemetry disabler (by ROBOTSTXT) 1.0.1\n"
"Project-Id-Version: Telemetry disabler (by ROBOTSTXT) 1.1.1\n"
"Report-Msgid-Bugs-To: https://www.robotstxt.software/plugins/robotstxt-telemetry/"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"POT-Creation-Date: 2026-08-18T16:29:26+00:00\n"
"POT-Creation-Date: 2026-08-18T18:58:34+00:00\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"X-Generator: WP-CLI 2.12.0\n"
"X-Domain: robotstxt-telemetry\n"
@ -41,341 +41,382 @@ msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:42
#: includes/class-robotstxt-telemetry-admin.php:43
#: includes/class-robotstxt-telemetry-admin.php:82
#: includes/class-robotstxt-telemetry-admin.php:83
#: includes/class-robotstxt-telemetry-admin.php:91
#: includes/class-robotstxt-telemetry-admin.php:92
msgid "Telemetry"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:52
#: includes/class-robotstxt-telemetry-admin.php:53
#: includes/class-robotstxt-telemetry-admin.php:92
#: includes/class-robotstxt-telemetry-admin.php:93
#: includes/class-robotstxt-telemetry-admin.php:491
#: includes/class-robotstxt-telemetry-admin.php:101
#: includes/class-robotstxt-telemetry-admin.php:102
#: includes/class-robotstxt-telemetry-admin.php:516
msgid "Settings"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:61
#: includes/class-robotstxt-telemetry-admin.php:62
#: includes/class-robotstxt-telemetry-admin.php:102
#: includes/class-robotstxt-telemetry-admin.php:103
#: includes/class-robotstxt-telemetry-admin.php:493
msgid "Logs"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:400
msgid "Settings saved."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:404
msgid "Configuration mode saved."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:421
msgid "Telemetry Network Settings"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:432
#: includes/class-robotstxt-telemetry-admin.php:435
msgid "Configuration mode"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:437
msgid "Per-site"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:439
msgid "Global"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:441
msgid "Per-site: every site keeps its own settings and its own log table, managed by each site administrator. Global: one shared configuration and one central log on the main site collect the outbound requests of the whole network; the Telemetry screens are then managed from here only."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:447
msgid "Save configuration mode"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:452
msgid "Switch to Global mode to manage the settings and the logs for the whole network from this screen."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:492
#: includes/class-robotstxt-telemetry-admin.php:110
#: includes/class-robotstxt-telemetry-admin.php:111
#: includes/class-robotstxt-telemetry-admin.php:517
msgid "Plugins"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:494
#: includes/class-robotstxt-telemetry-admin.php:70
#: includes/class-robotstxt-telemetry-admin.php:71
#: includes/class-robotstxt-telemetry-admin.php:120
#: includes/class-robotstxt-telemetry-admin.php:121
#: includes/class-robotstxt-telemetry-admin.php:518
msgid "Logs"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:425
msgid "Settings saved."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:429
msgid "Configuration mode saved."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:446
msgid "Telemetry Network Settings"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:457
#: includes/class-robotstxt-telemetry-admin.php:460
msgid "Configuration mode"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:462
msgid "Per-site"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:464
msgid "Global"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:466
msgid "Per-site: every site keeps its own settings and its own log table, managed by each site administrator. Global: one shared configuration and one central log on the main site collect the outbound requests of the whole network; the Telemetry screens are then managed from here only."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:472
msgid "Save configuration mode"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:477
msgid "Switch to Global mode to manage the settings and the logs for the whole network from this screen."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:519
msgid "General"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:497
#: includes/class-robotstxt-telemetry-admin.php:522
msgid "Settings sections"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:531
#: includes/class-robotstxt-telemetry-admin.php:556
msgid "Telemetry Settings"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:566
#: includes/class-robotstxt-telemetry-admin.php:569
msgid "Outbound requests"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:573
msgid "Send your URL"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:574
msgid "Send a hash"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:575
msgid "Do not send anything"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:583
msgid "Outbound requests normally identify this site in the User-Agent with its URL (for example \"WordPress/6.9; https://example.com/\"). \"Send a hash\" (default) replaces it with a fixed hash so the site is no longer identifiable; \"Do not send anything\" removes it completely."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:591
#: includes/class-robotstxt-telemetry-admin.php:594
msgid "WordPress version"
msgid "Outbound requests"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:598
msgid "Actual version"
msgid "Send your URL"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:599
msgid "Major version"
msgid "Send a hash"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:600
msgid "Nulled version"
msgid "Do not send anything"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:608
msgid "Outbound requests normally identify this site in the User-Agent with its URL (for example \"WordPress/6.9; https://example.com/\"). \"Send a hash\" (default) replaces it with a fixed hash so the site is no longer identifiable; \"Do not send anything\" removes it completely."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:616
#: includes/class-robotstxt-telemetry-admin.php:619
msgid "WordPress version"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:623
#: includes/class-robotstxt-telemetry-admin.php:802
msgid "Actual version"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:624
msgid "Major version"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:625
msgid "Nulled version"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:633
msgid "The version reported in the User-Agent and in the WordPress.org version fields: the actual version (default), the major version with the rest masked (for example \"7.2.n\"), or a nulled version (\"0.0.0\"). The checksum and translation requests always use the real version so updates keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:614
#: includes/class-robotstxt-telemetry-admin.php:639
msgid "Installation language"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:618
#: includes/class-robotstxt-telemetry-admin.php:643
msgid "Send en_US as the language of outbound requests"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:620
#: includes/class-robotstxt-telemetry-admin.php:645
msgid "When enabled, requests to WordPress.org report English (United States) instead of the installation language. The translation endpoints keep using the real language so installed language packs keep receiving updates."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:626
#: includes/class-robotstxt-telemetry-admin.php:651
msgid "Replace the WordPress News feed"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:627
#: includes/class-robotstxt-telemetry-admin.php:652
msgid "Use WordPress Planet by Fair (planet.fair.pm) instead of wordpress.org/news for the Events and News dashboard widget"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:630
#: includes/class-robotstxt-telemetry-admin.php:655
msgid "Replace the WordPress Events service"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:631
#: includes/class-robotstxt-telemetry-admin.php:656
msgid "Use WordPress Events by The WP World (api.fair.pm) instead of api.wordpress.org/events, sending the same request data"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:634
#: includes/class-robotstxt-telemetry-admin.php:659
msgid "Disable the WordPress browser check"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:635
#: includes/class-robotstxt-telemetry-admin.php:660
msgid "Do not send the browser version to api.wordpress.org/core/browse-happy; the browser is always reported as compatible"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:653
#: includes/class-robotstxt-telemetry-admin.php:678
msgid "WordPress Core version check"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:654
#: includes/class-robotstxt-telemetry-admin.php:679
msgid "Safe sends only the WordPress version, PHP version, locale, MySQL version, and update channel. Original also sends site counts, database history, PHP extensions, and platform details."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:657
#: includes/class-robotstxt-telemetry-admin.php:682
msgid "WordPress Themes version check"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:658
#: includes/class-robotstxt-telemetry-admin.php:683
msgid "Safe sends only the theme name, version, update URI, template, and stylesheet, plus the translation revision date and site locale. Original also sends author details and other theme metadata."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:661
#: includes/class-robotstxt-telemetry-admin.php:686
msgid "WordPress Plugins version check"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:662
#: includes/class-robotstxt-telemetry-admin.php:687
msgid "Safe sends only the plugin version, update URI, and requirements, plus the translation revision date, locale, and the \"all\" flag. Original also sends names, descriptions, authors, and other plugin metadata."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:674
#: includes/class-robotstxt-telemetry-admin.php:699
msgid "Original"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:676
#: includes/class-robotstxt-telemetry-admin.php:701
msgid "Safe"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:693
#: includes/class-robotstxt-telemetry-admin.php:695
#: includes/class-robotstxt-telemetry-admin.php:718
#: includes/class-robotstxt-telemetry-admin.php:720
msgid "Log retention"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:699
#: includes/class-robotstxt-telemetry-admin.php:724
msgid "12 hours"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:700
#: includes/class-robotstxt-telemetry-admin.php:725
msgid "1 day"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:701
#: includes/class-robotstxt-telemetry-admin.php:726
msgid "3 days"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:714
#: includes/class-robotstxt-telemetry-admin.php:739
msgid "Logs older than the selected period are deleted (12 hours by default). A maximum of 1000 entries is always kept; the cleanup runs when browsing the logs and twice a day automatically."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:721
#: includes/class-robotstxt-telemetry-admin.php:746
msgid "Uninstall behavior"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:725
#: includes/class-robotstxt-telemetry-admin.php:750
msgid "Delete all telemetry logs and plugin options on uninstall"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:727
#: includes/class-robotstxt-telemetry-admin.php:752
msgid "By default, all telemetry logs are preserved when the plugin is uninstalled."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:754
msgid "The plugins checked below are never sent to WordPress.org: they are excluded from the plugin update check (including their translations and the active list). That also means they will not receive update notifications from WordPress.org."
#: includes/class-robotstxt-telemetry-admin.php:789
msgid "Telemetry - Plugins"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:755
msgid "Recommendation: keep external or private plugins (those not hosted on WordPress.org) checked, since they do not receive WordPress.org updates anyway and nothing is gained by reporting them."
#: includes/class-robotstxt-telemetry-admin.php:791
msgid "Plugin modes saved."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:764
msgid "Hide from WordPress.org"
#: includes/class-robotstxt-telemetry-admin.php:793
msgid "Every installed plugin with a known telemetry behavior is listed below. In Safe mode the known telemetry endpoints are blocked or reduced to the minimum data each service needs to work; in Original mode the plugin behaves exactly as it would without Telemetry disabler. The tested version is the plugin version the Safe profile was verified against."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:765
msgid "Status"
#: includes/class-robotstxt-telemetry-admin.php:800
msgid "Safe Mode"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:766
#: includes/class-robotstxt-telemetry-admin.php:801
#: includes/class-robotstxt-telemetry-admin.php:921
msgid "Plugin"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:767
#: includes/class-robotstxt-telemetry-admin.php:803
msgid "Tested version"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:804
msgid "Description"
msgstr ""
#. translators: %s: Plugin name.
#: includes/class-robotstxt-telemetry-admin.php:819
#: includes/class-robotstxt-telemetry-admin.php:820
#, php-format
msgid "Safe Mode for %s"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:830
msgid "Save plugin modes"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:909
msgid "The plugins checked below are never sent to WordPress.org: they are excluded from the plugin update check (including their translations and the active list). That also means they will not receive update notifications from WordPress.org."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:910
msgid "Recommendation: keep external or private plugins (those not hosted on WordPress.org) checked, since they do not receive WordPress.org updates anyway and nothing is gained by reporting them."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:919
msgid "Hide from WordPress.org"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:920
msgid "Status"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:922
msgid "Version"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:788
#: includes/class-robotstxt-telemetry-admin.php:943
msgid "Always hidden"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:788
#: includes/class-robotstxt-telemetry-admin.php:943
msgid "Active"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:788
#: includes/class-robotstxt-telemetry-admin.php:943
msgid "Inactive"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:819
#: includes/class-robotstxt-telemetry-admin.php:974
msgid "Telemetry Logs"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:839
#: includes/class-robotstxt-telemetry-admin.php:994
msgid "All log entries deleted."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:841
#: includes/class-robotstxt-telemetry-admin.php:996
msgid "Log entry deleted."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:855
#: includes/class-robotstxt-telemetry-admin.php:1010
msgid "Delete all logs"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:873
#: includes/class-robotstxt-telemetry-admin.php:1028
msgid "You are about to permanently delete all telemetry log entries. This action cannot be undone."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:881
#: includes/class-robotstxt-telemetry-admin.php:1036
msgid "Yes, delete all logs"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:882
#: includes/class-robotstxt-telemetry-admin.php:1037
msgid "Cancel"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:895
#: includes/class-robotstxt-telemetry-admin.php:1050
msgid "Log entry not found."
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:899
#: includes/class-robotstxt-telemetry-admin.php:1054
msgid "Back to logs"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:903
#: includes/class-robotstxt-telemetry-admin.php:1058
#: includes/class-robotstxt-telemetry-logs-table.php:49
msgid "Date"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:904
#: includes/class-robotstxt-telemetry-admin.php:1059
#: includes/class-robotstxt-telemetry-logs-table.php:50
msgid "Method"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:905
#: includes/class-robotstxt-telemetry-admin.php:1060
msgid "URL"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:906
#: includes/class-robotstxt-telemetry-admin.php:1061
#: includes/class-robotstxt-telemetry-logs-table.php:51
#: includes/class-robotstxt-telemetry-logs-table.php:318
msgid "Host"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:907
#: includes/class-robotstxt-telemetry-admin.php:1062
#: includes/class-robotstxt-telemetry-logs-table.php:52
msgid "Path"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:908
#: includes/class-robotstxt-telemetry-admin.php:1063
msgid "Body Params"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:909
#: includes/class-robotstxt-telemetry-admin.php:1064
msgid "Headers"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:910
#: includes/class-robotstxt-telemetry-admin.php:1065
msgid "User Agent"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:911
#: includes/class-robotstxt-telemetry-admin.php:1066
msgid "Raw Body"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:912
#: includes/class-robotstxt-telemetry-admin.php:1067
msgid "Caller"
msgstr ""
#: includes/class-robotstxt-telemetry-admin.php:932
#: includes/class-robotstxt-telemetry-admin.php:1087
msgid "Telemetry Analysis"
msgstr ""
@ -461,3 +502,396 @@ msgstr ""
#: includes/class-robotstxt-telemetry-manager-notice.php:167
msgid "You do not have sufficient permissions to perform this action."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:56
msgid "Blocks the analytics.adinserter.pro telemetry (site URL, site name, WordPress and PHP versions, admin email, plugin list and options). Update checks keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:60
msgid "Removes the WordPress version and site URL from the API User-Agent. The connect flow keeps sending the site URL because it is the account identifier."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:64
msgid "Removes the site URL and the admin email from the extension update-check query. Extension updates keep working (they only need the purchased extension slug and version)."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:71
msgid "Blocks the comment-language check (which sends the comment text) and the IP country lookup. All the local spam checks keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:78
msgid "Removes the site URL from the starter-template requests. License validation keeps sending the site URL because it is the account identifier."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:82
msgid "Blocks the usage ping. The critical CSS service keeps receiving the page URL because generating the CSS for a page requires that page URL."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:86
msgid "Blocks the Mixpanel telemetry events (which include the site host and versions). Backup destinations are admin-configured and untouched."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:90
msgid "Blocks the StellarWP telemetry reports. The brute-force network and licensing keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:94
msgid "Removes the Referer header (your site URL) from the Sucuri site-check requests. The scan itself keeps working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:98
msgid "Removes the WordPress version, home URL, plugin and theme lists from the WPMU DEV Hub payloads, and the site URL from the User-Agent. The Hub connection keeps the domain as the account identifier."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:102
msgid "Removes the WordPress version and site URL from the API User-Agent. Link analysis keeps working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:106
msgid "Blocks the aggregated statistics telemetry. License checks keep sending the site URL as the account identifier."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:110
msgid "Removes the WordPress version, PHP version and site URL from the API User-Agent. All button features keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:114
msgid "Blocks the NPS survey requests that automatically attach the admin name and email. Template downloads keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:118
msgid "Blocks the feedback and support pings that send the site URL. The chat channels keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:122
msgid "Blocks the deactivation feedback (WordPress version, PHP version, site URL, language, theme, plugin list, server software). Chat widgets keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:126
msgid "Removes the site host from the cloud search queries. Cloud search keeps working with the account token."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:130
msgid "Removes the WordPress version from the license requests. The license key, site URL (account identifier) and installed version (needed for updates) are kept."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:134
msgid "Blocks the Freemius analytics events (plugin and theme lists, versions, site URL, language). License activation keeps working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:138
msgid "Blocks the uninstall feedback (MySQL, WordPress and WooCommerce versions, locale, multisite flag). The cookie scanner keeps sending the scanned URLs because that is its function."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:142
msgid "Blocks the deactivation feedback that sends the site URL. The notice and the account service keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:146
msgid "Blocks the usage tracker (WordPress version, PHP version, server IP, MySQL version, locale, plugin list). Post duplication is fully local."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:150
msgid "Removes the site URL and language from the newsletter subscribe. The admin-entered email is kept (it is an explicit subscription)."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:154
msgid "Blocks the BSF analytics report (site URL, WordPress/PHP/MySQL versions, user count, language, timezone, plugin list, server software). Font uploads are unaffected."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:161
msgid "Blocks the usage tracker and its country lookup (site URL, plugin slug, server IP). Comment disabling is fully local."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:165
msgid "Removes the site URL from the geo-lookup User-Agent. Mail delivery keeps working with your mailer credentials only."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:169
msgid "Removes the language and API version from the feedback surveys. The template library and the connect flow (site URL as account identifier) are untouched."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:173
msgid "Removes the WordPress version, PHP version and site URL from the unsubscribe feedback. Widgets and modules are unaffected."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:177
msgid "Removes the site URL and the WordPress/PHP version block from the ShortPixel key check. The API key alone is enough to validate the account."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:181
msgid "Blocks the usage tracker (site URL, site name, WordPress version, language, PHP version, admin email). Elements and templates keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:185
msgid "Blocks the weekly check-in (plugin list, locale, WordPress version, OS, limits, image counts). Local and cloud optimization keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:192
msgid "Removes the WordPress version, language, site title, site profile and Referer header from the AI requests. The AI assistance keeps working with the prompt content only."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:196
msgid "Blocks the tracker (WordPress version, PHP version, MySQL version, server software, plugin list, admin email, IP). Form integrations keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:200
msgid "Blocks the opt-in ping and the failed-mail notifications (which include email metadata). Mail delivery keeps working with your mailer credentials only."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:204
msgid "Blocks the usage snapshot (UUID, WordPress/PHP/MySQL versions, OS, locale, plugin list, form counts) and the onboarding email collection. Forms keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:208
msgid "Removes the WordPress version, home URL, plugin and theme lists from the WPMU DEV Hub payloads, and the site URL from the User-Agent. The domain is kept as the account identifier."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:212
#: includes/class-robotstxt-telemetry-plugin-profiles.php:216
msgid "Blocks the check-in (plugin list, locale, home URL). Your Google Analytics measurement keeps working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:220
msgid "Removes the WordPress version, PHP version and user count from the Site Kit feature reports. Search Console, Analytics and AdSense integrations keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:227
msgid "Blocks the Google Analytics usage ping and the beta-consent ping (WordPress version, PHP version, post count, email, domain, language). Search-engine pings keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:231
msgid "Blocks the Appsero insights (site URL, PHP version, MySQL, server software, WordPress version). License and update checks keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:235
msgid "Blocks the BSF analytics report (site URL, PHP/WordPress versions, network URL, plugin list). Header and footer builder keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:239
msgid "Blocks the event reporting that sends your domain. Hosting management actions keep working with your token."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:243
msgid "Blocks the Mixpanel telemetry events (which include the WordPress version). Image optimization keeps working with your API key."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:247
msgid "Removes the language from the notifications requests. Image optimization and connect keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:254
msgid "Blocks the usage check-in (environment payload with a site-URL User-Agent). Feeds keep working with your access tokens."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:261
msgid "Blocks the Freemius analytics events and removes the domain from the newsletter subscribe. Templates and elements keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:265
msgid "Blocks the StellarWP telemetry reports. Blocks, AI features and the template library keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:269
msgid "Blocks the support ping and wizard reporting (store name, domain, list data). Order and subscriber synchronization keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:273
msgid "Blocks the Tracks analytics worker. Newsletter sending and subscribers keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:279
msgid "Removes the WordPress version, PHP version and language from the updater requests. The license key and site URL (account identifier) are kept."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:283
msgid "Blocks the onboarding data sender (plugin and theme lists). Form integrations keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:287
msgid "Blocks the usage tracking (PHP version, WordPress version, server software, home URL, theme, admin email, settings). Galleries keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:291
msgid "Removes the site data block (site URL and server IP) from the dispatcher requests. Forms and add-on services keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:295
msgid "Blocks the Freemius analytics events (plugin and theme lists, versions, site URL, language). Demos and license activation keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:299
msgid "Blocks the Themeisle tracker and SDK logger (theme, plugin list, WordPress version). Blocks keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:303
msgid "Blocks the Freemius analytics events (plugin and theme lists, versions, site URL, language). Password protection is fully local."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:307
msgid "Blocks the weekly usage report (home URL, PHP/WordPress/MySQL versions, server software, multisite, plugin list, theme, locale, license, settings). PDF embedding keeps working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:311
msgid "Removes the language from the notifications requests. All accessibility widgets keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:318
msgid "Removes the PHP version and language from the Pro updater requests. The WordPress version, license and site URL (account identifier) are kept so updates keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:326
msgid "Blocks the telemetry check-in and the Google Analytics usage events, and removes the PHP version from the extension updater requests. Popups keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:333
msgid "Blocks the Freemius analytics events and removes the site URL from the notification requests. Mail delivery keeps working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:340
msgid "Blocks the feedback and install pings (locale, theme and plugin lists, site domain, memory limit, execution time, used widgets). All addons keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:344
msgid "Blocks the mailing-list subscribe (email, license, site URL). The vulnerability scan keeps sending your installed versions because checking them is its function."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:348
msgid "Removes the theme name from the font-converter User-Agent. Font conversion keeps working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:355
msgid "Blocks the Freemius analytics events and the usage events server. Templates and widgets keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:359
msgid "Blocks the Mixpanel telemetry. Content AI and module updates keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:363
msgid "Blocks the plugin-data telemetry (home URL, admin email, PHP version and limits, OS, WordPress version, user count, MySQL version, server software). Caching keeps working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:367
msgid "Blocks the plugin-data telemetry (home URL, admin email, PHP and WordPress versions, user count, MySQL version, server software). Security hardening keeps working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:371
msgid "Blocks the Freemius analytics events (plugin and theme lists, versions, site URL, language). Shortcodes are fully local."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:375
msgid "Blocks the Posimyth tracker (site URL, PHP version, plugin slugs, theme, install time). Header effects keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:379
msgid "Removes the PHP version from the API lookups. The WordPress version and the plugin/theme versions are kept because the integrity checks are the service itself."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:383
msgid "Blocks the BSF analytics report (domain, PHP OS, server software, MySQL/PHP versions, WordPress version). Forms and the AI builder keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:387
msgid "Blocks the BSF analytics report (domain, PHP OS, server software, MySQL/PHP versions, WordPress version). SEO analysis keeps working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:391
msgid "Blocks the Freemius analytics events (plugin and theme lists, versions, site URL, language). Tables are fully local."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:395
msgid "Removes the server IP, site URL and version headers from every API request. Template downloads keep working with your token."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:402
msgid "Blocks the StellarWP telemetry and removes the WordPress version, PHP version and user counts from the license/update validation. The domain is kept as the account identifier."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:406
msgid "Blocks the weekly sync and the opt-in subscribe (home URL, email, name, plugin list, WordPress version, locale, PHP version). Translations keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:410
msgid "Blocks the Freemius analytics events (plugin and theme lists, versions, site URL, language). Widgets keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:414
msgid "Removes the Referer header (your network site URL) from the IP info lookups. Backups go to the destinations you configured."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:418
msgid "Blocks the survey requests that include the home URL and email. CDN and cache configuration keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:422
msgid "Blocks the BSF analytics report (WordPress version, PHP version, locale, site URL). Cart tracking and webhooks keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:426
msgid "Blocks the feedback requests (server software, PHP version, MySQL version, WordPress and WooCommerce versions, locale, multisite). Checkout fields keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:430
msgid "Blocks the WooCommerce.com Tracks pixel (usage analytics). Store functionality and woocommerce.com connections keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:434
msgid "Blocks the WooPay tracker pixel. Payments keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:438
msgid "Blocks the deactivation feedback (PHP version, WordPress version, server info, plugin list, theme, settings). Swatches keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:444
msgid "Removes the site URL, PHP and WordPress versions, user agent and PHP limits from the plugin-server requests. File management keeps working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:448
msgid "Blocks the usage tracking (home URL, PHP version, WordPress version, MySQL version, server, form and entry counts). Forms keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:452
msgid "Blocks the WPBrigade telemetry (PHP version, WordPress version, server, MySQL version, locale, limits). Header and footer scripts keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:456
msgid "Blocks the usage tracking (MySQL version, server software, locale, theme, site count, mailer configuration). Mail delivery keeps working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:460
msgid "Blocks the Themeisle SDK logger (theme, plugin list, WordPress version). The maintenance page is fully local."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:464
msgid "Removes the WordPress version from the re-smush.it User-Agent. Image optimization keeps working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:468
msgid "Removes the WordPress version from the licensing requests. The license key and site URL (account identifier) are kept."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:472
msgid "Removes the WordPress environment block (domain, theme and version, full theme and plugin lists) from the connect requests. Review widgets keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:476
msgid "Removes the locale and version headers from the promotions requests. SEO features and instant indexing keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:480
msgid "Removes the WordPress version, home URL, plugin and theme lists from the WPMU DEV Hub payloads, and the site URL from the User-Agent. Image compression keeps working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:484
msgid "Blocks the anonymized usage reports (database version and type, aggregate counts). Statistics collection stays local."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:488
msgid "Blocks the deactivation feedback (PHP/MySQL/WordPress versions, site URL, theme, plugin list, email). Chat widgets keep working."
msgstr ""
#: includes/class-robotstxt-telemetry-plugin-profiles.php:492
msgid "Removes the language from the pricing lookups. The store currency is kept because prices depend on it."
msgstr ""

View file

@ -3,9 +3,9 @@ Contributors: robotstxt, javiercasares
Tags: telemetry, privacy, http, requests, logging
Requires at least: 4.0
Tested up to: 7.1
Stable tag: 1.0.1
Stable tag: 1.1.1
Requires PHP: 5.6
Version: 1.0.1
Version: 1.1.1
License: GPL-3.0-or-later
License URI: https://www.gnu.org/licenses/gpl-3.0.txt
@ -36,6 +36,8 @@ The reported WordPress version is also configurable: the "WordPress version" set
The installation language can also be hidden: with the "Send en_US as the language of outbound requests" setting (disabled by default), every request to WordPress.org reports English (United States) instead of the real installation language, including the language lists of the update checks and the locale parameters of the core version check, credits, community events, and plugin/theme information APIs. The translation endpoints keep using the real language so installed language packs keep receiving updates.
Beyond WordPress.org itself, the Plugins screen applies the same idea to your other plugins: every installed plugin with a known telemetry behavior can run in "Safe" mode (blocked telemetry endpoints and reduced request data) or "Original" mode (unchanged behavior). See "Plugins screen" below.
= See everything =
Every outbound HTTP request made through the WordPress HTTP API is recorded in the site's own database: request method, full URL, host and path, query parameters, body parameters or raw body, sanitized request headers, user agent, and a caller backtrace summary to know which component triggered the call.
@ -63,13 +65,13 @@ Navigate to **Telemetry → Logs**. Use the method, host and date filters to nar
= Settings =
Navigate to **Telemetry → Settings**. The screen is organized in native WordPress tabs: **Settings** (privacy controls), **Logs** (log retention), and **General** (uninstall behavior); each tab saves independently.
Navigate to **Telemetry → Settings**. The screen is organized in native WordPress tabs: **Settings** (privacy controls), **Hidden plugins** (WordPress.org update-check exclusion), **Logs** (log retention), and **General** (uninstall behavior); each tab saves independently.
= Settings tab =
The three WordPress.org update checks (Core, Themes, Plugins) can run in "Safe" mode (default, limited data) or "Original" mode (unchanged WordPress behavior). "Outbound requests" controls the site identifier in the User-Agent: Send your URL, Send a hash (default), or Do not send anything. "WordPress version" controls the reported version: Actual version (default), Major version (for example "7.2.n"), or Nulled version ("0.0.0"). "Send en_US as the language of outbound requests" (disabled by default) hides the installation language from WordPress.org requests, except the translation endpoints. The dashboard services section controls the WordPress News feed replacement (enabled by default), the WordPress Events replacement (enabled by default), and the browser check disable (enabled by default).
= Plugins tab =
= Hidden plugins tab =
Every installed plugin is listed in a table with its status, name, and version. Checked plugins are never sent to WordPress.org: they are excluded from the plugin update check (including their translations and the active list), which also means they will not receive update notifications from WordPress.org. All plugins are unchecked by default, except this one, which is always hidden. Keeping external or private plugins (those not hosted on WordPress.org) checked is recommended, since they do not receive WordPress.org updates anyway.
@ -81,6 +83,10 @@ Every installed plugin is listed in a table with its status, name, and version.
The "Delete all telemetry logs and plugin options on uninstall" checkbox controls the uninstall behavior: unchecked by default, so all telemetry data is preserved when the plugin is removed. When the Manager (by ROBOTSTXT) plugin is not active, a permanent notice about updates is shown on this screen.
= Plugins screen =
Navigate to **Telemetry → Plugins**. Every installed plugin with a known telemetry behavior is listed in a table showing the Safe Mode checkbox, the plugin name, the installed version, the version the Safe profile was tested against, and the description. With the Safe Mode checkbox checked (default), the telemetry endpoints of that plugin are blocked (usage trackers, analytics, feedback surveys) and its environment data (WordPress version, PHP version, locale, plugin and theme lists, server details, site URL where it is not required) is removed from the requests, keeping only what the service needs to work (license keys, account identifiers, the data of the feature you are using). Each row explains exactly what is truncated and what is kept. Unchecking the box restores the Original behavior. Requests are attributed to the plugin that issues them, so shared hosts (api.wordpress.org, public-api.wordpress.com) never affect other plugins.
= Multisite =
Navigate to **Network Admin → Telemetry**. The "Configuration mode" setting controls how the plugin runs: "Per-site" (default) lets every site manage its own Settings and Logs screens, while "Global" centralizes the configuration and the logs of the whole network on the main site, managed from the Network Admin only. When switching to Global, the network settings start from the main site values.
@ -142,6 +148,17 @@ On WordPress versions older than 5.1, the Core update check Safe mode cannot red
Only the 3 last versions. The full changelog will be at changelog.txt
= 1.1.1 =
* Added: "Safe Mode" checkbox column in the Plugins screen (with accessible hidden labels per row)
* Fixed: the StellarWP telemetry blocks (iThemes Security, Kadence Blocks, The Events Calendar) are now actually applied (path-only matchers were never reached)
* Changed: the profile registry is built once per request instead of on every outbound call
= 1.1.0 =
* Added: "Plugins" settings screen (Telemetry → Plugins) with a Safe/Original mode per plugin; in Safe mode the known telemetry endpoints are blocked and the environment data is reduced to what each service needs, and every row explains what is truncated and what is kept
* Added: safe profiles for 99 popular plugins, covering the common telemetry SDKs (Freemius, BSF analytics, Themeisle, Mixpanel, Appsero, StellarWP, WPMU DEV Hub) and the individual trackers, license-update extras, feedback surveys, and User-Agent/headers of each plugin
= 1.0.1 =
* Fixed: saving the "Plugins" tab from the Network Admin no longer resets the other network settings to their defaults (and the hidden plugins list can now be saved in Global mode)
@ -149,16 +166,6 @@ Only the 3 last versions. The full changelog will be at changelog.txt
* Changed: the redaction of sensitive keys now also covers "api-key", "cookie", "session", "private-key", and "private_key"
* Changed: documentation clarified — the WordPress version masking applies to the User-Agent only, and the query parameters always send the real version
= 1.0.0 =
* First stable release: outbound HTTP request logging with secret redaction, Safe modes for the WordPress.org Core/Themes/Plugins update checks, per-plugin hiding, User-Agent and version controls, installation language masking, dashboard services replaced (news, events, browser check), log retention, and Multisite Per-site/Global modes
= 0.10.0 =
* Added: "Plugins" settings tab listing every installed plugin in a table (hide checkbox, status, name, version); checked plugins are never sent to WordPress.org (no update notifications either), all unchecked by default except this plugin which is always hidden
* Changed: the WordPress version masking is now User-Agent only; query parameters always send the real version so updates keep working
* Fixed: the User-Agent masking now covers the trailing-slash form of the site URL used by the update checks
= Previous versions =
If you want to see the full changelog, visit the [changelog.txt](https://www.robotstxt.software/plugins/robotstxt-telemetry/) page.

View file

@ -4,7 +4,7 @@
* Plugin URI: https://www.robotstxt.software/plugins/robotstxt-telemetry/
* Update URI: https://www.robotstxt.software/plugins/robotstxt-telemetry/
* Description: Reduces the telemetry WordPress sends out and logs every outbound HTTP request, so your site shares less and you can see everything.
* Version: 1.0.1
* Version: 1.1.1
* Author: ROBOTSTXT
* Author URI: https://www.robotstxt.software/
* Text Domain: robotstxt-telemetry
@ -23,7 +23,7 @@ if ( ! defined( 'ABSPATH' ) ) {
exit;
}
define( 'ROBOTSTXT_TELEMETRY_VERSION', '1.0.1' );
define( 'ROBOTSTXT_TELEMETRY_VERSION', '1.1.1' );
define( 'ROBOTSTXT_TELEMETRY_DB_VERSION', '1.1.0' );
define( 'ROBOTSTXT_TELEMETRY_PLUGIN_FILE', __FILE__ );
define( 'ROBOTSTXT_TELEMETRY_PLUGIN_DIR', __DIR__ );
@ -35,6 +35,8 @@ require_once ROBOTSTXT_TELEMETRY_PLUGIN_DIR . '/includes/class-robotstxt-telemet
require_once ROBOTSTXT_TELEMETRY_PLUGIN_DIR . '/includes/class-robotstxt-telemetry-admin.php';
require_once ROBOTSTXT_TELEMETRY_PLUGIN_DIR . '/includes/class-robotstxt-telemetry-manager-notice.php';
require_once ROBOTSTXT_TELEMETRY_PLUGIN_DIR . '/includes/class-robotstxt-telemetry-wordpress-api.php';
require_once ROBOTSTXT_TELEMETRY_PLUGIN_DIR . '/includes/class-robotstxt-telemetry-plugin-profiles.php';
require_once ROBOTSTXT_TELEMETRY_PLUGIN_DIR . '/includes/class-robotstxt-telemetry-plugin-guards.php';
require_once ROBOTSTXT_TELEMETRY_PLUGIN_DIR . '/includes/class-robotstxt-telemetry-analysis.php';
require_once ROBOTSTXT_TELEMETRY_PLUGIN_DIR . '/includes/class-robotstxt-telemetry-analysis-api-wordpress-org.php';
require_once ROBOTSTXT_TELEMETRY_PLUGIN_DIR . '/includes/class-robotstxt-telemetry.php';

View file

@ -84,7 +84,8 @@ function robotstxt_telemetry_uninstall_site( $force_drop = null ) {
delete_option( 'robotstxt_telemetry_wp_core_check' );
delete_option( 'robotstxt_telemetry_wp_themes_check' );
delete_option( 'robotstxt_telemetry_wp_plugins_check' );
delete_option( 'robotstxt_telemetry_hidden_plugins' );
delete_option( 'robotstxt_telemetry_hidden_plugins' );
delete_option( 'robotstxt_telemetry_plugin_modes' );
delete_option( 'robotstxt_telemetry_retention_period' );
delete_option( 'robotstxt_telemetry_db_version' );
}
@ -107,7 +108,8 @@ function robotstxt_telemetry_uninstall_network() {
delete_site_option( 'robotstxt_telemetry_wp_core_check' );
delete_site_option( 'robotstxt_telemetry_wp_themes_check' );
delete_site_option( 'robotstxt_telemetry_wp_plugins_check' );
delete_site_option( 'robotstxt_telemetry_hidden_plugins' );
delete_site_option( 'robotstxt_telemetry_hidden_plugins' );
delete_site_option( 'robotstxt_telemetry_plugin_modes' );
delete_site_option( 'robotstxt_telemetry_retention_period' );
}