| @@ -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, |