PluginProbe
Search Atlas SEO – OTTO AI SEO Automation for WordPress / 2.7.2
Search Atlas SEO – OTTO AI SEO Automation for WordPress v2.7.2
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 | views/metasync-xml-sitemap.php +33 -39 2.6.25 → 2.7.2 View file →
@@ -55,39 +55,27 @@
55 55 <?php
56 56 $sitemap_files = $sitemap_generator->get_sitemap_files();
57 57 $sitemap_count = count($sitemap_files);
58 58
59 - // Check news/video sitemap status
59 + // Check news/video sitemap status.
60 + //
61 + // Read through get_sitemap_document() — the same accessor the
62 + // served route uses — so these tiles always describe the document
63 + // crawlers actually receive. Reading the transient and the
64 + // physical file in a different order than the serving code is
65 + // what made the dashboard report a URL count no crawler ever saw.
60 66 $news_sm_enabled = !empty($news_settings['enabled']);
61 67 $video_sm_enabled = !empty($video_settings['enabled']);
62 - $news_sm_exists = false !== get_transient('metasync_vsm_' . md5('news-sitemap.xml'))
63 - || file_exists(ABSPATH . 'news-sitemap.xml');
64 - $video_sm_exists = false !== get_transient('metasync_vsm_' . md5('video-sitemap.xml'))
65 - || file_exists(ABSPATH . 'video-sitemap.xml');
68 + $news_xml = $sitemap_generator->get_sitemap_document('news-sitemap.xml');
69 + $video_xml = $sitemap_generator->get_sitemap_document('video-sitemap.xml');
70 + $news_sm_exists = false !== $news_xml;
71 + $video_sm_exists = false !== $video_xml;
66 72 $extra_sitemap_count = ($news_sm_exists ? 1 : 0) + ($video_sm_exists ? 1 : 0);
67 73 $total_sitemap_count = $sitemap_count + $extra_sitemap_count;
68 74
69 75 // Count URLs in news/video sitemaps for total
70 - $news_url_count = 0;
71 - $video_url_count = 0;
72 - if ($news_sm_exists) {
73 - $news_xml = get_transient('metasync_vsm_' . md5('news-sitemap.xml'));
74 - if (!$news_xml && file_exists(ABSPATH . 'news-sitemap.xml')) {
75 - $news_xml = file_get_contents(ABSPATH . 'news-sitemap.xml');
76 - }
77 - if ($news_xml) {
78 - $news_url_count = substr_count($news_xml, '<url>');
79 - }
80 - }
81 - if ($video_sm_exists) {
82 - $video_xml = get_transient('metasync_vsm_' . md5('video-sitemap.xml'));
83 - if (!$video_xml && file_exists(ABSPATH . 'video-sitemap.xml')) {
84 - $video_xml = file_get_contents(ABSPATH . 'video-sitemap.xml');
85 - }
86 - if ($video_xml) {
87 - $video_url_count = substr_count($video_xml, '<url>');
88 - }
89 - }
76 + $news_url_count = $news_sm_exists ? substr_count($news_xml, '<url>') : 0;
77 + $video_url_count = $video_sm_exists ? substr_count($video_xml, '<url>') : 0;
90 78 $total_url_count = $url_count + $news_url_count + $video_url_count;
91 79 $any_sitemap_exists = $sitemap_exists || $news_sm_exists || $video_sm_exists;
92 80 ?>
93 81
@@ -117,9 +105,9 @@
117 105 <div class="metasync-sitemap-stat">
118 106 <div class="stat-icon"><span class="dashicons dashicons-list-view"></span></div>
119 107 <div class="stat-content">
120 108 <div class="stat-label">Sitemap Files</div>
121 - <div class="stat-value"><?php echo $total_sitemap_count; ?></div>
109 + <div class="stat-value"><?php echo (int) $total_sitemap_count; ?></div>
122 110 </div>
123 111 </div>
124 112
125 113 <div class="metasync-sitemap-stat">
@@ -407,14 +395,14 @@
407 395 <div class="dashboard-card metasync-sitemap-files-card">
408 396 <h2>Sitemap Files</h2>
409 397 <p style="color: var(--dashboard-text-secondary); margin-bottom: 20px;">
410 398 <?php if ($total_sitemap_count > 0): ?>
411 - Your sitemap has <?php echo $total_sitemap_count; ?> file<?php echo $total_sitemap_count > 1 ? 's' : ''; ?> — <?php echo $sitemap_count; ?> main (up to <?php echo number_format($sitemap_generator->get_urls_per_sitemap()); ?> URLs each)<?php
399 + Your sitemap has <?php echo (int) $total_sitemap_count; ?> file<?php echo $total_sitemap_count > 1 ? 's' : ''; ?> — <?php echo (int) $sitemap_count; ?> main (up to <?php echo number_format($sitemap_generator->get_urls_per_sitemap()); ?> URLs each)<?php
412 400 if ($news_sm_exists || $video_sm_exists) {
413 401 $extras = [];
414 402 if ($news_sm_exists) $extras[] = 'news';
415 403 if ($video_sm_exists) $extras[] = 'video';
416 - echo ', plus ' . implode(' &amp; ', $extras);
404 + echo ', plus ' . esc_html(implode(' & ', $extras));
417 405 }
418 406 ?>.
419 407 <?php else: ?>
420 408 <?php esc_html_e('No sitemap files generated yet. Use "Generate Sitemaps Now" above to create them.', 'metasync'); ?>
@@ -450,9 +438,9 @@
450 438 <td><?php echo number_format($urls_in_file); ?></td>
451 439 <td>
452 440 <?php
453 441 if ($last_generated) {
454 - echo esc_html(date('M j, Y g:i A', strtotime($last_generated)));
442 + echo esc_html(gmdate('M j, Y g:i A', strtotime($last_generated)));
455 443 } else {
456 444 echo '—';
457 445 }
458 446 ?>
@@ -480,10 +468,10 @@
480 468 <td>
481 469 <div class="sitemap-filename">news-sitemap.xml</div>
482 470 <div class="sitemap-url-range"><?php esc_html_e('Google News Sitemap', 'metasync'); ?></div>
483 471 </td>
484 - <td><?php echo $news_sm_exists ? $news_url_count : '<em style="color:var(--dashboard-text-secondary);">Not generated</em>'; ?></td>
485 - <td><?php echo ($news_sm_exists && $last_generated) ? esc_html(date('M j, Y g:i A', strtotime($last_generated))) : '—'; ?></td>
472 + <td><?php echo $news_sm_exists ? (int) $news_url_count : '<em style="color:var(--dashboard-text-secondary);">Not generated</em>'; ?></td>
473 + <td><?php echo ($news_sm_exists && $last_generated) ? esc_html(gmdate('M j, Y g:i A', strtotime($last_generated))) : '—'; ?></td>
486 474 <td>
487 475 <?php if ($news_sm_exists): ?>
488 476 <a href="<?php echo esc_url(home_url('/news-sitemap.xml')); ?>" target="_blank" class="button-view">
489 477 <span class="dashicons dashicons-external"></span>
@@ -508,10 +496,10 @@
508 496 <td>
509 497 <div class="sitemap-filename">video-sitemap.xml</div>
510 498 <div class="sitemap-url-range"><?php esc_html_e('Video Sitemap', 'metasync'); ?></div>
511 499 </td>
512 - <td><?php echo $video_sm_exists ? $video_url_count : '<em style="color:var(--dashboard-text-secondary);">Not generated</em>'; ?></td>
513 - <td><?php echo ($video_sm_exists && $last_generated) ? esc_html(date('M j, Y g:i A', strtotime($last_generated))) : '—'; ?></td>
500 + <td><?php echo $video_sm_exists ? (int) $video_url_count : '<em style="color:var(--dashboard-text-secondary);">Not generated</em>'; ?></td>
501 + <td><?php echo ($video_sm_exists && $last_generated) ? esc_html(gmdate('M j, Y g:i A', strtotime($last_generated))) : '—'; ?></td>
514 502 <td>
515 503 <?php if ($video_sm_exists): ?>
516 504 <a href="<?php echo esc_url(home_url('/video-sitemap.xml')); ?>" target="_blank" class="button-view">
517 505 <span class="dashicons dashicons-external"></span>
@@ -580,10 +568,11 @@
580 568 <?php
581 569 require_once plugin_dir_path(dirname(__FILE__)) . 'sitemap/class-metasync-sitemap-news.php';
582 570 $news_checker = new Metasync_Sitemap_News();
583 571 $news_conflicts = $news_checker->get_conflict_notices();
584 - $news_has_content = false !== get_transient('metasync_vsm_' . md5('news-sitemap.xml'))
585 - || file_exists(ABSPATH . 'news-sitemap.xml');
572 + // Reuse the accessor-derived value computed for the status tiles so
573 + // this panel cannot disagree with them, or with the served document.
574 + $news_has_content = $news_sm_exists;
586 575 $news_conflict_name = $news_checker->get_conflict_plugin_name();
587 576 $mss_brand = Metasync::get_effective_plugin_name();
588 577
589 578 # Flag a generated-but-empty news sitemap. $news_url_count is already
@@ -597,8 +586,9 @@
597 586
598 587 <?php if (!empty($news_conflict_name)): ?>
599 588 <div class="metasync-sitemap-conflict-note" style="display:flex; gap:7px; align-items:center; margin:0 0 16px; padding:8px 12px; border-radius:7px; background:rgba(245,158,11,0.08); border:1px solid rgba(245,158,11,0.28); font-size:12px; line-height:1.5; color:var(--dashboard-text-secondary,#6b7280);">
600 589 <span style="font-size:13px; line-height:1;">&#9888;&#65039;</span>
590 + <?php /* translators: %s: plugin brand name. */ ?>
601 591 <span><strong style="color:#8a5a00;"><?php echo esc_html($news_conflict_name); ?></strong> <?php printf(esc_html__('is also active — its news sitemap settings may conflict with %s\'s.', 'metasync'), esc_html($mss_brand)); ?></span>
602 592 </div>
603 593 <?php endif; ?>
604 594
@@ -652,9 +642,9 @@
652 642 </div>
653 643
654 644 <?php foreach ($news_conflicts as $notice) {
655 645 $notice_type = (strpos($notice, 'can coexist') !== false) ? 'notice-info' : 'notice-warning';
656 - echo '<div class="notice ' . $notice_type . ' inline" style="margin-bottom: 12px; padding: 12px 16px; border-radius: 8px; background: rgba(255, 152, 0, 0.1); border-left: 4px solid var(--dashboard-warning, #f59e0b); color: var(--dashboard-text-primary, #fff);"><p style="margin: 0;">&#9888; ' . esc_html($notice) . '</p></div>';
646 + echo '<div class="notice ' . esc_attr($notice_type) . ' inline" style="margin-bottom: 12px; padding: 12px 16px; border-radius: 8px; background: rgba(255, 152, 0, 0.1); border-left: 4px solid var(--dashboard-warning, #f59e0b); color: var(--dashboard-text-primary, #fff);"><p style="margin: 0;">&#9888; ' . esc_html($notice) . '</p></div>';
657 647 } ?>
658 648
659 649 <?php if ($news_empty_warning): ?>
660 650 <div class="notice notice-warning inline" style="margin-bottom: 12px; padding: 12px 40px 12px 16px; border-radius: 8px; background: rgba(255, 152, 0, 0.1); border-left: 4px solid var(--dashboard-warning, #f59e0b); color: var(--dashboard-text-primary, #fff);">
@@ -779,8 +769,9 @@
779 769 <td>
780 770 <?php
781 771 $tax_scrollable = count($tax_terms) > 10;
782 772 if ($tax_scrollable) : ?>
773 + <?php /* translators: %s: taxonomy name. */ ?>
783 774 <input type="text" class="metasync-checkbox-search" placeholder="<?php echo esc_attr(sprintf(__('Filter %s...', 'metasync'), strtolower($tax->label))); ?>">
784 775 <?php endif; ?>
785 776 <div class="metasync-checkbox-list <?php echo $tax_scrollable ? 'metasync-checkbox-scroll' : ''; ?>">
786 777 <?php foreach ($tax_terms as $term) : ?>
@@ -839,10 +830,11 @@
839 830 <?php
840 831 require_once plugin_dir_path(dirname(__FILE__)) . 'sitemap/class-metasync-sitemap-video.php';
841 832 $video_checker = new Metasync_Sitemap_Video();
842 833 $video_conflicts = $video_checker->get_conflict_notices();
843 - $video_has_content = false !== get_transient('metasync_vsm_' . md5('video-sitemap.xml'))
844 - || file_exists(ABSPATH . 'video-sitemap.xml');
834 + // Reuse the accessor-derived value computed for the status tiles so
835 + // this panel cannot disagree with them, or with the served document.
836 + $video_has_content = $video_sm_exists;
845 837 $video_conflict_name = $video_checker->get_conflict_plugin_name();
846 838 $mss_brand = Metasync::get_effective_plugin_name();
847 839
848 840 # Why videos were left out. Recorded by generate_video_sitemap() so the
@@ -897,8 +889,9 @@
897 889
898 890 <?php if (!empty($video_conflict_name)): ?>
899 891 <div class="metasync-sitemap-conflict-note" style="display:flex; gap:7px; align-items:center; margin:0 0 16px; padding:8px 12px; border-radius:7px; background:rgba(245,158,11,0.08); border:1px solid rgba(245,158,11,0.28); font-size:12px; line-height:1.5; color:var(--dashboard-text-secondary,#6b7280);">
900 892 <span style="font-size:13px; line-height:1;">&#9888;&#65039;</span>
893 + <?php /* translators: %s: plugin brand name. */ ?>
901 894 <span><strong style="color:#8a5a00;"><?php echo esc_html($video_conflict_name); ?></strong> <?php printf(esc_html__('is also active — its video sitemap settings may conflict with %s\'s.', 'metasync'), esc_html($mss_brand)); ?></span>
902 895 </div>
903 896 <?php endif; ?>
904 897
@@ -952,9 +945,9 @@
952 945 </div>
953 946
954 947 <?php foreach ($video_conflicts as $notice) {
955 948 $notice_type = (strpos($notice, 'can coexist') !== false) ? 'notice-info' : 'notice-warning';
956 - echo '<div class="notice ' . $notice_type . ' inline" style="margin-bottom: 12px; padding: 12px 16px; border-radius: 8px; background: rgba(255, 152, 0, 0.1); border-left: 4px solid var(--dashboard-warning, #f59e0b); color: var(--dashboard-text-primary, #fff);"><p style="margin: 0;">&#9888; ' . esc_html($notice) . '</p></div>';
949 + echo '<div class="notice ' . esc_attr($notice_type) . ' inline" style="margin-bottom: 12px; padding: 12px 16px; border-radius: 8px; background: rgba(255, 152, 0, 0.1); border-left: 4px solid var(--dashboard-warning, #f59e0b); color: var(--dashboard-text-primary, #fff);"><p style="margin: 0;">&#9888; ' . esc_html($notice) . '</p></div>';
957 950 } ?>
958 951
959 952 <?php if ($video_nothumb_notice): ?>
960 953 <div class="notice notice-warning inline" style="margin-bottom: 12px; padding: 12px 40px 12px 16px; border-radius: 8px; background: rgba(255, 152, 0, 0.1); border-left: 4px solid var(--dashboard-warning, #f59e0b); color: var(--dashboard-text-primary, #fff);">
@@ -1126,8 +1119,9 @@
1126 1119 <td>
1127 1120 <?php
1128 1121 $vtax_scrollable = count($tax_terms) > 10;
1129 1122 if ($vtax_scrollable) : ?>
1123 + <?php /* translators: %s: taxonomy name. */ ?>
1130 1124 <input type="text" class="metasync-checkbox-search" placeholder="<?php echo esc_attr(sprintf(__('Filter %s...', 'metasync'), strtolower($tax->label))); ?>">
1131 1125 <?php endif; ?>
1132 1126 <div class="metasync-checkbox-list <?php echo $vtax_scrollable ? 'metasync-checkbox-scroll' : ''; ?>">
1133 1127 <?php foreach ($tax_terms as $term) : ?>