/** * 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; } } Obrana a bezpečnost – THOR Tac
Bránit vlast je čestnou povinností Civilní obrana

Bránit vlast je čestnou povinností

Bránit území, rodinu a majetek bylo od pradávna přirozenou reakcí mužů na napadení svého území, své domoviny své vlasti. Nebyl to akt hrdinství nebo v... Zobrazit příspěvek
Mobilizace v České Republice, ale KOHO a s ČÍM? Civilní obrana

Mobilizace v České Republice, ale KOHO a s ČÍM?

Mobilizace, slovo často skloňované a používané hlavně v období podzimu, kdy si připomínáme všeobecnou mobilizaci z 1938. V souvislosti ... Zobrazit příspěvek
Návrat branné přípravy do škol  ROZHODNĚ Civilní obrana

Návrat branné přípravy do škol ROZHODNĚ

Když se řekne branná výchova, tak se nám dříve narozeným vybaví léta na základní a střední škole. Branné cvičení, zkoušení plynových masek, práce s&nb... Zobrazit příspěvek
Sebeobrana na ulici – Staň se větším zvířetem než ten, kdo na tebe útočí. Sebeobrana

Sebeobrana na ulici – Staň se větším zvířetem než ten, kdo na tebe útočí.

Sebeobrana na ulici, velmi často skloňované téma a také velmi mnoho názorů. Řekl bych, že jsme velmocí v počtech sebeobranných expertů. Skoro byc... Zobrazit příspěvek
Teroristické útoky – jak zvýšíte vaše šance na přežití? Sebeobrana

Teroristické útoky – jak zvýšíte vaše šance na přežití?

Tři teroristické útoky během několika týdnů. A několik zabitých nevinných lidí. Smutná bilance posledních dní. Zda-li se jedná o začátek nové vlny úto... Zobrazit příspěvek
Nutné obrany se nemusíme bát, zásah proti útočníkovi má smysl Sebeobrana

Nutné obrany se nemusíme bát, zásah proti útočníkovi má smysl

Žena která třináctkrát bodla nožem svého bratra a který na následky bodných zranění zemřel, byla definitivně osvobozena Nejvyšším soudem. Její jednání... Zobrazit příspěvek
Práce contractorů není tak růžová, jak se může zdát. Obrana a bezpečnost

Práce contractorů není tak růžová, jak se může zdát.

Během posledních týdnů se na naši společnost Thor Tac T.C. opět obrátilo několik mladíků, kteří mají zájmem o práci contractora v zahraničí. Vzhl... Zobrazit příspěvek
Zabezpečení měkkých cílů se zlepšuje, je ale dostatečné? Obrana a bezpečnost

Zabezpečení měkkých cílů se zlepšuje, je ale dostatečné?

V souvislosti s úterním vražděním (nebo s úterním vražedným útokem) v ostravské nemocnici byly opět vyzdviženy otázky k ochraně měkkých cílů. Asi nejč... Zobrazit příspěvek
Pokud domobrancům vezmeme jejich ,,hračky“, mohou se radikalizovat Obrana a bezpečnost

Pokud domobrancům vezmeme jejich ,,hračky“, mohou se radikalizovat

V září tohoto roku uveřejnil ministr vnitra Hamáček návrh zákona, který by měl omezit činnost skupin ozbrojených domobran. „Navrhovaný zákon by ... Zobrazit příspěvek
Zvládli by dnes Češi mobilizovat jako v roce 1938? Civilní obrana

Zvládli by dnes Češi mobilizovat jako v roce 1938?

V tomto týdnu jsme si připomněli výročí všeobecné mobilizace Československa v roce 1938. Mobilizace byla v rozhlase oznámena 23. září ve 22.30 a do 24... Zobrazit příspěvek
Bezpečnostní situace se mění, policie nikdy nemůže být všude. Lidé si budou muset zvyknout, že musí přebrat část odpovědnosti za svou osobu na sebe Migrace

Bezpečnostní situace se mění, policie nikdy nemůže být všude. Lidé si budou muset zvyknout, že musí přebrat část odpovědnosti za svou osobu na sebe

ROZHOVOR Proč nezabíjel rovnou ve Švýcarsku? „Nemůže to být tím, že ve Švýcarsku jsou legálně povolené zbraně a mohlo by se mu stát, že ho nějaký Švýc... Zobrazit příspěvek
Seminář pro seniory na U3V (Univerzita třetího věku), tentokrát pro VŠE. Obrana a bezpečnost

Seminář pro seniory na U3V (Univerzita třetího věku), tentokrát pro VŠE.

Ve dnech 5.a 6. září společnost Thor Tac T.C. uspořádala dva semináře pro seniory na U3V na VŠE Praha.  Semináře byly na téma „ Jak přežít přepad... Zobrazit příspěvek
Školení hotelového personálu od CPI Hotels, a.s. Obrana a bezpečnost

Školení hotelového personálu od CPI Hotels, a.s.

Nedávno jsme školili hotelový personál od CPI Hotels, a.s. na to, jak se zachovat v případě teroristického či jinak motivovaného útoku. Z mnoha zpětný... Zobrazit příspěvek
Jak se bránit teroristovi s nožem? Využívejte okolí a buďte agresivní, radí experti Obrana a bezpečnost

Jak se bránit teroristovi s nožem? Využívejte okolí a buďte agresivní, radí experti

PRAHA – Na konci června v severoněmeckém Hamburku zaútočil 26letý muž na několik lidí, přičemž jednoho zabil a šest dalších zranil. K útoku použ... Zobrazit příspěvek
Sledování videa rozhodně nestačí. Obrana a bezpečnost

Sledování videa rozhodně nestačí.

Elitní bojovníci se podívali na VIDEO, které učí lidi, jak přežít útok střelce v budově. A mají zásadní připomínky z praxe 17. 6. 2017 19:50 Policejní... Zobrazit příspěvek
Jsme ještě na cestě do prdele nebo už tam jsme? Obrana a bezpečnost

Jsme ještě na cestě do prdele nebo už tam jsme?

O teroristických útocích slýcháme v poslední době více než často. Stávají se tak „běžnou záležitostí“, že některé televizní stanice jako úvod hla... Zobrazit příspěvek
Prasečí noha na krku, nás před teroristy neochrání Obrana a bezpečnost

Prasečí noha na krku, nás před teroristy neochrání

Bývalý velitel elitní jednotky vstává ze židle: Lidé musí být připraveni se bránit a žádný bruselský mimoň nemá právo jim v tom bránit! 24. 3. 2017 16... Zobrazit příspěvek
Kurz přežití trochu jinak aneb staň se ochráncem smečky! Obrana a bezpečnost

Kurz přežití trochu jinak aneb staň se ochráncem smečky!

Kurzů přežití můžete najít na různých webových stránkách plno. Ale řekněme si není kurz jako kurz. Jeden takový redaktor našeho magazínu absolvoval v&... Zobrazit příspěvek
Trochu to těm klukům černým neklaplo Obrana a bezpečnost

Trochu to těm klukům černým neklaplo

Zobrazit příspěvek
Pepřový sprej rozjetý kamion nezastaví Obrana a bezpečnost

Pepřový sprej rozjetý kamion nezastaví

Nedávno jsem se dostal do sporu s jedním úředníkem z Bruselu, který mě přesvědčoval o tom, že povolení legálních zbraní je v podstatě n... 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
Bezpečnostní opatření v Česku jsou alibi pro politiky Obrana a bezpečnost

Bezpečnostní opatření v Česku jsou alibi pro politiky

Veškerá bezpečnostní opatření, která se zavádějí v České republice, slouží hlavně jako odstrašení a znesnadnění pro případného útočníka. Pokud ale zaú... Zobrazit příspěvek
Hasíme požár injekční stříkačkou Migrace

Hasíme požár injekční stříkačkou

Vždy, když dojde k nějakému teroristickému útoku v Evropě (v jiných částech světa nás to v podstatě nezajímá), tak se objeví na me... Zobrazit příspěvek