parse_annotations(); $this->before_load(); $this->load(); $this->after_load(); $this->sanitize(); } /** * Saves the data by updating the site option with the prepared data. * * @return void */ public function save() { $prepared_data = $this->prepare_data(); $data = wp_json_encode( $prepared_data ); $ret = update_site_option( $this->table, $data ); if ( false === $ret ) { $this->internal_logging[] = sprintf( 'Saving fail on %s with data %s.', $this->table, wp_json_encode( $data ) ); } else { /** * Handle settings update. No from WP CLI commands. * * @param array $old_settings The old option values. * @param array $prepared_data The new option values. * * @since 4.2.0 */ do_action( 'wd_settings_update', $this->old_settings, $prepared_data ); } } /** * Load data. * * @throws Exception Table must be defined before using. */ public function load() { if ( '' === $this->table ) { throw new Exception( 'Table must be defined before using.' ); } $data = get_site_option( $this->table ); if ( false === $data ) { return; } if ( ! is_array( $data ) ) { $data = json_decode( $data, true ); } if ( ! is_array( $data ) ) { return; } $data = $this->prepare_data( $data ); $this->old_settings = $data; $this->import( $data ); } /** * Deletes the site option associated with the current table. * * @return void */ public function delete() { delete_site_option( $this->table ); } /** * Hook method called after the data is loaded. * * @return void */ protected function after_load(): void { } /** * Hook method called before the data is loaded. * * @return void */ protected function before_load(): void { } /** * Get table name. * * @return string */ public function get_table(): string { return $this->table; } /** * Get old setting values. * * @return array */ public function get_old_settings(): array { return $this->old_settings; } }