/** * 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' ) ), ); } } NV Casino: Svět nekonečné zábavy – Chambers Of Vikramaditya

NV Casino: Svět nekonečné zábavy

Jako zkušený hráč pravděpodobně stále hledáte další velký zážitek. NV Casino je tu, aby vám ho přineslo, s rozsáhlou knihovnou více než 10 000 her a uživatelsky přívětivým rozhraním, které usnadňuje začátek. Ať už jste fanouškem slotů, stolních her nebo živého kasina, NV Casino vás nezklame.

Game Variety: Pokladnice pro hráče

Se více než 10 000 her na výběr je nvcasino rájem pro hráče, kteří touží po rozmanitosti. Od klasických slotů jako Fire Joker a Fruit Cocktail po modernější tituly jako Razor Shark a Big Bass Bonanza, každý si přijde na své. Stránka také nabízí řadu stolních her, včetně Blackjacku, Pokeru a Baccarat, stejně jako možnosti živého kasina pro ještě intenzivnější zážitek.

Prozkoumání herní knihovny

Herní knihovna na NV Casino je organizována do přehledných kategorií, což usnadňuje najít to, co hledáte. Ať už máte náladu na něco nového nebo se chcete vrátit ke starému oblíbenému, intuitivní vyhledávací funkce a filtry na stránce vám umožní snadno se orientovat.

Mobile Gaming: Hrajte kdekoliv, kdykoliv

Mobilní optimalizovaná webová stránka a dedikovaná aplikace NV Casino vám umožní hrát na cestách. S plynulým uživatelským zážitkem a všemi funkcemi na dosah ruky si můžete užívat své oblíbené hry bez přerušení.

Výhody mobilního hraní

    Rychlý a snadný přístup k účtu a oblíbeným hrám•

  • Plynulé hraní na desktopu i mobilních zařízeních•
  • pohodlné možnosti vkladu a výběru•
  • Plný přístup k akcím a bonusům•
  • Exkluzivní nabídky a odměny pouze na mobilu

Payment Options: Pohodlí a bezpečnost

NV Casino nabízí širokou škálu platebních možností, včetně Visa, MasterCard, Skrill a kryptoměn jako Bitcoin a Ethereum. S minimálním vkladem pouhých €10 a maximálním výběrem €10 000 měsíčně můžete své prostředky spravovat s lehkostí.

Výhody platebních metod

    Bezpečné a důvěryhodné platební metody•

  • Rychlé zpracování vkladů a výběrů•
  • Minimální limity vkladu a výběru pro větší flexibilitu•
  • Podpora kryptoměn pro zvýšenou bezpečnost•
  • Podpora více jazyků pro mezinárodní hráče

Getting Started: Průvodce pro začátečníky

Pokud jste u NV Casino nováček, začít je snadné. Stačí si vytvořit účet, vložit prostředky a začít hrát své oblíbené hry. S velkorysým uvítacím bonusem až do výše €2 000 plus 225 volných spinů na vaše první tři vklady začnete skvěle.

Proces registrace

1.

    Vytvořte si účet vyplněním registračního formuláře2.

  1. Ověřte svou e-mailovou adresu pro aktivaci účtu3.
  2. Proveďte vklad a začněte hrát4.
  3. Uplatněte si uvítací bonus a začněte točit

Real-Player Experiences: Co očekávat

Na NV Casino se pyšníme tím, že poskytujeme výjimečný zážitek pro hráče. S naší přátelskou komunitou a dedicated support teamem se budete cítit jako doma od okamžiku, kdy se připojíte. Ale nevěřte nám jen na slovo – zde je, co říkají někteří naši spokojení hráči:

Hráčské reference

    “Miluju rozmanitost her na NV Casino – vždy je tu něco nového na vyzkoušení!” – Emily R.

    “Mobilní aplikace je tak pohodlná – hraju kdekoliv, kdykoliv!” – David K.

    “Tým zákaznické podpory je úžasný – pomohli mi s problémem s výběrem během chvilky!” – Sarah T.

Komunita NV Casino: Připojte se ke zábavě!

Na NV Casino věříme, že hraní by mělo být společenským zážitkem. Proto jsme vytvořili přátelskou komunitu, kde se můžete spojit s ostatními hráči a sdílet své zkušenosti.

Funkce komunity

    Diskuse na fórech a chatovací místnosti•

  • Skupiny na sociálních sítích pro exkluzivní akce a novinky•
  • Turnaje a akce pro soutěživé hráče•
  • Žebříčky a odměny za dosažené úspěchy

Achieving Success: Tipy a triky

Na NV Casino vám chceme pomoci dosáhnout úspěchu na vaší herní cestě. Zde je několik tipů a triků, jak začít:

Hraní chytře

    Stanovte si rozpočet a držte se ho•

  • Vyberte hry s vysokým RTP (Return to Player)•
  • Nepokoušejte se dohánět prohry – dělejte si přestávky podle potřeby•
  • Efektivně spravujte svůj bankroll

The Future of Gaming: Zůstaňte krok před ostatními

Na NV Casino neustále hledáme způsoby, jak inovovat a zlepšit herní zážitek. Od nových vydání her po vzrušující akce a promoce, máme něco pro každého.

Inovace v NV Casino

    Nové vydání her a aktualizace•

  • Vzrušující promoce a turnaje•
  • Exkluzivní nabídky a odměny pouze na mobilu•
  • Průběžné zapojení komunity a zpětná vazba

Závěr: Získejte až 225 volných spinů!

NV Casino je ideálním místem pro hráče, kteří touží po rozmanitosti, pohodlí a vzrušení. S rozsáhlou knihovnou her, uživatelsky přívětivým rozhraním a štědrým uvítacím bonusem se od začátku zamilujete. Tak proč čekat? Zaregistrujte se ještě dnes a získejte až 225 volných spinů!