# Exposers Exposers are declarations and methods that expose the items of your repository in a certain way. ## Structure ### Name String $name The name of the Exposer. ### Slug String $slug A URL friendly version of the Exposer name, to be used as a parameter to the API request informing you want to get the data using this exposer. ### Supported Mapping Standard Array or true $mappers A list of mapping standards that is exposer supports. This means that whenever someone makes a request to receive that via this exposer, he/she will also be able to choose in which mapping standar they want the content to be served, or true for serve all mappers. ### Methods Every exposer have to implement PHP methods that will build the API response and have to be parent of Tainacan\Exposers\Types\Type ####callback rest response \WP_REST_Response rest_request_after_callbacks will receve a array of elements to be exposed, and api request, server and reponse. /** * Change response after api callbacks * @param \WP_REST_Response $response * @param \WP_REST_Server $handler * @param \WP_REST_Request $request * @return \WP_REST_Response */ public function rest_request_after_callbacks( $response, $handler, $request ); Using this method an exposer can also print data in the `HEAD` section of the HTML when visiting an item page. For example, JSON-LD exposer can add a JSON-LD object to the head of the page of every item in your collection, modifing the rest server ($handler). ### Registering a new exposer For register a new exposer, the action need to be added to `tainacan-register-exposer-types` hook, like: ``` function myNewExposer($exposers) { $exposers->register_exposer_type('Tainacan\Exposers\Types\NewExposer'); } add_action('tainacan-register-exposer-types', 'myNewExposer'); ``` ### Example set_headers( ['Content-Type: text/plain; charset=' . get_option( 'blog_charset' )] ); $txt = ''; $txt = $this->array_to_txt($response->get_data(), apply_filters('tainacan-exposer-txt', $txt)); $response->set_data($txt); return $response; } /** * Convert Array to Txt * @param array $data * @param string $txt * @return string */ protected function array_to_txt( $data, $txt ) { foreach( $data as $key => $value ) { if( is_numeric($key) ){ $key = apply_filters('tainacan-exposer-numeric-item-prefix', __('item', 'tainacan').'-', get_class($this)).$key; //dealing with giving a key prefix } if( is_array($value) ) { $txt .= $key.": ".$this->array_to_txt($value, '['.$txt.']\n'); } else { $txt .= $key.": ".$value .'\n'; } } return $txt; } }