/** * 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' ) ), ); } } онлайн 2026 для новичков и профи рекомендации экспертов.6499 – Chambers Of Vikramaditya

онлайн 2026 для новичков и профи рекомендации экспертов.6499

Лучшие казино онлайн 2026 для новичков и профи – рекомендации экспертов

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

Первым и важным шагом является выбор казино, которое имеет лицензию и является надежным. Некоторые из лучших онлайн-казино, которые получили лицензию, включают в себя Casino online, Top Casino и Online Casino.

Вторым шагом является выбор слотов, которые вам понравятся. В онлайн-казино есть огромное количество игровых автоматов, поэтому вам нужно выбрать те, которые вам понравятся. Некоторые из лучших слотов включают в себя Book of Ra, Starburst и Gonzo’s Quest.

Наконец, четвертым шагом является выбор поддержки и сервиса. Важно, чтобы казино предлагало вам поддержку и сервис, чтобы вам было легко получить помощь, если вам нужно.

В этом тексте мы собрали рекомендации экспертов для новичков и профессионалов, чтобы помочь вам найти лучшее онлайн-казино для вас. Мы надеемся, что это поможет вам найти лучшее онлайн-казино для игры на деньги.

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

Некоторые из лучших онлайн-казино, онлайн казино которые получили лицензию, включают в себя Casino online, Top Casino и Online Casino. Некоторые из лучших слотов включают в себя Book of Ra, Starburst и Gonzo’s Quest.

Вам нужно выбрать те, которые вам понравятся, и начать играть. Мы надеемся, что это поможет вам найти лучшее онлайн-казино для игры на деньги.

Выбор казино для начинающих: основные критерии

Выбор казино для начала игры на деньги может быть сложным и требующим времени. В первую очередь, вам нужно определиться с типом игр, которые вы хотите играть. Если вы предпочитаете играть в слоты, то вам нужно выбрать казино, которое имеет обширный ассортимент игровых автоматов.

Основные критерии для выбора казино

Вам нужно учитывать следующие критерии при выборе казино:

Лицензия: только лицензированные казино онлайн могут обеспечить безопасность вашего счета и гарантии, что вы получите свои выигрыши.

Ассортимент игр: если вы предпочитаете играть в слоты, то вам нужно выбрать казино, которое имеет обширный ассортимент игровых автоматов.

Безопасность: вам нужно проверить, какие меры безопасности казино принимает для защиты вашего счета и личных данных.

Лучшие казино для опытных игроков: функции и бонусы

Если вы опытный игрок, вы знаете, что лучшие онлайн-казино предлагают не только широкий выбор игр, но и множество функций и бонусов, чтобы улучшить игровой процесс.

Один из лучших примеров – это казино BitStarz, которое предлагает более 3 000 игр, включая слоты, карточные игры и рулетку. Казино также имеет функцию быстрого депозита и снятия денег, а также программу лояльности, которая позволяет игрокам получать бонусы и преимущества.

Функции и бонусы

  • Быстрый депозит и снятие денег
  • Программа лояльности
  • Бонусы для новых игроков
  • Бонусы для постоянных игроков
  • Турниры и акции

Еще одним примером является казино Wildz, которое предлагает более 2 000 игр, включая слоты, карточные игры и рулетку. Казино также имеет функцию быстрого депозита и снятия денег, а также программу лояльности, которая позволяет игрокам получать бонусы и преимущества.

Кроме того, казино Casino.com предлагает более 1 000 игр, включая слоты, карточные игры и рулетку. Казино также имеет функцию быстрого депозита и снятия денег, а также программу лояльности, которая позволяет игрокам получать бонусы и преимущества.

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

Как выбрать надежное казино: советы и рекомендации

Вторым шагом является проверка рецензий и отзывов других игроков. Это поможет вам понять, является ли казино надежным и безопасным для игры. Вы можете найти рецензии на различных форумах и сайтах, таких как Trustpilot или Casino Reviews.

Важные факторы для выбора казино

Третьим шагом является оценка важных факторов для выбора казино. Это включает в себя выбор игровых автоматов, которые вам понравились, а также проверку доступности различных платежных систем. Вам также нужно проверить, есть ли казино мобильная версия, чтобы вы могли играть на смартфоне или планшете.

Четвертым шагом является проверка обеспечения безопасности и конфиденциальности. Вам нужно убедиться, что казино использует современные технологии для защиты данных и обеспечения безопасности игроков. Это включает в себя использование SSL-шифрования и других мер безопасности.

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

Шестым шагом является проверка доступности поддержки. Вам нужно убедиться, что казино имеет доступную поддержку, которая может помочь вам в случае каких-либо вопросов или проблем. Вам также нужно проверить, есть ли казино чат-ассистент, который может помочь вам в реальном времени.