| @@ -48,11 +48,12 @@ | ||
| 48 | 48 | delete_option(self::UNINSTALLED_OPTION); |
| 49 | 49 | |
| 50 | 50 | $this->check_requirements(); |
| 51 | 51 | $this->create_database_tables(); |
| 52 | - // Must precede set_default_options(): it reads `thinkrank_version`, | |
| 53 | - // which that method creates. | |
| 52 | + // Both must precede set_default_options(): they read | |
| 53 | + // `thinkrank_version`, which that method creates. | |
| 54 | 54 | $this->retire_sitemap_legacy_fallback(); |
| 55 | + $this->seed_feed_defaults(); | |
| 55 | 56 | $this->set_default_options(); |
| 56 | 57 | $this->setup_indexnow_key(); |
| 57 | 58 | $this->schedule_cron_jobs(); |
| 58 | 59 | $this->restore_webroot_artifacts(); |
| @@ -226,8 +227,53 @@ | ||
| 226 | 227 | |
| 227 | 228 | require_once THINKRANK_PLUGIN_DIR . 'includes/cleanup-webroot.php'; |
| 228 | 229 | |
| 229 | 230 | add_option(THINKRANK_SITEMAP_MARKED_WRITE_OPTION, '1', '', false); |
| 231 | + } | |
| 232 | + | |
| 233 | + /** | |
| 234 | + * Give a brand-new install the feed posture the competitors ship with. | |
| 235 | + * | |
| 236 | + * The feed controls (#635) default to off in | |
| 237 | + * {@see Site_Identity_Manager::get_default_settings()}, and they have to: | |
| 238 | + * two of the three change what a site already publishes. Signing every | |
| 239 | + * entry adds a line to what existing subscribers receive, and noindexing | |
| 240 | + * feeds withdraws URLs a site may have had indexed for years — on a podcast | |
| 241 | + * site, whose feed has to stay indexable, silently at that. Neither belongs | |
| 242 | + * in a plugin update. | |
| 243 | + * | |
| 244 | + * A first install has no subscribers and no indexed feed, so there is | |
| 245 | + * nothing to change and the protective defaults are simply the right | |
| 246 | + * starting point — which is what The SEO Framework, Yoast and Rank Math all | |
| 247 | + * ship. Seeding them here rather than in the defaults is what separates the | |
| 248 | + * two cases. | |
| 249 | + * | |
| 250 | + * Excerpt-only is left off even here: it changes what readers get rather | |
| 251 | + * than what scrapers can take, and that is the site owner's call. | |
| 252 | + * | |
| 253 | + * Same signal and same reasoning as {@see self::retire_sitemap_legacy_fallback()}: | |
| 254 | + * `thinkrank_version` is absent only on the very first activation, and an | |
| 255 | + * upgrade does not re-run the activation hook at all. | |
| 256 | + * | |
| 257 | + * @since 2.7.0 | |
| 258 | + * | |
| 259 | + * @return void | |
| 260 | + */ | |
| 261 | + private function seed_feed_defaults(): void { | |
| 262 | + if (get_option('thinkrank_version') !== false) { | |
| 263 | + return; | |
| 264 | + } | |
| 265 | + | |
| 266 | + $manager = new \ThinkRank\SEO\Site_Identity_Manager(); | |
| 267 | + | |
| 268 | + $manager->save_settings( | |
| 269 | + 'site', | |
| 270 | + null, | |
| 271 | + [ | |
| 272 | + 'feed_source_link' => true, | |
| 273 | + 'feed_noindex' => true, | |
| 274 | + ] | |
| 275 | + ); | |
| 230 | 276 | } |
| 231 | 277 | |
| 232 | 278 | /** |
| 233 | 279 | * Set default plugin options |