routes->add( self::ROUTE, 'GET', $this->read_settings( ... ) ); $this->routes->add( self::ROUTE, 'POST', $this->change_settings( ... ) ); } /** @return array */ public function read_settings(): array { return $this->settings_store->load()->to_array(); } /** * @param WP_REST_Request> $settings_request * @return array|WP_Error */ public function change_settings( WP_REST_Request $settings_request ): array|WP_Error { $changes = (array) $settings_request->get_json_params(); try { $changed = $this->settings_change->apply( $this->settings_store->load(), $changes ); } catch ( InvalidSettingValue $invalid_value ) { return new WP_Error( self::INVALID_PARAMETER_CODE, $invalid_value->refusal->message(), array( 'status' => self::BAD_REQUEST_STATUS ) ); } $this->settings_store->save( $changed ); return $changed->to_array(); } }