/** * 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' ) ), ); } } Spinch – Chambers Of Vikramaditya

Spinch

Wprowadzenie

Jednym z coraz popularniejszych dostawców kasyna online jest Spinch Casino. Wygląda na to, że sporym powodem do tego może być fakt, iż oferuje on niezwykle szeroki wybór gier, a także bardzo urozmaicony pakiet bonusowy dla https://spinchcasino.com.pl swoich graczy. Czym zatem się różni Spinch od innych kasyn online? Aby dowiedzieć się więcej na ten temat, koniecznie należy przeczytać nasze szczegółowe recenzje tego kasyna.

Historia i Licencja

Jedną z pierwszych rzeczy, które przychodzą nam na myśl podczas rozpoczęcia analizy Spinch Casino to historia i licencja. Firma jest utworzona w 2018 roku przez nieznanych detalach do tej pory twórców, którzy mają doświadczenie w branży hazardu. Licencję obiera z Malti – kraj słynący swoją rzetelnością i transparentnością w kwestii przepisów dotyczących gier losowych.

Zarejestrowanie Konta

Przechodząc do procesu rejestracji, musimy stwierdzić, że jest on bardzo prosty i niezbyt uciążliwy dla graczy. Wystarczy kliknąć w przycisk "Rejestracja", a następnie podać kilka niezbędnych danych, takich jak imię oraz nazwisko, data urodzenia, adres email lub telefon komórkowy. System automatycznie generuje również hasło do konta.

Funkcje Konta

W porównaniu do innych kasyn online Spinch ma dosyć rozbudowane konto użytkownika – nasz gracz może w pełni korzystać ze swojego konta, bez konieczności logowania się każdorazowo. Użytkownik otrzymuje dostęp do kilku opcji ustawiania oraz personalizacji swoich preferencji gry. Dodatkowym atutem jest również możliwość blokowania określonego okresu gry (np. dziennie, tygodniowo), co powinno pomóc w kontrolowanemu hazardzie.

Promocje i Bonuse

Kwestia promocji to bardzo ważny element kasyna online. W przypadku Spinch Casino jest on również zdecydowanie na plus – a jedną z bardziej kuszących propozycji, jaka została przedstawiona przez twórców serwisu, są warianty specjalnych bonusów (np. „Niezrównany Bonus Wpłaty”), które przyczyniają się do korzystania w pełni ze swojego konta.

Metody Płatności

Warto wspomnieć o możliwościach związanych z wpłacaniem pieniędzy na konto. Spinch Casino przychyla się do bardzo szerokiego spektrum metod płatniczych (np. VISA/Mastercard, Bitcoin). Niektóre systemy mogą być dostępne jedynie w określonych krajach czy regionach geograficznych – w takim przypadku nie należy lekceważić informacji umieszczanych na stronie internetowej kasyna. Oczywiście każde z nich musi zostać uzupełnione o odpowiednie dane w celu przeprowadzenia płatności.

Zasoby Gier

Spinch Casino dysponuje najdłużej istniejącym rozwiązaniem – liczbą dostępnych gier na każde konto gracza. Oferowane są tu zarówno klasyki jak i nowości, dzięki czemu zawsze ma coś do zaprobowania dla użytkowników. Niezmiernie istotną jest również liczba dostępnych wersji demo – dzięki nim gracz może eksperymentować bez ryzyka utraty własnej gotówki.

Oprogramowanie

Powyższe punkty zostały z pewnością powiązione ze środowiskiem wyświetlającym, czyli takim co daje nam możliwość rozrywek. Spinch Casino korzysta z bardzo dobrych dostawców oprogramowania (np. NetEnt) – dodatkowo każdy z nich ma własną aplikację na urządzenia mobilne.

Wersja Mobilna

Powyższe kwestie pozwoliły nam już sprawdzić, czy kasyno jest odpowiednio dostosowane do użytku na różnych typach urządzeń – np. komórków (tym razem poprzez wstępne przeglądanie wyświetleń). W niektórych przypadkach twórca zdecydował o stworzeniu oddzielnej aplikacji mobilnej.

Ochrona Danych

Wiele kasyn online cieszy się niemożliwością zapewnienia absolutnie niskiej sprawności danych przez gracza, do którego mogliby mieć dostęp nieautoryzowani użytkownicy (np. dzięki przeglądaniu plików cookie). Klient Spinch Casino może również w pełni oddawać się swoim uczuciom bez ryzyka utraty danych osobowych.

Wsparcie Klienta

W odróżnieniu od wielu innych kasyn, ten używa wyjaśnień dla swoich klientów co ma być podstawowym punktem do rozwiązania wszelkich problemów zwiąanych z systemem. Niestety niektóre problemy mogą wynikać ze słabości internetowego połączenia oraz niedokładnego wypełnienia przez gracza informacji na temat swojego profilu.

Doświadczenie Użytkownika

W tym miejscu możemy dodać, że Spinch jest kasynem z wyglądem dostosowanym do możliwości urządzenia komputerowego oraz w niektórych przypadkach – takim co pozwala na obsługę aplikacji mobilnej.

Ocena Kasyna

W ramach naszych badań postanowiliśmy ocenić funkcjonalność systemu kasyno Spinch. Wiele rzeczy jest tu z pewnością urokliwe – np. ogromna liczba dostępnych gier, w tym kilka gier klasycznych i nowych (takich jak gry rozdaniowe), oraz niezwykle szybki proces wyłacza.

Podsumowanie

Na koniec moglibyśmy powiedzieć, że Spinch Casino to świetna propozycja dla graczy zainteresowanych dużym doborze gier i ofertą bonusem. Dzięki nowoczesnym rozwiązanom technologicznym (np. systemowi rejestracji konta) oraz wspaniałemu wyglądowi, kasyno to niezwykle dostępne dla graczy o różnych preferencjach i poziomie doświadczenia.

Dodatkowe Informacje

Spinch Casino zdecydowało się na wprowadzenie specjalnego systemu obsługi klienta, który umożliwia szybkie dostarczanie odpowiedzi na wszystkie pytania oraz rozwiązywanie wszelkich problemów. Dodatkowo kasyno wdrożyło także technologię SSL, co znacznie podwyższa jego bezpieczeństwo.

Dowolne Zadawane Pytania

Aby ułatwić dla Czytelników odszukanie odpowiedzi na wszystkie ich pytania dotyczące kasyna, postanowiłem zestawić najczęstsze zadawane przez użytkowników.

Pytania i Odpowiedzi

  • Jakie są warunki udziału w bonusach? Odpowiedź: Do bonusów mogą przystąpić osoby nowo zarejestrowane na stronie – w celu dołączenia trzeba się wylogować.

  • Ile czasu muszę oczekiwać, nim pieniądze zostaną przyznane? Odpowiedź: W przypadku niektórych dostawców płatniczych można być pewnym szybkości wpłaty.

  • Co powinienem zrobić w przypadku, kiedy utracone jest hasło konta użytkownika. Odpowiedź: Dodatkowo można również sprawdzić czy nie istnieją jakieś dodatkowe dane do ustalenia się tego punktu.

Informacje o Spinch

W niniejszym podpunkcie przedstawiamy jeszcze kilka dodatkowych informacji, które mogą okazać się przydatne w trakcie analizy kasyna online.