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 | includes/class-metasync-admin-navigation.php +9 -10 2.7.2 → 2.7.1 View file →
@@ -1375,9 +1375,9 @@
1375 1375 $status_title_header = 'Not Synced - Heartbeat API not responding or unreachable';
1376 1376 $status_text_header = 'Not Synced';
1377 1377 }
1378 1378 ?>
1379 - <div class="metasync-integration-status <?php echo esc_attr($status_class_header); ?>"
1379 + <div class="metasync-integration-status <?php echo $status_class_header; ?>"
1380 1380 title="<?php echo esc_attr($status_title_header); ?>">
1381 1381 <span class="status-indicator"></span>
1382 1382 <span class="status-text"><?php echo esc_html($status_text_header); ?></span>
1383 1383 </div>
@@ -1637,9 +1637,9 @@
1637 1637 * @param string $description Optional subtitle shown below the title.
1638 1638 */
1639 1639 public function render_layout_open($page_title = '', $current_page = '', $description = '')
1640 1640 {
1641 - $theme = get_option('metasync_theme', 'dark');
1641 + $theme = esc_attr(get_option('metasync_theme', 'dark'));
1642 1642 $plugin_name = Metasync::get_effective_plugin_name();
1643 1643 $general = Metasync::get_option('general') ?? [];
1644 1644 $is_connected = Metasync_Heartbeat_Manager::instance()->is_heartbeat_connected($general);
1645 1645 // badge reflects confirmed heartbeat health (connected / stale /
@@ -1648,9 +1648,9 @@
1648 1648 $logo = $this->resolve_logo_data();
1649 1649
1650 1650 $current_theme = get_option('metasync_theme', 'dark');
1651 1651 ?>
1652 - <div class="wrap metasync-dashboard-wrap" data-theme="<?php echo esc_attr($theme); ?>">
1652 + <div class="wrap metasync-dashboard-wrap" data-theme="<?php echo $theme; ?>">
1653 1653
1654 1654 <?php
1655 1655 // Inject whitelabel color palette overrides
1656 1656 $wl_settings = Metasync::get_whitelabel_settings();
@@ -1680,9 +1680,8 @@
1680 1680 $vars .= '--' . esc_attr($grad_var) . ':linear-gradient(135deg,' . esc_attr($from) . ' 0%,' . esc_attr($to) . ' 100%);';
1681 1681 }
1682 1682 }
1683 1683 if ($vars) {
1684 - // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- CSS custom properties inside a raw <style> element; every value is a regex-validated hex color and HTML entities are not decoded in raw text elements
1685 1684 echo $selector . '{' . $vars . '}';
1686 1685 }
1687 1686 }
1688 1687 }
@@ -1842,12 +1841,12 @@
1842 1841 <ul>
1843 1842 <?php foreach ($seo_items as $key => $item):
1844 1843 $is_active = ($current_page === $key);
1845 1844 $icon = $icons[$key] ?? 'admin-generic';
1846 - $url = admin_url('admin.php?page=' . $page_slug . $item['slug_suffix']);
1845 + $url = esc_url(admin_url('admin.php?page=' . $page_slug . $item['slug_suffix']));
1847 1846 ?>
1848 1847 <li class="<?php echo $is_active ? 'metasync-sidenav-active' : ''; ?>">
1849 - <a href="<?php echo esc_url($url); ?>">
1848 + <a href="<?php echo $url; ?>">
1850 1849 <span class="metasync-sidenav-icon"><span class="dashicons dashicons-<?php echo esc_attr($icon); ?>"></span></span>
1851 1850 <?php echo esc_html($item['title']); ?>
1852 1851 </a>
1853 1852 </li>
@@ -1862,12 +1861,12 @@
1862 1861 <?php foreach ($plugin_items as $key => $item):
1863 1862 if ($key === 'report_issue') continue;
1864 1863 $is_active = ($current_page === $key);
1865 1864 $icon = $icons[$key] ?? 'admin-generic';
1866 - $url = admin_url('admin.php?page=' . $page_slug . $item['slug_suffix']);
1865 + $url = esc_url(admin_url('admin.php?page=' . $page_slug . $item['slug_suffix']));
1867 1866 ?>
1868 1867 <li class="<?php echo $is_active ? 'metasync-sidenav-active' : ''; ?>">
1869 - <a href="<?php echo esc_url($url); ?>">
1868 + <a href="<?php echo $url; ?>">
1870 1869 <span class="metasync-sidenav-icon"><span class="dashicons dashicons-<?php echo esc_attr($icon); ?>"></span></span>
1871 1870 <?php echo esc_html($item['title']); ?>
1872 1871 </a>
1873 1872 </li>
@@ -1918,9 +1917,9 @@
1918 1917 public function render_promo_sidebar()
1919 1918 {
1920 1919 $plugin_name = Metasync::get_effective_plugin_name();
1921 1920 $otto_name = Metasync::get_whitelabel_otto_name();
1922 - $settings_url = admin_url('admin.php?page=' . Metasync_Admin::$page_slug);
1921 + $settings_url = esc_url(admin_url('admin.php?page=' . Metasync_Admin::$page_slug));
1923 1922 $homepage = Metasync::HOMEPAGE_DOMAIN;
1924 1923 $docs_url = Metasync::DOCUMENTATION_DOMAIN;
1925 1924 // These links point at Search Atlas properties, so they only belong
1926 1925 // here while the plugin runs under its own name AND branding — a
@@ -1948,9 +1947,9 @@
1948 1947 <li><span class="promo-check">&#10003;</span> Real-time keyword tracking</li>
1949 1948 <li><span class="promo-check">&#10003;</span> Automated schema markup</li>
1950 1949 <li><span class="promo-check">&#10003;</span> Instant Google indexing</li>
1951 1950 </ul>
1952 - <a href="<?php echo esc_url($settings_url); ?>" class="metasync-promo-btn metasync-promo-btn--primary">
1951 + <a href="<?php echo $settings_url; ?>" class="metasync-promo-btn metasync-promo-btn--primary">
1953 1952 Connect Now
1954 1953 </a>
1955 1954 </div>
1956 1955