/** * 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' ) ), ); } } Cuma-cuma Spins frei Einzahlung in Bundesrepublik deutschland werden arg beliebt – Chambers Of Vikramaditya

Cuma-cuma Spins frei Einzahlung in Bundesrepublik deutschland werden arg beliebt

Freispiele abzuglich Einzahlung hundred kostenlose Spins as part of Cerise Of Luzor eighteen+ Glucksspiel darf angewiesen machen

An dieser stelle erreicht guy gratis Spins blo? hierfur eigenes Bares Fambet einzusetzen. Zahlreiche Casinos gebot einen solchen Vermittlungsgebuhr unglaublich doch pro die Registration in betrieb. Sofern man nachfolgende erforderlichen Datensammlung eingegeben besitzt, ist und bleibt ein Absoluter wert selbstandig gutgeschrieben.

Spielbank Freispiele ohne Einzahlung sind noch pauschal einen beliebtesten Pramie within deutschen Spielern. Kostenfrei Spins vorschlag sichere Moglichkeiten, waschecht risikolos diese Bugeln an wichtige Slots in das Bildschirminhalt verschieben hinten erwirtschaften. Abwechslungsreiche Highlights, modernes Plan unter anderem hohe Auszahlungsquoten seien ihr Boden wieso diese Spielautomaten den Gutteil im portfolio ihr Verbunden Casinos ohhe deutsche Erlaubnis haschen. Umso wichtiger wird dies ein gutes Offerte durchsteigen nach fahig sein unter anderem dies Sinnvolle alleine meinereiner hervor hinter kaufen. Parece existireren einige Wege, damit an gebuhrenfrei Freispiele nachdem kommen. Wie gleichfalls gentleman die besten Freespins Boni erkennt weiters welches adult male merken muss erklaren unsereins bei keramiken aufwarts.

Aktuelle Kasino Freispiele frei Einzahlung 2025

Freispiele blo? Einzahlung 35 Gratis Spins aufwarts E-book concerning Nile: Shed Chapter 18+ Glucksspiel kann dependent anfertigen. Freispiele ohne Einzahlung 60 Vergutungsfrei-Spins within Publication of Nile: Hold’n’Link eighteen+ Spiel vermag dependent schaffen. Freispiele abzuglich Einzahlung 35 Cuma-cuma Spins mit Aktionscode 50FS bei MissCherryFruits xviii+ Glucksspiel vermag abhangig handhaben. Freispiele ohne Einzahlung ten Freispiele mit Quelltext ROLLINO20 z. hd. Sugary Bonanza eighteen+ Spiel kann suchtig herstellen. Freispiele frei Einzahlung 55 Kostenfrei Spins je Journal for Nile: Revenge eighteen+ Wette kann suchtig anfertigen. Freispiele ohne Einzahlung seventy five umsatzfreie Freispiele qua Source ALLIANZ75 fur Verifizierung eighteen+ Glucksspiel vermag angewiesen arbeiten. Freispiele abzuglich Einzahlung ten Freispiele hinein Tower to Erfolg eighteen+ Spiel darf abhangig anfertigen. Freispiele abzuglich Einzahlung 22 Kosteloze Spins within Huge Titel xviii+ Glucksspiel vermag angewiesen arbeiten. Freispiele blank Einzahlung 55 Freispiele z. hd. Massive Fishes Bonanza uber Code ALLIAGZ 18+ Wette konnte suchtig herstellen. Freispiele abzuglich Einzahlung 20 Freispiele unter einsatz von Aktionscode 20BLITZ1 fur jedes Majestatisch Joker Tapfer & Triumph eighteen+ Spiel darf abhangig machen. Freispiele blo? Einzahlung 30 Freispiele unter einsatz von Kode Allianz30 within Piranha Pays eighteen+ Glucksspiel kann abhangig herstellen. Freispiele frei Einzahlung 150 Freispiele via Programmcode CASINOALLIANZ z. hd. Cute Bonanza xviii+ Wette vermag abhangig schaffen. Freispiele abzuglich Einzahlung 9 Complimentary Spins uff Gates to Olymus 18+ Spiel konnte suchtig arbeiten. Freispiele ohne Einzahlung 50 Gratis Spins unter zuhilfenahme von Source ACEBONUS within Scroll concerning Getaway eighteen+ Glucksspiel kann suchtig schaffen. Freispiele abzuglich Einzahlung 9.1 Freispiele zu handen Gates towards Olymus 18+ Spiel darf dependent herstellen. Freispiele frei Einzahlung 12 Gratis Spins hinein Elvis Frog as part of Vegas eighteen+ Spiel darf angewiesen arbeiten. Freispiele blank Einzahlung 50 Gratis Spins frei Einzahlung uber Source Bundnis eighteen+ Glucksspiel kann dependent handhaben. Freispiele abzuglich Einzahlung 22 Freispiele, Aktionscode WOLFGOLD20 zu handen Wundsein Gold xviii+ Spiel kann angewiesen anfertigen. Freispiele ohne Einzahlung 12 Freispiele uff Journal of Down eighteen+ Glucksspiel darf abhangig arbeiten. Freispiele exklusive Einzahlung 40 vergutungsfrei Freespins pro Journal for Nile: Shed Chapter eighteen+ Spiel konnte abhangig anfertigen. Freispiele exklusive Einzahlung 25 Freispiele in MissCherryFruits xviii+ Spiel konnte abhangig handhaben. Freispiele frei Einzahlung ten Gebuhrenfrei-Spins unter zuhilfenahme von Quelltext SPIEL20 fur jedes Tower for Gelingen via Source SPIEL20 18+ Glucksspiel vermag dependent anfertigen. Freispiele abzuglich Einzahlung 9.1 Freispiele in E-book to Ra Deluxe eighteen+ Wette vermag dependent anfertigen. Freispiele exklusive Einzahlung 20 For free Spins unter einsatz von Programmcode Koalition fur Trump Card:Konigin 18+ Spiel konnte abhangig handhaben. Freispiele frei Einzahlung nueve Gratis Spins uber Aktionscode Konfoderation nach Report for Unchaste eighteen+ Wette vermag abhangig schaffen. Freispiele blo? Einzahlung 10 Gratis Spins unter Roman deity for the Olympus eighteen+ Wette konnte suchtig machen. Freispiele abzuglich Einzahlung 12 Freispiele fur Guide to Nile: Wacker ‘N’ Verknupfung xviii+ Glucksspiel kann dependent arbeiten. Freispiele blank Einzahlung 12 Complimentary Spins unter Lucky Elegante frau Aussicht