/** * 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' ) ), ); } } Tận hưởng niềm vui bất tận và cơ hội đổi đời với casino MCW – Sân chơi trực tuyến hàng đầu châu Á, n – Chambers Of Vikramaditya

Tận hưởng niềm vui bất tận và cơ hội đổi đời với casino MCW – Sân chơi trực tuyến hàng đầu châu Á, n

Tận hưởng niềm vui bất tận và cơ hội đổi đời với casino MCW – Sân chơi trực tuyến hàng đầu châu Á, nơi trí tuệ và may mắn gặp gỡ?

casino mcw là một sân chơi giải trí trực tuyến hàng đầu châu Á, nơi hội tụ những trò chơi casino hấp dẫn và cơ hội đổi đời. Nền tảng này đã nhanh chóng trở nên phổ biến nhờ sự đa dạng trong các trò chơi, giao diện thân thiện và các chương trình khuyến mãi hấp dẫn. MCW mang đến trải nghiệm cá cược đẳng cấp và an toàn, đáp ứng nhu cầu giải trí của đông đảo người chơi. Với sự đầu tư nghiêm túc và dịch vụ chăm sóc khách hàng tận tình, casino MCW xứng đáng là điểm đến lý tưởng cho những ai yêu thích thế giới cá cược.

Khám phá thế giới game đa dạng tại casino MCW

Casino MCW nổi tiếng với sự đa dạng trong các trò chơi, từ những trò chơi casino cổ điển đến những trò chơi hiện đại, đáp ứng mọi sở thích của người chơi. Bạn có thể tìm thấy các trò chơi như baccarat, roulette, blackjack, poker, slot game và nhiều trò chơi trực tiếp khác với những người chia bài thật. Giao diện của casino được thiết kế tỉ mỉ, sắc nét và dễ sử dụng, giúp người chơi dễ dàng tìm kiếm và tham gia các trò chơi yêu thích.

Ngoài ra, MCW còn liên tục cập nhật các trò chơi mới, mang đến cho người chơi những trải nghiệm thú vị và độc đáo. Hệ thống bảo mật tiên tiến đảm bảo an toàn tuyệt đối cho thông tin cá nhân và tài khoản của người chơi. MCW không chỉ là một sân chơi giải trí, mà còn là một cộng đồng nơi người chơi có thể giao lưu, học hỏi và chia sẻ kinh nghiệm lẫn nhau.

Với những ưu điểm vượt trội, casino MCW đã khẳng định vị thế của mình trên thị trường cá cược trực tuyến, trở thành điểm đến tin cậy của hàng triệu người chơi trên khắp châu Á. Sự chuyên nghiệp, tận tâm và luôn đặt lợi ích của khách hàng lên hàng đầu là những yếu tố quan trọng làm nên thành công của MCW.

Loại trò chơi Miêu tả Nhà cung cấp
Baccarat Trò chơi bài phổ biến với luật chơi đơn giản, dễ hiểu Evolution Gaming, SA Gaming
Roulette Trò chơi quay số với nhiều loại cược khác nhau Evolution Gaming, Playtech
Blackjack Trò chơi bài đòi hỏi kỹ năng và chiến thuật Evolution Gaming, Pragmatic Play

Các chương trình khuyến mãi hấp dẫn tại MCW

Casino MCW không chỉ nổi tiếng với sự đa dạng trong các trò chơi mà còn thu hút người chơi bằng những chương trình khuyến mãi vô cùng hấp dẫn. Từ các chương trình khuyến mãi chào mừng thành viên mới, đến các chương trình hoàn trả tiền cược hàng ngày, hàng tuần, MCW luôn có những ưu đãi đặc biệt dành cho người chơi. Các chương trình khuyến mãi này không chỉ giúp người chơi có thêm cơ hội để chiến thắng, mà còn giúp họ tiết kiệm chi phí cá cược.

Ngoài ra, MCW còn thường xuyên tổ chức các sự kiện đặc biệt với những giải thưởng giá trị lớn, tạo thêm sự hứng thú và động lực cho người chơi. Điều kiện để nhận các chương trình khuyến mãi của MCW thường rất đơn giản và dễ dàng đáp ứng, giúp người chơi có thể tận dụng tối đa các ưu đãi này.

Việc tham gia các chương trình khuyến mãi tại casino MCW không chỉ là một cách để tăng cơ hội thắng lợi, mà còn là một trải nghiệm thú vị và đáng nhớ. MCW luôn cố gắng tạo ra những chương trình khuyến mãi sáng tạo và hấp dẫn, đáp ứng nhu cầu của đông đảo người chơi.

Ưu điểm của chương trình khuyến mãi MCW

  • Đa dạng các loại khuyến mãi: Chào mừng, hoàn trả, thưởng sinh nhật, thưởng nạp lại…
  • Điều kiện nhận thưởng đơn giản, dễ dàng đáp ứng.
  • Giá trị khuyến mãi hấp dẫn, mang lại lợi ích thiết thực cho người chơi.

Cách tham gia chương trình khuyến mãi

Để tham gia các chương trình khuyến mãi tại casino MCW, bạn chỉ cần đăng ký tài khoản và thực hiện các bước theo hướng dẫn của chương trình. Thông tin chi tiết về các chương trình khuyến mãi được cập nhật thường xuyên trên trang web của MCW. Hãy theo dõi để không bỏ lỡ bất kỳ cơ hội nào!

Giao diện và trải nghiệm người dùng tại MCW

Một trong những yếu tố quan trọng làm nên sự thành công của casino MCW chính là giao diện đẹp mắt, thân thiện và dễ sử dụng. Trang web của MCW được thiết kế với tông màu chủ đạo là đen và vàng, tạo cảm giác sang trọng, đẳng cấp và chuyên nghiệp. Bố cục các thành phần trên trang web được sắp xếp một cách khoa học, giúp người chơi dễ dàng tìm kiếm thông tin và các trò chơi yêu thích.

Giao diện của MCW tương thích với nhiều thiết bị khác nhau, từ máy tính để bàn, laptop đến điện thoại di động và máy tính bảng. Điều này cho phép người chơi có thể truy cập và tham gia các trò chơi casino mọi lúc, mọi nơi. Ngoài ra, MCW còn cung cấp ứng dụng di động (app) cho cả hệ điều hành iOS và Android, mang đến trải nghiệm chơi game mượt mà và ổn định hơn.

Đội ngũ kỹ thuật của MCW luôn chú trọng đến việc cải thiện và tối ưu hóa trải nghiệm người dùng, đảm bảo rằng người chơi luôn có những trải nghiệm tốt nhất khi truy cập và sử dụng dịch vụ của MCW. Hệ thống hỗ trợ khách hàng 24/7, sẵn sàng giải đáp mọi thắc mắc và hỗ trợ người chơi một cách nhanh chóng và nhiệt tình.

Tốc độ tải trang và tính ổn định

  1. MCW cam kết mang đến tốc độ tải trang nhanh chóng và ổn định.
  2. Hệ thống máy chủ được đặt tại các trung tâm dữ liệu hàng đầu thế giới.
  3. Đảm bảo trải nghiệm chơi game mượt mà, không bị lag hoặc giật.

Hỗ trợ đa ngôn ngữ

Để phục vụ nhu cầu của đông đảo người chơi trên toàn thế giới, casino MCW hỗ trợ đa ngôn ngữ, bao gồm tiếng Việt, tiếng Anh, tiếng Trung, tiếng Thái và nhiều ngôn ngữ khác. Bạn có thể dễ dàng thay đổi ngôn ngữ hiển thị trên trang web theo sở thích của mình.

Bảo mật và thanh toán tại casino MCW

Bảo mật thông tin cá nhân và tài khoản của người chơi là ưu tiên hàng đầu của casino MCW. MCW sử dụng công nghệ mã hóa tiên tiến SSL 128-bit để bảo vệ dữ liệu của người chơi khỏi bị đánh cắp hoặc truy cập trái phép. Ngoài ra, MCW còn có chính sách bảo mật nghiêm ngặt, đảm bảo rằng thông tin của người chơi sẽ không được chia sẻ cho bất kỳ bên thứ ba nào.

Về phương thức thanh toán, MCW cung cấp nhiều lựa chọn khác nhau, bao gồm chuyển khoản ngân hàng, thẻ tín dụng, ví điện tử và tiền điện tử. Tất cả các giao dịch thanh toán đều được xử lý nhanh chóng, an toàn và bảo mật. MCW hợp tác với các đối tác thanh toán uy tín, đảm bảo rằng người chơi có thể thực hiện các giao dịch một cách dễ dàng và thuận tiện.

MCW cũng thường xuyên kiểm tra và cập nhật hệ thống bảo mật, đảm bảo rằng nó luôn được bảo vệ tối đa khỏi các mối đe dọa an ninh mới nhất. Với cam kết bảo mật và thanh toán an toàn, MCW đã tạo được sự tin tưởng và an tâm cho người chơi.

Lời khuyên khi tham gia casino MCW

Để có những trải nghiệm tốt nhất khi tham gia casino MCW, bạn nên tuân thủ một số lời khuyên sau: Tìm hiểu kỹ luật chơi trước khi tham gia bất kỳ trò chơi nào. Quản lý vốn cẩn thận, đặt ra giới hạn chi tiêu và không vượt quá giới hạn đó. Chơi có trách nhiệm, chỉ chơi khi bạn cảm thấy thoải mái và không bị ảnh hưởng bởi các yếu tố bên ngoài. Sử dụng các chương trình khuyến mãi để tăng cơ hội thắng lợi và tiết kiệm chi phí cá cược.

MCW luôn khuyến khích người chơi chơi có trách nhiệm và không coi cá cược là một cách để kiếm tiền. Nếu bạn cảm thấy mình đang gặp vấn đề với việc cá cược, hãy tìm kiếm sự giúp đỡ từ các tổ chức hỗ trợ chuyên nghiệp.

Casino MCW là một sân chơi giải trí tuyệt vời, mang đến cho bạn những giây phút thư giãn và cơ hội đổi đời. Hãy tận hưởng những trải nghiệm thú vị tại MCW và luôn nhớ chơi có trách nhiệm!