__( 'Suggested entity types are suggestions. AI-O Optimiser checks every one against the bundled Schema.org registry, but only you know what a page or post actually is — review each suggestion and apply it only where it genuinely describes that content. Structured data does not guarantee rich results, rankings or inclusion in AI answers.', 'ai-o-optimiser' ), // The audit table, where rows carry a recommended reconciliation. 'schema_audit' => __( 'Audit findings and recommended fixes are advisory. Review the recommendation against the page it belongs to before applying it, and expect no guaranteed change in rankings, rich results or AI citation as a result.', 'ai-o-optimiser' ), // Generated titles, descriptions and keywords. 'metadata' => __( 'Generated metadata is a draft for your review, not finished copy. Check that each title and description is accurate for the page before applying it. Nothing here guarantees rankings, click-through or traffic.', 'ai-o-optimiser' ), // Search-evidence-led content suggestions. 'opportunities' => __( 'Opportunities are drawn from search evidence and are directional only. Whether a topic is worth writing, and how, remains an editorial decision. No opportunity guarantees ranking, traffic or AI citation.', 'ai-o-optimiser' ), // NAP and external listings. 'nap' => __( 'Listing and consistency findings are evidence to review, not instructions. Confirm each correction against the real business facts before acting on it. Consistent NAP data supports entity clarity; it does not guarantee local rankings, listings or AI inclusion.', 'ai-o-optimiser' ), // Site model / operating model guidance. 'site_model' => __( 'These are suggestions based on the site’s own published content. You decide whether they describe the site correctly, and nothing is saved until you confirm it.', 'ai-o-optimiser' ), // The standing line on every AI-O screen. 'results' => __( 'AI-O Optimiser reports the evidence it observes and suggests changes for you to review. Search engines and AI systems decide independently what they crawl, index, rank and cite, so no result here is guaranteed.', 'ai-o-optimiser' ), ); return isset( $texts[ $key ] ) ? $texts[ $key ] : ''; } /** * Inline advisory note, for placing beside the thing being suggested. * * Returns markup rather than echoing so callers inside larger echo/printf * expressions can compose with it. Already escaped: print with * wp_kses_post() at the call site so the intent is visible in review. * * @param string $key Advisory key. * @param string $extra Optional extra class on the wrapper. * @return string Markup, or '' for an unknown key. */ public static function markup( $key, $extra = '' ) { $text = self::text( $key ); if ( '' === $text ) { return ''; } $class = 'ai-o-optimiser-advisory'; if ( '' !== $extra ) { $class .= ' ' . sanitize_html_class( $extra ); } return '
' . esc_html( $text ) . '
'; } /** * Echo an inline advisory note. * * @param string $key Advisory key. * @param string $extra Optional extra class on the wrapper. */ public static function note( $key, $extra = '' ) { echo wp_kses_post( self::markup( $key, $extra ) ); } /** The standing line, once per AI-O screen. */ public static function render_footer() { if ( ! self::is_workspace_screen() ) { return; } ?>