PluginProbe
Search Atlas SEO – OTTO AI SEO Automation for WordPress / 2.7.1
Search Atlas SEO – OTTO AI SEO Automation for WordPress v2.7.1
2.7.1 2.7.2 2.7.0 2.6.26 2.6.25 2.6.24 2.6.23 2.6.22 2.6.21 2.6.20 2.6.19 2.6.18 2.6.17 2.6.16 2.6.15 2.6.14 2.6.13 2.6.12 2.6.11 2.6.10 2.6.9 2.6.8 2.6.7 2.6.6 2.6.5 All 141 releases
← All changes | metasync.php +7 -6 2.7.0 → 2.7.1 View file →
@@ -11,12 +11,12 @@
11 11 * @link https://searchatlas.com/
12 12 * @since 1.0.0
13 13 *
14 14 * @wordpress-plugin
15 - * Plugin Name: Search Atlas: The Premier AI SEO Plugin for Instant Optimization
15 + * Plugin Name: Search Atlas SEO - OTTO AI SEO Automation for WordPress
16 16 * Plugin URI: https://searchatlas.com/
17 17 * Description: Search Atlas SEO is an intuitive WordPress Plugin that transforms the most complicated, most labor-intensive SEO tasks into streamlined, straightforward processes. With a few clicks, the meta-bulk update feature automates the re-optimization of meta tags using AI to increase clicks. Stay up-to-date with the freshest Google Search data for your entire site or targeted URLs within the Meta Sync plug-in page.
18 - * Version: 2.7.0
18 + * Version: 2.7.1
19 19 * Requires PHP: 8.1
20 20 * Author: Search Atlas
21 21 * Author URI: https://searchatlas.com
22 22 * License: GPL v3
@@ -57,9 +57,9 @@
57 57 * Currently plugin version.
58 58 * Start at version 1.0.0 and use SemVer - https://semver.org
59 59 * Rename this for your plugin and update it as you release new versions.
60 60 */
61 -$metasync_version = '2.7.0';
61 +$metasync_version = '2.7.1';
62 62 define('METASYNC_VERSION', preg_match('/^\d+\.\d+/', $metasync_version) ? $metasync_version : '9.9.9');
63 63 /**
64 64 * Define the current required php version
65 65 * This will be used to validate whether the user can install the plugin or not
@@ -145,10 +145,10 @@
145 145 }
146 146 if (!defined('DOING_AJAX') || !DOING_AJAX) {
147 147 return ($result = false);
148 148 }
149 - $action = isset($_POST['action']) ? sanitize_text_field(wp_unslash($_POST['action']))
150 - : (isset($_GET['action']) ? sanitize_text_field(wp_unslash($_GET['action'])) : '');
149 + $action = isset($_POST['action']) ? sanitize_text_field(wp_unslash($_POST['action'])) // phpcs:ignore WordPress.Security.NonceVerification.Missing -- read-only action-name prefix check during boot
150 + : (isset($_GET['action']) ? sanitize_text_field(wp_unslash($_GET['action'])) : ''); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- read-only action-name prefix check during boot
151 151 if ($action === '') {
152 152 return ($result = true);
153 153 }
154 154 if (strpos($action, 'metasync_') === 0 || strpos($action, 'meta_sync_') === 0 || $action === 'sample-permalink') {
@@ -188,8 +188,9 @@
188 188
189 189 // Phase 2 — these files have file-level side effects (add_action outside class body)
190 190 // and must remain as explicit require_once until refactored.
191 191 require_once plugin_dir_path( __FILE__ ) . 'includes/class-metasync-api-backoff-rest.php';
192 +require_once plugin_dir_path( __FILE__ ) . 'includes/class-metasync-data-store.php';
192 193 require_once plugin_dir_path( __FILE__ ) . 'includes/class-metasync-error-logger.php';
193 194
194 195 // Shared helpers (custom/LPS page detection + query exclusion) — loaded in all
195 196 // request contexts (admin, REST, MCP, AJAX) so every SEO surface uses one rule.
@@ -449,9 +450,9 @@
449 450 set_transient($tkey, $content, $ttl);
450 451 if (false !== get_transient($tkey)) {
451 452 // The parked transient doubles as a 30-day backup of the
452 453 // content before the file is removed from disk.
453 - @unlink($file);
454 + @wp_delete_file($file);
454 455 $virtual_index[$bn] = $tkey;
455 456 if ($bn !== 'sitemap_index.xml' && $bn !== 'news-sitemap.xml' && $bn !== 'video-sitemap.xml') {
456 457 $migrated_files[] = [
457 458 'filename' => $bn,