| @@ -379,17 +379,30 @@ | ||
| 379 | 379 | private function resolve_rendered_value($post_id, $field) |
| 380 | 380 | { |
| 381 | 381 | $is_title = ($field === 'title'); |
| 382 | 382 | |
| 383 | - $chain = array($is_title ? '_metasync_seo_title' : '_metasync_seo_desc' => ''); | |
| 384 | - | |
| 383 | + // MetaSync's own tiers come from Metasync_Seo_Precedence, the one place | |
| 384 | + // the order is defined. | |
| 385 | + // | |
| 385 | 386 | // OTTO stands down entirely for a post with the per-post disable flag set |
| 386 | 387 | // (otto/metasync-otto-seo-functions.php:2582 -> the title filter returns the |
| 387 | 388 | // incoming title untouched). Its persisted suggestion is then dead data, so |
| 388 | 389 | // reporting it would name a value the page does not use. |
| 389 | - if (!$this->otto_disabled_for_post($post_id)) { | |
| 390 | - $chain[$is_title ? '_metasync_otto_title' : '_metasync_otto_description'] = 'OTTO'; | |
| 391 | - } | |
| 390 | + // | |
| 391 | + // The persisted-OTTO tier is left out here, which is what this column has | |
| 392 | + // always done. SEO Health does include it, so the two surfaces can disagree | |
| 393 | + // about a post whose only value is `_metasync_metatitle`; carried forward | |
| 394 | + // unchanged rather than resolved as a side effect of consolidating. | |
| 395 | + $chain = Metasync_Seo_Precedence::chain( | |
| 396 | + $is_title | |
| 397 | + ? Metasync_Seo_Precedence::FIELD_TITLE | |
| 398 | + : Metasync_Seo_Precedence::FIELD_DESCRIPTION, | |
| 399 | + Metasync_Seo_Precedence::TYPE_POST, | |
| 400 | + array( | |
| 401 | + 'include_otto' => !$this->otto_disabled_for_post($post_id), | |
| 402 | + 'include_persisted_otto' => false, | |
| 403 | + ) | |
| 404 | + ); | |
| 392 | 405 | |
| 393 | 406 | $third_party = $this->get_active_plugin_meta_keys($is_title); |
| 394 | 407 | |
| 395 | 408 | // The legacy `meta_description` tag is only emitted when no active SEO plugin |