| @@ -81,9 +81,9 @@ | ||
| 81 | 81 | * Import_Controller::ALLOWED_PLUGINS so an arbitrary slug can never be stored. |
| 82 | 82 | * |
| 83 | 83 | * @var string[] |
| 84 | 84 | */ |
| 85 | - const MIGRATABLE_PLUGINS = ['yoast', 'rankmath', 'seopress', 'aioseo']; | |
| 85 | + const MIGRATABLE_PLUGINS = ['yoast', 'rankmath', 'seopress', 'aioseo', 'squirrly']; | |
| 86 | 86 | |
| 87 | 87 | /** |
| 88 | 88 | * Register API routes. |
| 89 | 89 | * |
| @@ -440,9 +440,20 @@ | ||
| 440 | 440 | |
| 441 | 441 | $generator = new \ThinkRank\SEO\Sitemap_Generator(); |
| 442 | 442 | $settings = $generator->get_settings('site'); |
| 443 | 443 | |
| 444 | - if (empty($settings['enabled']) || !$generator->primary_sitemap_file_exists($settings)) { | |
| 444 | + if (empty($settings['enabled'])) { | |
| 445 | + return ''; | |
| 446 | + } | |
| 447 | + | |
| 448 | + // "Can ThinkRank answer this URL right now?" — not "is there a file?". | |
| 449 | + // Dynamic delivery serves the sitemap from PHP and writes nothing, so a | |
| 450 | + // file test alone hid the wizard's View Sitemap link on exactly the | |
| 451 | + // sites where the sitemap was working (#752). | |
| 452 | + $can_serve = 'dynamic' === $generator->resolve_delivery_mode($settings) | |
| 453 | + || $generator->primary_sitemap_file_exists($settings); | |
| 454 | + | |
| 455 | + if (!$can_serve) { | |
| 445 | 456 | return ''; |
| 446 | 457 | } |
| 447 | 458 | |
| 448 | 459 | return $generator->get_primary_sitemap_url($settings); |