/** * 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' ) ), ); } } Vivez l’Excitation de Neon54 Casino et Sportsbook : Votre Porte d’Entrée vers un Divertissement Sans Fin – Chambers Of Vikramaditya

Vivez l’Excitation de Neon54 Casino et Sportsbook : Votre Porte d’Entrée vers un Divertissement Sans Fin

Neon54 Casino et Sportsbook est une destination en ligne dynamique qui répond aux besoins divers des joueurs modernes, offrant une expérience inégalée avec sa vaste bibliothèque de jeux, son interface conviviale et sa communauté solidaire. En explorant les subtilités de Neon54, vous découvrirez pourquoi il se distingue parmi ses pairs dans l’industrie iGaming.

Le site possède une collection impressionnante de plus de 10 000 jeux provenant de plus de 110 fournisseurs de premier ordre, dont Pragmatic Play, Microgaming et Nolimit City. Avec une telle variété d’options, vous êtes sûr de trouver quelque chose qui correspond à votre goût et à votre style de jeu. Que vous soyez un amateur de slots ou un fan de jeux de table, Neon54 a tout ce qu’il faut.

Explorer les Jeux chez Neon54 : Un Monde de Possibilités

Une des caractéristiques remarquables de Neon54 est sa bibliothèque massive de jeux, qui inclut une large gamme de slots, jeux de table et options de casino en direct. Vous pouvez explorer le monde des slots avec des titres populaires comme 10,001 Wishes et Fire in the Hole, ou tenter votre chance avec des jeux de table classiques comme la roulette et le blackjack. La section casino en direct offre une expérience immersive avec de vrais croupiers et une interaction en temps réel.

De plus, la vaste sélection de jeux de Neon54 évolue constamment, avec de nouveaux titres ajoutés régulièrement. Cela signifie que vous aurez toujours quelque chose de nouveau à découvrir, que vous soyez un joueur expérimenté ou débutant.

Découvrir de Nouveaux Favoris chez Neon54

Avec autant de jeux disponibles, il peut être difficile de savoir par où commencer. Cependant, grâce à l’interface conviviale et à la navigation intuitive de Neon54, vous pouvez facilement parcourir les jeux et découvrir de nouveaux favoris en un rien de temps. Le site dispose également d’une barre de recherche et d’options de filtrage pour vous aider à trouver des jeux ou des catégories spécifiques qui vous intéressent.

Alors, qu’attendez-vous ? Plongez dans l’univers de Neon54 et explorez les possibilités infinies qui vous attendent !

Le Monde des Jackpots Progressifs chez Neon54

Les jackpots progressifs attirent de nombreux joueurs, offrant des sommes d’argent qui changent une vie et le frisson de potentiellement gagner gros. Chez Neon54, vous trouverez une large gamme de jeux de jackpots progressifs provenant de fournisseurs de premier plan comme Microgaming et Betsoft.

Des slots classiques comme Mega Moolah aux titres innovants comme Hall of Gods, la section jackpots progressifs de Neon54 regorge d’options excitantes. Vous pouvez jouer à ces jeux sur votre appareil mobile ou votre ordinateur, avec une navigation fluide et un gameplay sans interruption pour une expérience immersive.

Commencer avec les Jackpots Progressifs chez Neon54

Bien que les jackpots progressifs puissent sembler intimidants pour les nouveaux joueurs, l’interface conviviale de Neon54 facilite la prise en main. Vous pouvez explorer les différents jeux de jackpots progressifs, lire des avis et des évaluations d’autres joueurs, et même essayer des versions démo avant de miser en argent réel.

Alors, qu’attendez-vous ? Tentez votre chance avec les jackpots progressifs chez Neon54 et gagnez peut-être gros !

Maximiser votre Expérience chez Neon54 : Astuces et Conseils

Que vous soyez un joueur expérimenté ou débutant, maximiser votre expérience chez Neon54 nécessite une combinaison de stratégie, patience et pratique. Voici quelques astuces pour tirer le meilleur parti de vos sessions de jeu :

  • Fixez un budget : avant de commencer à jouer, définissez un budget et respectez-le. Cela vous aidera à éviter de dépenser trop et à profiter davantage de l’expérience.
  • Choisissez les bons jeux : sélectionnez des jeux qui correspondent à votre style de jeu et à votre budget. Si vous êtes novice en jackpots progressifs, commencez par des jeux à faibles enjeux et augmentez progressivement vos mises à mesure que vous vous sentez plus à l’aise.
  • Faites des pauses : ne vous laissez pas emporter par l’excitation du jeu – faites des pauses régulières pour reposer vos yeux, vous étirer et recharger votre énergie.
  • Restez hydraté : les sessions de jeu peuvent être longues et intenses, alors assurez-vous de boire beaucoup d’eau tout au long de la journée.
  • Rejoignez la communauté : connectez-vous avec d’autres joueurs via la fonctionnalité de chat en direct de Neon54 ou ses réseaux sociaux. Cela vous aidera à rester motivé, à apprendre de nouvelles stratégies et à partager des astuces avec d’autres gamers.

Commencer avec Neon54 : Guide étape par étape

Commencer avec Neon54 est simple – il suffit de suivre ces étapes :

  1. Visitez le site : rendez-vous sur neon54.com et créez un compte en cliquant sur le bouton “Join Now”.
  2. Choisissez votre langue : sélectionnez votre langue préférée dans le menu déroulant en haut à droite de la page.
  3. Déposez des fonds : approvisionnez votre compte avec l’une des nombreuses options de paiement disponibles, y compris cartes de crédit, portefeuilles électroniques et cryptomonnaies.
  4. Choisissez votre jeu : parcourez la bibliothèque de jeux et sélectionnez celui qui correspond à votre goût et à votre budget.
  5. Commencez à jouer : cliquez sur le bouton “Play” pour débuter votre session de jeu.

Conclusion : Préparez-vous à Vivre l’Excitation de Neon54 !

Obtenez 200 Free Spins !

Avec sa vaste bibliothèque de jeux, son interface conviviale et sa communauté solidaire, Neon54 Casino et Sportsbook est la destination ultime pour les joueurs recherchant une expérience en ligne complète. Que vous soyez un joueur expérimenté ou débutant, Neon54 a quelque chose à offrir à tous.

Alors, qu’attendez-vous ? Inscrivez-vous dès aujourd’hui et préparez-vous à vivre l’excitation de Neon54 !