/** * 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' ) ), ); } } Pin Up Казино – Официальный сайт Пин Ап вход на зеркало 2025.5070 – Chambers Of Vikramaditya

Pin Up Казино – Официальный сайт Пин Ап вход на зеркало 2025.5070

Pin Up Казино – Официальный сайт Пин Ап вход на зеркало (2025)

Если вы ищете надежное и проверенное казино, где можно играть в любимые игры и получать реальные выигрыши, то Pin Up Казино – ваш выбор!

Pin Up Казино – это официальный сайт, который предлагает игрокам широкий спектр игр, включая слоты, карточные игры, рулетку и другие. Сайт имеет официальную лицензию и является одним из лучших казино в сети.

Один из главных преимуществ Pin Up Казино – это его официальный статус. Это означает, что вы можете быть уверены в безопасности своих данных и выигрышей. Сайт использует современные технологии для обеспечения безопасности игроков и защиты их информации.

Кроме того, Pin Up Казино предлагает игрокам широкий спектр бонусов и акций, которые помогут вам начать играть и получать выигрыши. Сайт имеет простой и удобный интерфейс, который позволяет игрокам легко найти и выбрать игру, которая им понравится.

Если вы ищете надежное и проверенное казино, где можно играть в любимые игры и получать реальные выигрыши, то Pin Up Казино – ваш выбор!

Также, на сайте Pin Up Казино есть раздел “FAQ”, где можно найти ответы на часто задаваемые вопросы и получить дополнительную информацию о сайте.

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

Никогда не забывайте, что игра в казино – это риск, и вы должны быть готовы потерять деньги.

Pin Up Казино – Официальный сайт Пин Ап

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

Преимущества Pin Up Казино

Pin Up Казино предлагает множество преимуществ, которые делают его одним из лучших казино в сети. В частности, это:

Удобный доступ к играм из любой точки мира, thanks to a user-friendly interface and a wide range of payment options.

Возможность пин ап играть на реальные деньги, as well as in demo mode, which allows you to test the games without risking your own money.

Возможность получать бонусы и промокоды, which can help you increase your chances of winning.

Возможность получать поддержку от опытных специалистов, who are always ready to help you with any questions or problems you may have.

Как начать играть в Pin Up Казино

Если вы хотите начать играть в Pin Up Казино, то вам нужно выполнить следующие шаги:

Зарегистрироваться на официальном сайте Pin Up Казино, providing the required information and verifying your account.

Внести депозит, which will allow you to start playing with real money.

Выбрать игру, which you want to play, and start playing.

Убедитесь, что вы понимаете правила игры и условия, на которые вы играете.

В целом, Pin Up Казино – это отличное место для игроков, которые ищут развлекательные услуги и хотят начать свой игровой опыт.

Вход на зеркало (2025)

Pin Up Казино – это популярная онлайн-игровая платформа, которая предлагает игрокам широкий спектр игр, включая слоты, карточные игры и другие азартные игры. Чтобы начать играть, вам нужно найти официальный сайт Pin Up Казино и зарегистрироваться.

Как найти зеркало Pin Up Казино?

Чтобы найти зеркало Pin Up Казино, вам нужно выполнить несколько простых шагов. Сначала, откройте любое поисковое окно и введите запрос “Pin Up Казино зеркало”. В результатах поиска вы увидите список сайтов, которые могут быть зеркалом Pin Up Казино.

Вторым шагом будет проверка authenticity сайта. Вы можете это сделать, сравнив URL сайта с официальным URL Pin Up Казино. Если URL сайта совпадает с официальным, то это может быть зеркало Pin Up Казино.

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

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

Если вы ищете безопасный способ играть на Pin Up Казино, то вам нужно использовать VPN (виртуальная частная сеть). VPN поможет вам скрыть свой IP-адрес и обеспечит безопасность вашего игрового процесса.

Помните, что безопасность игроков – это наша приоритетная задача.

Преимущества и функции Pin Up Казино

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

Преимущества Pin Up Казино

Еще одним преимуществом Pin Up Казино является его высокий уровень безопасности. Казино использует современные технологии для защиты вашей информации и обеспечивает безопасность вашего счета.

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

Кроме того, в Pin Up Казино есть мобильная версия, что позволяет вам играть в любое время и в любом месте, где есть доступ к интернету.

В целом, Pin Up Казино – это отличное место для игроков, которые ищут развлекательный опыт и реальные выигрыши.