get_var( "SELECT COUNT(*) FROM {$wpdb->options} WHERE option_value REGEXP '^(a|s|O|i|b|d):[0-9]+:'" ); // Count serialized postmeta. $serialized_meta = (int) $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->postmeta} WHERE meta_value REGEXP '^(a|s|O|i|b|d):[0-9]+:'" ); // Count serialized usermeta. $serialized_usermeta = (int) $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->usermeta} WHERE meta_value REGEXP '^(a|s|O|i|b|d):[0-9]+:'" ); $total_serialized = $serialized_options + $serialized_meta + $serialized_usermeta; // Check for serialized data with URLs (potential issues). $site_url = \get_site_url(); $serialized_with_urls = (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->options} WHERE (option_value LIKE %s OR option_value LIKE %s) AND option_value LIKE %s", $wpdb->esc_like( 'a:' ) . '%', $wpdb->esc_like( 'O:' ) . '%', '%' . $wpdb->esc_like( $site_url ) . '%' ) ); $details = array( 'serialized_options' => $serialized_options, 'serialized_meta' => $serialized_meta, 'serialized_usermeta' => $serialized_usermeta, 'total_serialized' => $total_serialized, 'serialized_with_urls' => $serialized_with_urls, ); if ( $serialized_with_urls > 50 ) { return static::warning( sprintf( /* translators: %d: number of serialized entries with URLs */ \__( 'Found %d serialized data entries containing your site URL. Regular find-and-replace won\'t work on these - you\'ll need a tool that handles serialized data properly.', '0-day-analytics' ), $serialized_with_urls ), \__( 'Use migration tools like Better Search Replace, WP Migrate DB, or interconnect/it\'s Search Replace DB that properly handle serialized data with URL updates.', '0-day-analytics' ), $details ); } if ( $total_serialized > 5000 ) { return static::info( sprintf( /* translators: %d: number of serialized entries */ __( 'Your database has %d serialized data entries. This is common for sites with many plugins. Use a serialization-aware tool for any search-replace operations.', '0-day-analytics' ), $total_serialized ), $details ); } return static::pass( sprintf( /* translators: %d: number of serialized entries */ \__( 'Your site has %d serialized data entries, which is normal. Standard migration tools will handle these without issues.', '0-day-analytics' ), $total_serialized ), $details ); } } }