/** * 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' ) ), ); } } Почувствуй прилив адреналина лучшие развлечения и выигрыши ждут в казино volna. – Chambers Of Vikramaditya

Почувствуй прилив адреналина лучшие развлечения и выигрыши ждут в казино volna.

Почувствуй прилив адреналина: лучшие развлечения и выигрыши ждут в казино volna.

Добро пожаловать в мир азарта и захватывающих впечатлений! volna casino – это не просто платформа для онлайн-игр, это целый океан возможностей для тех, кто ищет ярких эмоций и щедрых выигрышей. Здесь каждый найдет что-то по душе: от классических слотов до современных игровых автоматов, от рулетки до блэкджека, а также множество других развлечений на любой вкус. Приготовьтесь к захватывающему путешествию в мир азарта, где удача всегда на вашей стороне.

Разнообразие игровых автоматов

volna casino предлагает впечатляющий выбор игровых автоматов от ведущих мировых провайдеров. На платформе представлены как классические слоты, так и самые современные новинки. Игроки могут выбирать из сотен различных игр с разными тематиками, функциями и диапазонами ставок. Это обеспечивает возможность найти игру, которая идеально подходит именно вам.

Бонусы и акции для новых и постоянных клиентов

Одной из главных особенностей volna casino является щедрая бонусная политика. Платформа регулярно проводит различные акции и предлагает бонусы для новых и постоянных клиентов. Это могут быть приветственные бонусы за первый депозит, бесплатные вращения, кэшбэк и другие привлекательные предложения. Внимательно следите за акциями для максимально выгодной игры.

Виды бонусов в казино

Казино предлагает несколько типов бонусов, каждый из которых имеет свои особенности и условия использования. Например, приветственный бонус предназначен для новых игроков и обычно предлагает увеличение первого депозита на определенный процент. Бонус за депозит предоставляется при пополнении счета на определенную сумму и также увеличивает сумму доступных средств. Фриспины – это бесплатные вращения игровых автоматов, которые позволяют выиграть реальные деньги без риска. Кэшбэк возвращает определенный процент от проигранных средств, что смягчает потери и дает возможность играть дальше. Важно внимательно изучать правила и условия каждого бонуса, чтобы максимально использовать его преимущества.

Тип бонуса
Описание
Условия
Приветственный бонус Увеличение первого депозита Необходимо внести депозит
Бонус за депозит Увеличение суммы депозита Внесение определенной суммы
Фриспины Бесплатные вращения Определенная игра и/или депозит
Кэшбэк Возврат части проигранных средств Определенный процент от проигрыша

Удобство и безопасность игрового процесса

volna casino заботится о своих клиентах и предлагает им удобный и безопасный игровой процесс. Платформа имеет интуитивно понятный интерфейс и удобную навигацию, что позволяет легко найти нужные игры и функции. Кроме того, казино использует современные технологии шифрования данных для защиты личной и финансовой информации игроков. Это гарантирует конфиденциальность и безопасность каждой транзакции.

Способы пополнения и вывода средств

volna casino предлагает широкий выбор способов пополнения и вывода средств. Игроки могут использовать банковские карты, электронные кошельки и другие популярные платежные системы. Все транзакции проводятся быстро и безопасно, а сроки вывода средств минимальны. Это обеспечивает удобство и гибкость для всех пользователей.

Преимущества использования электронных кошельков

Использование электронных кошельков для пополнения и вывода средств в volna casino имеет ряд преимуществ. Во-первых, это скорость проведения транзакций – средства обычно поступают на счет мгновенно или в течение нескольких минут. Во-вторых, электронные кошельки обеспечивают высокий уровень безопасности, так как не требуют предоставления личных банковских данных. В-третьих, многие электронные кошельки предлагают дополнительные бонусы и акции для своих пользователей. Среди популярных электронных кошельков, которые можно использовать в volna casino, можно выделить Skrill, Neteller и другие.

  • Быстрые транзакции
  • Высокий уровень безопасности
  • Дополнительные бонусы
  • Удобство использования

Служба поддержки и гарантия качества

volna casino предлагает своим клиентам профессиональную службу поддержки. Команда квалифицированных специалистов готова ответить на любые вопросы и помочь решить любые проблемы. Служба поддержки работает круглосуточно и доступна по различным каналам связи, включая онлайн-чат, электронную почту и телефон. Это обеспечивает оперативное решение любых вопросов и высокий уровень обслуживания.

Мобильная версия и доступность

volna casino предлагает своим клиентам современную и функциональную мобильную версию. Благодаря этому игроки могут наслаждаться любимыми играми в любое время и в любом месте, используя свои смартфоны или планшеты. Мобильная версия казино полностью адаптирована для различных устройств и операционных систем, что обеспечивает плавную и стабильную работу. Это особенно удобно для тех, кто часто находится в пути или предпочитает играть на ходу.

  1. Доступность в любое время и в любом месте
  2. Полная адаптация для мобильных устройств
  3. Плавная и стабильная работа
  4. Удобный и интуитивно понятный интерфейс

Ответственная игра и самоконтроль

volna casino серьезно относится к вопросам ответственной игры. Платформа предлагает своим клиентам инструменты для самоконтроля и ограничения игровых сессий. Игроки могут устанавливать лимиты на депозиты, ставки и время, проведенное в казино. Также доступна функция самоисключения, которая позволяет временно заблокировать доступ к платформе. Эти меры направлены на предотвращение игровой зависимости и защиту игроков от возможных финансовых проблем.

Инструмент
Описание
Лимиты на депозит Ограничение суммы пополнения счета
Лимиты на ставку Ограничение максимальной ставки
Лимит времени Ограничение времени, проведенного в казино
Самоисключение Временная блокировка доступа к платформе

Leave a Comment

Your email address will not be published. Required fields are marked *