query( $wpdb->prepare( "DELETE FROM {$wpdb->postmeta} WHERE meta_key = %s", $post_meta_key ) ); } // Delete all term-level OG meta (per-term overrides + cached taxonomy fallback). foreach ( array( '_og_title', '_og_image', '_og_description', '_og_image_alt', '_og_image_fallback_url' ) as $term_meta_key ) { $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->termmeta} WHERE meta_key = %s", $term_meta_key ) ); } // phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching // Clear related transients. delete_transient( 'robotstxt_og_diagnostics_cache' ); // On Multisite, clean up site-by-site. if ( is_multisite() ) { $sites = get_sites( array( 'number' => 0, ) ); foreach ( $sites as $site ) { switch_to_blog( (int) $site->blog_id ); // Delete site-specific options. foreach ( $options as $option_name ) { delete_option( $option_name ); } // Delete site-specific postmeta. // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching // Bulk delete during uninstall — no WP API exists to delete all postmeta rows by key at once. foreach ( array( '_og_image_fallback_url', '_og_title', '_og_description', '_og_image_alt', '_og_type', '_twitter_creator' ) as $post_meta_key ) { $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->postmeta} WHERE meta_key = %s", $post_meta_key ) ); } // Delete all term-level OG meta (per-term overrides + cached taxonomy fallback). foreach ( array( '_og_title', '_og_image', '_og_description', '_og_image_alt', '_og_image_fallback_url' ) as $term_meta_key ) { $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->termmeta} WHERE meta_key = %s", $term_meta_key ) ); } // phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching // Clear site-specific transients. delete_transient( 'robotstxt_og_diagnostics_cache' ); restore_current_blog(); } } } // Execute cleanup. robotstxt_og_uninstall_cleanup();