/** * 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' ) ), ); } } Post – Page 13 – Chambers Of Vikramaditya

Post

Zážitek z hraní posouvající hranice – Vincispin a nový rozměr online zábavy pro všechny hráče.

Zážitek z hraní posouvající hranice – Vincispin a nový rozměr online zábavy pro všechny hráče. Co je to Vincispin? Výhody Vincispin Bezpečnost a Regulace Vincispin Bonusy a Promoakce Vincispin a Budoucnost Online Kasin Zážitek z hraní posouvající hranice – Vincispin a nový rozměr online zábavy pro všechny hráče. Svět online kasin se neustále vyvíjí a […]

Zážitek z hraní posouvající hranice – Vincispin a nový rozměr online zábavy pro všechny hráče. Read More »

Zážitek z her kdykoliv a kdekoliv s Mostbet app – vaše brána do vzrušujícího online světa.

Zážitek z her kdykoliv a kdekoliv s Mostbet app – vaše brána do vzrušujícího online světa. Proč si vybrat Mostbet app? Typy her dostupných v Mostbet app Automatové hry Bezpečnost a spolehlivost Mostbet app Platební metody v Mostbet app Zákaznická podpora Mostbet app Zážitek z her kdykoliv a kdekoliv s Mostbet app – vaše brána

Zážitek z her kdykoliv a kdekoliv s Mostbet app – vaše brána do vzrušujícího online světa. Read More »

Zážitek z her kdykoliv a kdekoliv – jak mostbet cz aplikace mění pravidla hazardu.

Zážitek z her kdykoliv a kdekoliv – jak mostbet cz aplikace mění pravidla hazardu. Proč si vybrat Mostbet aplikaci? Široká nabídka her a sázek Sportovní sázky v aplikaci Mostbet Kasino hry v aplikaci Mostbet Bonusy a promoakce pro uživatele Mostbet Instalace a používání aplikace Mostbet Zabezpečení a podpora zákazníků Tipy pro zodpovědné hraní Zážitek z

Zážitek z her kdykoliv a kdekoliv – jak mostbet cz aplikace mění pravidla hazardu. Read More »

Coastal Casts & Cash Catches Experience the Thrill of Fishin Frenzy free play and a Potential 5,000x

Coastal Casts & Cash Catches: Experience the Thrill of Fishin Frenzy free play and a Potential 5,000x Stake Win. Understanding the Core Gameplay of Fishin’ Frenzy The Thrilling Free Spins Feature Maximizing Your Winnings During Free Spins RTP and Volatility: Understanding the Odds Game Statistics at a Glance Tips for Playing Fishin’ Frenzy Coastal Casts

Coastal Casts & Cash Catches Experience the Thrill of Fishin Frenzy free play and a Potential 5,000x Read More »

Przestań grać w stare gry savaspin casino online to nowa definicja rozrywki, gdzie szczęście spotyka

Przestań grać w stare gry: savaspin casino online to nowa definicja rozrywki, gdzie szczęście spotyka się z ekscytującymi możliwościami wygranej. Co sprawia, że savaspin casino online wyróżnia się na tle konkurencji? Jakie rodzaje gier oferuje savaspin casino online? Nowoczesne automaty do gry Bonusy i promocje w savaspin casino online Bezpieczeństwo i licencja – czy savaspin

Przestań grać w stare gry savaspin casino online to nowa definicja rozrywki, gdzie szczęście spotyka Read More »

Beyond the Bets Elevate Your Play at memo casino with a 97% Payout Rate._12

Beyond the Bets: Elevate Your Play at memo casino with a 97% Payout Rate. Understanding the 97% Payout Rate The Impact of RTP on Player Experience Game Selection at memo casino Slot Games: A World of Themes and Features Table Game Variety: Classics and Modern Twists Live Casino Experience: Immersive and Interactive Security and Fairness

Beyond the Bets Elevate Your Play at memo casino with a 97% Payout Rate._12 Read More »

Ascend & Win Mastering the Aviator Experience Through Effortless aviator game login and Strategic Ga

Ascend & Win: Mastering the Aviator Experience Through Effortless aviator game login and Strategic Gameplay. Understanding the Aviator Game Interface The Aviator Game Login: A Step-by-Step Guide Security Considerations During Login Troubleshooting Login Issues Developing a Winning Strategy in Aviator Understanding Risk and Reward The Role of Auto Cash Out Responsible Gaming and Aviator Ascend

Ascend & Win Mastering the Aviator Experience Through Effortless aviator game login and Strategic Ga Read More »

Elevate Your Gameplay Soar to New Heights with the Thrill of an aviator game apk and Instant Payouts

Elevate Your Gameplay: Soar to New Heights with the Thrill of an aviator game apk and Instant Payouts. Understanding the Core Mechanics of the Aviator Game The Rise of Mobile Gaming and the Aviator Game APK Strategies for Maximizing Your Winnings Understanding Risk Management in the Aviator Game The Future of the Aviator Game and

Elevate Your Gameplay Soar to New Heights with the Thrill of an aviator game apk and Instant Payouts Read More »

Coastal Casts & Epic Catches Spin for Fortune with the Fishin Frenzy free play – A 5-Reel Adventure

Coastal Casts & Epic Catches: Spin for Fortune with the Fishin Frenzy free play – A 5-Reel Adventure Boasting 96.12% RTP & 5,000x Jackpot Potential! Understanding the Core Gameplay of Fishin’ Frenzy The Alluring Free Spins Feature Volatility and RTP: Understanding Your Odds Maximizing Your Experience with Fishin’ Frenzy Tips for Triggering the Free Spins

Coastal Casts & Epic Catches Spin for Fortune with the Fishin Frenzy free play – A 5-Reel Adventure Read More »

Hook, Line, and a Jackpot Play the Fishin’ Frenzy Big Splash demo for a chance at 5000x your stake w

Hook, Line, and a Jackpot: Play the Fishin’ Frenzy Big Splash demo for a chance at 5000x your stake with exciting free spins and 96.12% RTP! Understanding the Core Gameplay of Fishin’ Frenzy Big Splash Unlocking the Free Spins Feature: A Deep Dive Maximizing Your Winning Potential Understanding the Symbols and Paylines Tips for Playing

Hook, Line, and a Jackpot Play the Fishin’ Frenzy Big Splash demo for a chance at 5000x your stake w Read More »