/** * REST API: WP_REST_Taxonomies_Controller class * * @package WordPress * @subpackage REST_API * @since 4.7.0 */ /** * Core class used to manage taxonomies via the REST API. * * @since 4.7.0 * * @see WP_REST_Controller */ class WP_REST_Taxonomies_Controller extends WP_REST_Controller { /** * Constructor. * * @since 4.7.0 */ public function __construct() { $this->namespace = 'wp/v2'; $this->rest_base = 'taxonomies'; } /** * Registers the routes for taxonomies. * * @since 4.7.0 * * @see register_rest_route() */ public function register_routes() { register_rest_route( $this->namespace, '/' . $this->rest_base, array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_items' ), 'permission_callback' => array( $this, 'get_items_permissions_check' ), 'args' => $this->get_collection_params(), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P[\w-]+)', array( 'args' => array( 'taxonomy' => array( 'description' => __( 'An alphanumeric identifier for the taxonomy.' ), 'type' => 'string', ), ), array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_item' ), 'permission_callback' => array( $this, 'get_item_permissions_check' ), 'args' => array( 'context' => $this->get_context_param( array( 'default' => 'view' ) ), ), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); } /** * Checks whether a given request has permission to read taxonomies. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access, WP_Error object otherwise. */ public function get_items_permissions_check( $request ) { if ( 'edit' === $request['context'] ) { if ( ! empty( $request['type'] ) ) { $taxonomies = get_object_taxonomies( $request['type'], 'objects' ); } else { $taxonomies = get_taxonomies( '', 'objects' ); } foreach ( $taxonomies as $taxonomy ) { if ( ! empty( $taxonomy->show_in_rest ) && current_user_can( $taxonomy->cap->assign_terms ) ) { return true; } } return new WP_Error( 'rest_cannot_view', __( 'Sorry, you are not allowed to manage terms in this taxonomy.' ), array( 'status' => rest_authorization_required_code() ) ); } return true; } /** * Retrieves all public taxonomies. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response Response object on success, or WP_Error object on failure. */ public function get_items( $request ) { // Retrieve the list of registered collection query parameters. $registered = $this->get_collection_params(); if ( isset( $registered['type'] ) && ! empty( $request['type'] ) ) { $taxonomies = get_object_taxonomies( $request['type'], 'objects' ); } else { $taxonomies = get_taxonomies( '', 'objects' ); } $data = array(); foreach ( $taxonomies as $tax_type => $value ) { if ( empty( $value->show_in_rest ) || ( 'edit' === $request['context'] && ! current_user_can( $value->cap->assign_terms ) ) ) { continue; } $tax = $this->prepare_item_for_response( $value, $request ); $tax = $this->prepare_response_for_collection( $tax ); $data[ $tax_type ] = $tax; } if ( empty( $data ) ) { // Response should still be returned as a JSON object when it is empty. $data = (object) $data; } return rest_ensure_response( $data ); } /** * Checks if a given request has access to a taxonomy. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access for the item, otherwise false or WP_Error object. */ public function get_item_permissions_check( $request ) { $tax_obj = get_taxonomy( $request['taxonomy'] ); if ( $tax_obj ) { if ( empty( $tax_obj->show_in_rest ) ) { return false; } if ( 'edit' === $request['context'] && ! current_user_can( $tax_obj->cap->assign_terms ) ) { return new WP_Error( 'rest_forbidden_context', __( 'Sorry, you are not allowed to manage terms in this taxonomy.' ), array( 'status' => rest_authorization_required_code() ) ); } } return true; } /** * Retrieves a specific taxonomy. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function get_item( $request ) { $tax_obj = get_taxonomy( $request['taxonomy'] ); if ( empty( $tax_obj ) ) { return new WP_Error( 'rest_taxonomy_invalid', __( 'Invalid taxonomy.' ), array( 'status' => 404 ) ); } $data = $this->prepare_item_for_response( $tax_obj, $request ); return rest_ensure_response( $data ); } /** * Prepares a taxonomy object for serialization. * * @since 4.7.0 * @since 5.9.0 Renamed `$taxonomy` to `$item` to match parent class for PHP 8 named parameter support. * * @param WP_Taxonomy $item Taxonomy data. * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response Response object. */ public function prepare_item_for_response( $item, $request ) { // Restores the more descriptive, specific name for use within this method. $taxonomy = $item; $base = ! empty( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name; $fields = $this->get_fields_for_response( $request ); $data = array(); if ( in_array( 'name', $fields, true ) ) { $data['name'] = $taxonomy->label; } if ( in_array( 'slug', $fields, true ) ) { $data['slug'] = $taxonomy->name; } if ( in_array( 'capabilities', $fields, true ) ) { $data['capabilities'] = $taxonomy->cap; } if ( in_array( 'description', $fields, true ) ) { $data['description'] = $taxonomy->description; } if ( in_array( 'labels', $fields, true ) ) { $data['labels'] = $taxonomy->labels; } if ( in_array( 'types', $fields, true ) ) { $data['types'] = array_values( $taxonomy->object_type ); } if ( in_array( 'show_cloud', $fields, true ) ) { $data['show_cloud'] = $taxonomy->show_tagcloud; } if ( in_array( 'hierarchical', $fields, true ) ) { $data['hierarchical'] = $taxonomy->hierarchical; } if ( in_array( 'rest_base', $fields, true ) ) { $data['rest_base'] = $base; } if ( in_array( 'rest_namespace', $fields, true ) ) { $data['rest_namespace'] = $taxonomy->rest_namespace; } if ( in_array( 'visibility', $fields, true ) ) { $data['visibility'] = array( 'public' => (bool) $taxonomy->public, 'publicly_queryable' => (bool) $taxonomy->publicly_queryable, 'show_admin_column' => (bool) $taxonomy->show_admin_column, 'show_in_nav_menus' => (bool) $taxonomy->show_in_nav_menus, 'show_in_quick_edit' => (bool) $taxonomy->show_in_quick_edit, 'show_ui' => (bool) $taxonomy->show_ui, ); } $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; $data = $this->add_additional_fields_to_object( $data, $request ); $data = $this->filter_response_by_context( $data, $context ); // Wrap the data in a response object. $response = rest_ensure_response( $data ); if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) { $response->add_links( $this->prepare_links( $taxonomy ) ); } /** * Filters a taxonomy returned from the REST API. * * Allows modification of the taxonomy data right before it is returned. * * @since 4.7.0 * * @param WP_REST_Response $response The response object. * @param WP_Taxonomy $item The original taxonomy object. * @param WP_REST_Request $request Request used to generate the response. */ return apply_filters( 'rest_prepare_taxonomy', $response, $taxonomy, $request ); } /** * Prepares links for the request. * * @since 6.1.0 * * @param WP_Taxonomy $taxonomy The taxonomy. * @return array Links for the given taxonomy. */ protected function prepare_links( $taxonomy ) { return array( 'collection' => array( 'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ), ), 'https://api.w.org/items' => array( 'href' => rest_url( rest_get_route_for_taxonomy_items( $taxonomy->name ) ), ), ); } /** * Retrieves the taxonomy's schema, conforming to JSON Schema. * * @since 4.7.0 * @since 5.0.0 The `visibility` property was added. * @since 5.9.0 The `rest_namespace` property was added. * * @return array Item schema data. */ public function get_item_schema() { if ( $this->schema ) { return $this->add_additional_fields_schema( $this->schema ); } $schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'taxonomy', 'type' => 'object', 'properties' => array( 'capabilities' => array( 'description' => __( 'All capabilities used by the taxonomy.' ), 'type' => 'object', 'context' => array( 'edit' ), 'readonly' => true, ), 'description' => array( 'description' => __( 'A human-readable description of the taxonomy.' ), 'type' => 'string', 'context' => array( 'view', 'edit' ), 'readonly' => true, ), 'hierarchical' => array( 'description' => __( 'Whether or not the taxonomy should have children.' ), 'type' => 'boolean', 'context' => array( 'view', 'edit' ), 'readonly' => true, ), 'labels' => array( 'description' => __( 'Human-readable labels for the taxonomy for various contexts.' ), 'type' => 'object', 'context' => array( 'edit' ), 'readonly' => true, ), 'name' => array( 'description' => __( 'The title for the taxonomy.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), 'slug' => array( 'description' => __( 'An alphanumeric identifier for the taxonomy.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), 'show_cloud' => array( 'description' => __( 'Whether or not the term cloud should be displayed.' ), 'type' => 'boolean', 'context' => array( 'edit' ), 'readonly' => true, ), 'types' => array( 'description' => __( 'Types associated with the taxonomy.' ), 'type' => 'array', 'items' => array( 'type' => 'string', ), 'context' => array( 'view', 'edit' ), 'readonly' => true, ), 'rest_base' => array( 'description' => __( 'REST base route for the taxonomy.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), 'rest_namespace' => array( 'description' => __( 'REST namespace route for the taxonomy.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), 'visibility' => array( 'description' => __( 'The visibility settings for the taxonomy.' ), 'type' => 'object', 'context' => array( 'edit' ), 'readonly' => true, 'properties' => array( 'public' => array( 'description' => __( 'Whether a taxonomy is intended for use publicly either via the admin interface or by front-end users.' ), 'type' => 'boolean', ), 'publicly_queryable' => array( 'description' => __( 'Whether the taxonomy is publicly queryable.' ), 'type' => 'boolean', ), 'show_ui' => array( 'description' => __( 'Whether to generate a default UI for managing this taxonomy.' ), 'type' => 'boolean', ), 'show_admin_column' => array( 'description' => __( 'Whether to allow automatic creation of taxonomy columns on associated post-types table.' ), 'type' => 'boolean', ), 'show_in_nav_menus' => array( 'description' => __( 'Whether to make the taxonomy available for selection in navigation menus.' ), 'type' => 'boolean', ), 'show_in_quick_edit' => array( 'description' => __( 'Whether to show the taxonomy in the quick/bulk edit panel.' ), 'type' => 'boolean', ), ), ), ), ); $this->schema = $schema; return $this->add_additional_fields_schema( $this->schema ); } /** * Retrieves the query params for collections. * * @since 4.7.0 * * @return array Collection parameters. */ public function get_collection_params() { $new_params = array(); $new_params['context'] = $this->get_context_param( array( 'default' => 'view' ) ); $new_params['type'] = array( 'description' => __( 'Limit results to taxonomies associated with a specific post type.' ), 'type' => 'string', ); return $new_params; } } Zahraniční dění – THOR Tac
Afghánští tlumočníci zůstávají bez pomoci. Afghánistán

Afghánští tlumočníci zůstávají bez pomoci.

Dramatickou evakuaci z Afghánistánu v srpnu 2021 sice dávno přebyly hrůzy války na Ukrajině, přesto není pochyb, že je stále co vysvětlovat. V US... Zobrazit příspěvek
Pluk Azov, pro někoho náckové, pro někoho hrdinové. Ukrajina

Pluk Azov, pro někoho náckové, pro někoho hrdinové.

Válka na Urajině trvá již téměř tři měsíce. Počáteční optimismus na ruské straně, kdy si Rusové mysleli, že Ukrajinu „vyřeší“ v řádu dnů, vystříd... Zobrazit příspěvek
Jakákoliv balistická ochrana je lepší než žádná ochrana. Ukrajina

Jakákoliv balistická ochrana je lepší než žádná ochrana.

Ruská agrese na Ukrajinu, převrátila svět vzhůru nohama a najednou jsme si uvědomili, že Evropa není až tak bezpečná, jak jsme se domnívali. V po... Zobrazit příspěvek
Není to hra, na Ukrajině je reálné nebezpečí, že tam umřou. Podcasty a rozhovory

Není to hra, na Ukrajině je reálné nebezpečí, že tam umřou.

Není to hra, na Ukrajině je reálné nebezpečí, že tam umřou. Toto varování vyslal válečný veterán z Afghánistánu Lumír Němec všem Čechům, kteří se... Zobrazit příspěvek
V boji s Talibánem shořela afghánská armáda jako list papíru. Co může za její krach? Afghánistán

V boji s Talibánem shořela afghánská armáda jako list papíru. Co může za její krach?

Vojska NATO se začala stahovat z Afghánistánu 1. května 2021 a již v té době se otevřeně mluvilo o možnosti, že afghánská armáda nedokáže za... Zobrazit příspěvek
SOG Afghánistán 2007 – První setkání s nepřítelem část 4. Afghánistán

SOG Afghánistán 2007 – První setkání s nepřítelem část 4.

„Máte zelenou”, opakuji “Máte zelenou, jděte na to.“ ozvalo se z vysílačky která měla spojení s velením britských sil pro danou oblast. Poslední ... Zobrazit příspěvek
SOG Afghánistán 2007 – První setkání s nepřítelem část 3. Afghánistán

SOG Afghánistán 2007 – První setkání s nepřítelem část 3.

Krátce po půlnoci jsme vyrazili na pochod, šli jsme za britskou patrolou, která znala prostor a měla nás zavézt do místa útoku. Procházeli jsme spící ... Zobrazit příspěvek
SOG Afghánistán 2007 – První setkání s nepřítelem část 2. Afghánistán

SOG Afghánistán 2007 – První setkání s nepřítelem část 2.

Plán je hotov a teď jej obhájit před britským velením. Na poradu s plukovníkem Westleym jsme šli se smíšenými pocity. Měli jsme obavu, že to bude... Zobrazit příspěvek
SOG Afghánistán 2007 – První setkání s nepřítelem část 1. Afghánistán

SOG Afghánistán 2007 – První setkání s nepřítelem část 1.

V červnu 2007 jsme byli v Afghánistánu již téměž dva měsíce a čekali jsme na materiál. Podle původního plánu, měla transportní letadla s&nbs... Zobrazit příspěvek
Pomáhali vojákům a věřili, že vojáci pomohou jim. Teď mají strach o sebe i své rodiny. Afghánistán

Pomáhali vojákům a věřili, že vojáci pomohou jim. Teď mají strach o sebe i své rodiny.

V souvislousti se stažením vojáků z Afghánistánu vyvstává řada otázek. Co bude  v této zemi po odchodu vojáků? Dostane se k m... Zobrazit příspěvek
Vojáci odchází po dvaceti letech z Afghánistánu. A co bude dál? Afghánistán

Vojáci odchází po dvaceti letech z Afghánistánu. A co bude dál?

Současný americký prezident Joe Biden oznámil stažení Američanů z Afghánistánu na 11. září, na 20. výročí útoků Al-Káidy na Ameriku. Válka  začal... Zobrazit příspěvek
Ochrana amerického Kapitolu byla  podceněna. Otázkou je pouze zdali to byla nedbalost nebo záměr. USA

Ochrana amerického Kapitolu byla podceněna. Otázkou je pouze zdali to byla nedbalost nebo záměr.

Smlouva kupní o koupi automobilu Útok stoupenců Donalda Trumpa nebo raději napíšu demonstrantů, aby nebyl hned nálepkován, na budovu washingtonského K... Zobrazit příspěvek
Zapojí se Amerika do parcelování Libye? Zahraniční dění

Zapojí se Amerika do parcelování Libye?

Od svržení Muammara  Kaddáfího uplynulo 9 let. Počáteční radost lybiiského obyvatelstva vystřídala frustrace a beznaděj. Není se čemu divit, jeji... Zobrazit příspěvek
Levičácký pokus o vytvoření „americké Kliniky“ nevyšel. Policie

Levičácký pokus o vytvoření „americké Kliniky“ nevyšel.

„Tak nám zabili Ferdinanda“ řekl  Švejk paní Müllerové, po té, co si přečetl zprávu o sarajevském atentátu v novinách. „Tak nám skončil dalš... Zobrazit příspěvek
Černoch, kvůli kterému hoří USA: Krotil jsem horší gaunery a nikdo nemusel umřít. Podcasty a rozhovory

Černoch, kvůli kterému hoří USA: Krotil jsem horší gaunery a nikdo nemusel umřít.

Ve Spojených státech to vře. Kvůli smrti černocha Georga Floyda, který se udusil po zákroku policistů, vyrazily v desítkách amerických měst do ulic ti... Zobrazit příspěvek
Erdogan připravuje další útok na hranice Evropy. Migrace

Erdogan připravuje další útok na hranice Evropy.

Zapnu televizi čínská chřipka, zapnu rádio čínská chřipka, internet, sociální sítě všude se řeší čínská chřipka. Vypadá to, že se svět kolem nás zasta... Zobrazit příspěvek
Nesmíme v tom nechat Řeky samotné! Turecko

Nesmíme v tom nechat Řeky samotné!

V době kdy se Evropa potýká s pandemií ve zprávách nevidíme nic jiného, než počty nakažených, počty mrtvých, se dostává do pozadí jiný  vážný pro... Zobrazit příspěvek
Střelba v Texasu, další jasný důkaz toho, že omezování legálních zbraní je nesmysl. USA

Střelba v Texasu, další jasný důkaz toho, že omezování legálních zbraní je nesmysl.

Koncem roku 2019 došlo ke dvěma událostem, které měly mnoho podobného, ale každá měla jiný konec. Mám na mysli střelbu v Ostravské nemocnici a st... Zobrazit příspěvek
EU a NATO jsou neschopné se postavit diktátorovi Erdoganovi. Doplatili na to Kurdové Turecko

EU a NATO jsou neschopné se postavit diktátorovi Erdoganovi. Doplatili na to Kurdové

Prezident Donald Trump prohlásil, že bude chránit ropné oblasti v Sýrii a je připraven posílit americkou vojenskou přítomnost v oblasti. Prohlášení Tr... Zobrazit příspěvek
To, co jsem dělal v Afghánistánu, nebyla odvaha, ale práce Afghánistán

To, co jsem dělal v Afghánistánu, nebyla odvaha, ale práce

„Hrál jsem počítačové hry před svým odjezdem do Afghánistánu a realita se od nich příliš neliší,“ říká v rozhovoru poručík ve výslužbě Lumír Němec, je... Zobrazit příspěvek
Holýma rukama střelce s puškou nezastavíš USA

Holýma rukama střelce s puškou nezastavíš

V americkém Texasu začaly platit nové zákony o držení zbraní. Co nového přinášejí a mají nějaká úskalí? V americkém Texasu začaly platit nové zákony o... Zobrazit příspěvek
Mírné zpřísnění prodeje střelných zbraní by Americe prospělo komentář pro Security magazín USA

Mírné zpřísnění prodeje střelných zbraní by Americe prospělo komentář pro Security magazín

Při střelbě v nákupním středisku v texaském El Pasu zemřelo 20 lidí a dalších 26 bylo zraněno. O 13 hodin později a 2500 kilometrů dál střelec v baru ... Zobrazit příspěvek
Vzkaz Evropy Kurdům: „Kurdové všech zemí vyližte nám… !“ Radikální Islamismus / ISIS

Vzkaz Evropy Kurdům: „Kurdové všech zemí vyližte nám… !“

Ten, kdo se více zajímá o situaci v Sýrii a o boje proti Islámskému státu, ten ví, že jednotky, které se podílejí největší částí na boji proti Islámsk... Zobrazit příspěvek
Evropa trestá odvahu Radikální Islamismus / ISIS

Evropa trestá odvahu

Bojovat proti terorismu se „vyplatí“, jak ukazuje příklad třiadvacetileté Joanny Palaniové. Tato mladá dánská studentka se rozhodla zanechat v roce 20... Zobrazit příspěvek
Když nezabijete útočícího teroristu, zabije on vás. Obrana a bezpečnost

Když nezabijete útočícího teroristu, zabije on vás.

Izraelský vojenský soud tento týden shledal vinným vojáka Elora Azariu, který loni zastřelil na zemi ležícího teroristu. Soudci ho uznali vinným za za... Zobrazit příspěvek
Ohlédnutí za rozhovory s Lumírem Podcasty a rozhovory

Ohlédnutí za rozhovory s Lumírem

Vzhledem k několika teroristickým aktivitám v uplynulém roce byl Lumír Němec několikrát v TV, především ve studiu ČT24, kde komentoval jednotlivé útok... Zobrazit příspěvek
Jakub Janda: „Evropské hodnoty ctí lidskou důstojnost“ Radikální Islamismus / ISIS

Jakub Janda: „Evropské hodnoty ctí lidskou důstojnost“

Původně jsem během vánočních svátků chtěl vypnout počítač a k ničemu se nevyjadřovat, ale bohužel jsem to nevydržel a musím reagovat na Jakuba Jandu a... Zobrazit příspěvek