get_row( $wpdb->prepare( "SELECT count(*) AS count, SUM( LENGTH( option_value ) ) as autoload_size FROM {$wpdb->options} WHERE autoload IN ( $placeholders )", $autoload_values ) ); // phpcs:enable WordPress.DB // Only set starting point if not already set (preserve existing data). $existing = get_option( 'option_optimizer' ); if ( empty( $existing['starting_point_date'] ) ) { update_option( 'option_optimizer', [ 'starting_point_kb' => ( $result->autoload_size / 1024 ), 'starting_point_num' => $result->count, 'starting_point_date' => current_time( 'mysql' ), 'used_options' => [], // For backward compatibility. 'settings' => [ 'option_tracking' => 'pre_option', ], ], false ); } } /** * Deactivation hooked function to remove autoload from the plugin option. * * @return void */ function aaa_option_optimizer_deactivation() { $aaa_option_value = get_option( 'option_optimizer' ); update_option( 'option_optimizer', $aaa_option_value, false ); } /** * Ensure database table exists. * Runs on plugins_loaded to handle existing installs that don't trigger activation. * Migration is handled via AJAX on the plugin admin page. * * @return void */ function aaa_option_optimizer_maybe_upgrade() { // Only run on admin pages, not on AJAX or REST requests to avoid race conditions. if ( ! is_admin() || wp_doing_ajax() || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) ) { return; } // Check if table exists, create if not. if ( ! Progress_Planner\OptionOptimizer\Database::table_exists() ) { Progress_Planner\OptionOptimizer\Database::create_table(); } } add_action( 'plugins_loaded', 'aaa_option_optimizer_maybe_upgrade' ); /** * Initializes the plugin. * * @return void */ function aaa_option_optimizer_init() { $optimizer = new Progress_Planner\OptionOptimizer\Plugin(); $optimizer->register_hooks(); } aaa_option_optimizer_init();