/** * REST API: WP_REST_Post_Types_Controller class * * @package WordPress * @subpackage REST_API * @since 4.7.0 */ /** * Core class to access post types via the REST API. * * @since 4.7.0 * * @see WP_REST_Controller */ class WP_REST_Post_Types_Controller extends WP_REST_Controller { /** * Constructor. * * @since 4.7.0 */ public function __construct() { $this->namespace = 'wp/v2'; $this->rest_base = 'types'; } /** * Registers the routes for post types. * * @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( 'type' => array( 'description' => __( 'An alphanumeric identifier for the post type.' ), 'type' => 'string', ), ), array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_item' ), 'permission_callback' => '__return_true', '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 types. * * @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'] ) { $types = get_post_types( array( 'show_in_rest' => true ), 'objects' ); foreach ( $types as $type ) { if ( current_user_can( $type->cap->edit_posts ) ) { return true; } } return new WP_Error( 'rest_cannot_view', __( 'Sorry, you are not allowed to edit posts in this post type.' ), array( 'status' => rest_authorization_required_code() ) ); } return true; } /** * Retrieves all public post types. * * @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_items( $request ) { if ( $request->is_method( 'HEAD' ) ) { // Return early as this handler doesn't add any response headers. return new WP_REST_Response( array() ); } $data = array(); $types = get_post_types( array( 'show_in_rest' => true ), 'objects' ); foreach ( $types as $type ) { if ( 'edit' === $request['context'] && ! current_user_can( $type->cap->edit_posts ) ) { continue; } $post_type = $this->prepare_item_for_response( $type, $request ); $data[ $type->name ] = $this->prepare_response_for_collection( $post_type ); } return rest_ensure_response( $data ); } /** * Retrieves a specific post type. * * @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 ) { $obj = get_post_type_object( $request['type'] ); if ( empty( $obj ) ) { return new WP_Error( 'rest_type_invalid', __( 'Invalid post type.' ), array( 'status' => 404 ) ); } if ( empty( $obj->show_in_rest ) ) { return new WP_Error( 'rest_cannot_read_type', __( 'Cannot view post type.' ), array( 'status' => rest_authorization_required_code() ) ); } if ( 'edit' === $request['context'] && ! current_user_can( $obj->cap->edit_posts ) ) { return new WP_Error( 'rest_forbidden_context', __( 'Sorry, you are not allowed to edit posts in this post type.' ), array( 'status' => rest_authorization_required_code() ) ); } $data = $this->prepare_item_for_response( $obj, $request ); return rest_ensure_response( $data ); } /** * Prepares a post type object for serialization. * * @since 4.7.0 * @since 5.9.0 Renamed `$post_type` to `$item` to match parent class for PHP 8 named parameter support. * * @param WP_Post_Type $item Post type object. * @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. $post_type = $item; // Don't prepare the response body for HEAD requests. if ( $request->is_method( 'HEAD' ) ) { /** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php */ return apply_filters( 'rest_prepare_post_type', new WP_REST_Response( array() ), $post_type, $request ); } $taxonomies = wp_list_filter( get_object_taxonomies( $post_type->name, 'objects' ), array( 'show_in_rest' => true ) ); $taxonomies = wp_list_pluck( $taxonomies, 'name' ); $base = ! empty( $post_type->rest_base ) ? $post_type->rest_base : $post_type->name; $namespace = ! empty( $post_type->rest_namespace ) ? $post_type->rest_namespace : 'wp/v2'; $supports = get_all_post_type_supports( $post_type->name ); $fields = $this->get_fields_for_response( $request ); $data = array(); if ( rest_is_field_included( 'capabilities', $fields ) ) { $data['capabilities'] = $post_type->cap; } if ( rest_is_field_included( 'description', $fields ) ) { $data['description'] = $post_type->description; } if ( rest_is_field_included( 'hierarchical', $fields ) ) { $data['hierarchical'] = $post_type->hierarchical; } if ( rest_is_field_included( 'has_archive', $fields ) ) { $data['has_archive'] = $post_type->has_archive; } if ( rest_is_field_included( 'visibility', $fields ) ) { $data['visibility'] = array( 'show_in_nav_menus' => (bool) $post_type->show_in_nav_menus, 'show_ui' => (bool) $post_type->show_ui, ); } if ( rest_is_field_included( 'viewable', $fields ) ) { $data['viewable'] = is_post_type_viewable( $post_type ); } if ( rest_is_field_included( 'labels', $fields ) ) { $data['labels'] = $post_type->labels; } if ( rest_is_field_included( 'name', $fields ) ) { $data['name'] = $post_type->label; } if ( rest_is_field_included( 'slug', $fields ) ) { $data['slug'] = $post_type->name; } if ( rest_is_field_included( 'icon', $fields ) ) { $data['icon'] = $post_type->menu_icon; } if ( rest_is_field_included( 'supports', $fields ) ) { $data['supports'] = $supports; } if ( rest_is_field_included( 'taxonomies', $fields ) ) { $data['taxonomies'] = array_values( $taxonomies ); } if ( rest_is_field_included( 'rest_base', $fields ) ) { $data['rest_base'] = $base; } if ( rest_is_field_included( 'rest_namespace', $fields ) ) { $data['rest_namespace'] = $namespace; } if ( rest_is_field_included( 'template', $fields ) ) { $data['template'] = $post_type->template ?? array(); } if ( rest_is_field_included( 'template_lock', $fields ) ) { $data['template_lock'] = ! empty( $post_type->template_lock ) ? $post_type->template_lock : false; } $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( $post_type ) ); } /** * Filters a post type returned from the REST API. * * Allows modification of the post type data right before it is returned. * * @since 4.7.0 * * @param WP_REST_Response $response The response object. * @param WP_Post_Type $post_type The original post type object. * @param WP_REST_Request $request Request used to generate the response. */ return apply_filters( 'rest_prepare_post_type', $response, $post_type, $request ); } /** * Prepares links for the request. * * @since 6.1.0 * * @param WP_Post_Type $post_type The post type. * @return array Links for the given post type. */ protected function prepare_links( $post_type ) { 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_post_type_items( $post_type->name ) ), ), ); } /** * Retrieves the post type's schema, conforming to JSON Schema. * * @since 4.7.0 * @since 4.8.0 The `supports` property was added. * @since 5.9.0 The `visibility` and `rest_namespace` properties were added. * @since 6.1.0 The `icon` 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' => 'type', 'type' => 'object', 'properties' => array( 'capabilities' => array( 'description' => __( 'All capabilities used by the post type.' ), 'type' => 'object', 'context' => array( 'edit' ), 'readonly' => true, ), 'description' => array( 'description' => __( 'A human-readable description of the post type.' ), 'type' => 'string', 'context' => array( 'view', 'edit' ), 'readonly' => true, ), 'hierarchical' => array( 'description' => __( 'Whether or not the post type should have children.' ), 'type' => 'boolean', 'context' => array( 'view', 'edit' ), 'readonly' => true, ), 'viewable' => array( 'description' => __( 'Whether or not the post type can be viewed.' ), 'type' => 'boolean', 'context' => array( 'edit' ), 'readonly' => true, ), 'labels' => array( 'description' => __( 'Human-readable labels for the post type for various contexts.' ), 'type' => 'object', 'context' => array( 'edit' ), 'readonly' => true, ), 'name' => array( 'description' => __( 'The title for the post type.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), 'slug' => array( 'description' => __( 'An alphanumeric identifier for the post type.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), 'supports' => array( 'description' => __( 'All features, supported by the post type.' ), 'type' => 'object', 'context' => array( 'edit' ), 'readonly' => true, ), 'has_archive' => array( 'description' => __( 'If the value is a string, the value will be used as the archive slug. If the value is false the post type has no archive.' ), 'type' => array( 'string', 'boolean' ), 'context' => array( 'view', 'edit' ), 'readonly' => true, ), 'taxonomies' => array( 'description' => __( 'Taxonomies associated with post type.' ), 'type' => 'array', 'items' => array( 'type' => 'string', ), 'context' => array( 'view', 'edit' ), 'readonly' => true, ), 'rest_base' => array( 'description' => __( 'REST base route for the post type.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), 'rest_namespace' => array( 'description' => __( 'REST route\'s namespace for the post type.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), 'visibility' => array( 'description' => __( 'The visibility settings for the post type.' ), 'type' => 'object', 'context' => array( 'edit' ), 'readonly' => true, 'properties' => array( 'show_ui' => array( 'description' => __( 'Whether to generate a default UI for managing this post type.' ), 'type' => 'boolean', ), 'show_in_nav_menus' => array( 'description' => __( 'Whether to make the post type available for selection in navigation menus.' ), 'type' => 'boolean', ), ), ), 'icon' => array( 'description' => __( 'The icon for the post type.' ), 'type' => array( 'string', 'null' ), 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), 'template' => array( 'type' => array( 'array' ), 'description' => __( 'The block template associated with the post type.' ), 'readonly' => true, 'context' => array( 'view', 'edit', 'embed' ), ), 'template_lock' => array( 'type' => array( 'string', 'boolean' ), 'enum' => array( 'all', 'insert', 'contentOnly', false ), 'description' => __( 'The template_lock associated with the post type, or false if none.' ), 'readonly' => true, 'context' => array( 'view', 'edit', 'embed' ), ), ), ); $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() { return array( 'context' => $this->get_context_param( array( 'default' => 'view' ) ), ); } } Nejlep zahranin casino kompletn prvodce zahraninmi online kasiny.761 – Chambers Of Vikramaditya

Nejlep zahranin casino kompletn prvodce zahraninmi online kasiny.761

Nejlepší zahraniční casino – kompletní průvodce zahraničními online kasiny

Nejlepší zahraniční online casino nabízejí nejen vynikající hry, ale i bezpečnost a služby, které vám umožní hrát s pořádným zábavním zážitkem. Pokud hledáte zábavu a příležitost k vybohatení, zahraniční online casino jsou pro vás ideální volbou. V tomto průvodci vám ukážeme, jak si vybrat nejlepší zahraniční online casino a co vám mohou nabídnout.

Nejlepší zahraniční online casino jsou zahraniční casino známá svou transparentností, bezpečností a výběrem hlasových her. Před závazným rozhodnutím je důležité se seznámit s pravidly a podmínkami každého kasina. Zahraniční online casino oferují širokou škálu hlasových her, včetně klasických slotů, pokeru, blackjacku a rozhodovacích her. Každé zahraniční online casino má své vlastní charakteristické herové nabídky, které vám umožní najít hry, které vám nejsou známé.

Nejlepší zahraniční online casino také poskytují výkonné systémy platby, které vám umožní rychle a snadno vkládat a výběhnout peníze. Bezpečnost je pro zahraniční online casino důležitým aspektem, proto jsou většinou certifikovány a dodržují vysoké standardy ochrany osobních údajů a finančních informací.

Nejlepší zahraniční online casino také nabízejí výhodné bonusy a slevy pro nové a stávající hráče. Tyto bonusy mohou zahrnovat bezplatné karty, volný kredit nebo výhody v případě zvýšeného výdaje. Zahraniční online casino také často organizují soutěže a akce, které mohou být velmi přínosné pro hráče.

Nejlepší zahraniční online casino jsou také známá svou zákonností a transparentností. Většina z nich je certifikována a dodržuje všechny relevantní zákony a pravidla. Tím se ujistíte, že vaše peníze jsou v bezpečí a že hra je v souladu s většinou mezinárodních standardů.

Nejlepší zahraniční online casino: kompletní průvodce pro české hráče

Nejlepší zahraniční online casino pro české hráče je CasinoX. Toto casino nabízí širokou škálu hudebních slotů, live dealerových hřík a sportovníh kousků. CasinoX je známé svou bezpečností a výkonnou technologií, což zajišťuje nejlepší zážitek hráčům.

  • Ofrece širokou škálu hudebních slotů, live dealerových hřík a sportovních kousků.
  • Je známé svou bezpečností a výkonnou technologií.
  • Zajišťuje nejlepší zážitek hráčům.

Nejlepší zahraniční online casino pro české hráče musí poskytovat nejen širokou škálu hudebních slotů, ale také bezpečnost a výkonnost. CasinoX je ideální volba pro těch, kteří hledají nejlepší zážitek.

Nejlepší zahraniční online casino pro české hráče by mělo být schopné poskytnout hráčům širokou škálu hudebních slotů, live dealerových hřík a sportovních kousků. CasinoX je takovým casino, které nabízí všechno, co hledají hráči.

Nejlepší zahraniční online casino pro české hráče by mělo být schopné poskytnout hráčům bezpečnost a výkonnost. CasinoX je takovým casino, které zajišťuje nejlepší zážitek hráčům.

Nejlepší zahraniční online casino pro české hráče by mělo být schopné poskytnout hráčům širokou škálu hudebních slotů, live dealerových hřík a sportovních kousků. CasinoX je takovým casino, které nabízí všechno, co hledají hráči.

Reputované zahraniční online kasíny s nejlepšími bonusy

Pro české hráče je důležité vybrat zahraniční online kasíně s dobrým reputací a nabízejícími atraktivní bonusy. Pokud hledáte bezpečnou a zodpovědnou platformu, doporučujeme CasinoX. Toto kasíně je známé svým širokým nabídkou hudebních her a výjimečným servisem. Vyhodnocení hráčů a regulace v zemi působení CasinoX zajišťují jeho bezpečnost a zodpovědné hrátky.

Dráždivým bonusem pro nové hráče je 100% účetní bonus až na 1000 Kč. Tento bonus je dostupný pro prvních 1000 nových hráčů a může být použit na všechny hry v kasíně. Kromě toho je k dispozici zdarma hra na všechny hry, což je perfektní pro testování her a strategií.

Název kasína
Typ bonusu
Maximální hodnota
Procentuální hodnota
Platnost

CasinoX 100% účetní bonus 1000 Kč 100% 1000 hráčů LeoVegas 200% účetní bonus 2000 Kč 200% 1000 hráčů MrGreen 100% účetní bonus 1000 Kč 100% 1000 hráčů

LeoVegas je další zahraniční online kasíně, které nabízí atraktivní bonusové programy. Toto kasíně je známé svým širokým nabídkou hudebních her a výjimečným servisem. Vyhodnocení hráčů a regulace v zemi působení LeoVegas zajišťují jeho bezpečnost a zodpovědné hrátky. Nové hráče mohou získat 200% účetní bonus až na 2000 Kč, což je velmi atraktivní nabídka.

MrGreen je poslední z doporučených zahraničních online kasín, které nabízí atraktivní bonusové programy. Toto kasíně je známé svým širokým nabídkou hudebních her a výjimečným servisem. Vyhodnocení hráčů a regulace v zemi působení MrGreen zajišťují jeho bezpečnost a zodpovědné hrátky. Nové hráče mohou získat 100% účetní bonus až na 1000 Kč, což je velmi atraktivní nabídka.