/** * 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' ) ), ); } } Stratégies stables : leçons de la théorie des jeux et du jeu Chicken Road Vegas – Chambers Of Vikramaditya

Stratégies stables : leçons de la théorie des jeux et du jeu Chicken Road Vegas

Dans un monde où la coopération façonne la résilience stratégique, comprendre les fondements coopératifs des équilibres stables devient crucial, particulièrement dans des jeux à risque comme Chicken Road Vegas. Ce jeu illustre comment les choix individuels peuvent compromettre la stabilité collective, mais aussi comment des accords collectifs peuvent transformer les trajectoires vers des résultats plus durables. Comme l’explique le fondement théorique, la stabilité émerge non pas d’une domination, mais d’un consensus équilibré où chaque joueur reconnaît la valeur du compromis.


1. Les fondements coopératifs des équilibres stables

La théorie des jeux classique met en lumière les tensions entre intérêt individuel et bien collectif, notamment à travers des modèles comme celui du « jeu du chaos » (Chicken Road Vegas), où chaque acteur cherche à éviter une défaite tout en poussant l’autre à reculer. Dans ce cadre, la stabilité n’est pas un état statique, mais un équilibre dynamique où les stratégies convergent vers une coexistence tolérée. Ce principe s’inscrit dans une logique coopérative : sans mécanismes permettant aux joueurs d’aligner leurs incitations, le risque de chute vers un résultat catastrophique — comme un abandon mutuel — devient inévitable.


2. De la dynamique du jeu Chicken Road Vegas aux mécanismes d’accord collectif

Le jeu Chicken Road Vegas met en scène une confrontation où la peur de la défaite pousse chaque joueur vers une escalade risquée. Pourtant, la stabilité collective ne naît pas de la soumission unilatérale, mais d’accords collectifs qui modifient les règles du jeu. Ces accords, souvent formalisés par des normes ou des conventions implicites, permettent de réduire l’incertitude stratégique. Par exemple, dans des projets collaboratifs français comme les coopératives agricoles ou les initiatives citoyennes en transition énergétique, des règles partagées guident les comportements et transforment la dynamique d’évitement en engagement mutuel.


3. Analyse des incitations mutuelles dans la construction de stabilité collective

La théorie des jeux coopératifs montre que la stabilité se construit lorsque les incitations individuelles convergent vers un intérêt commun. Dans Chicken Road Vegas, chaque joueur calcule un coût élevé à une confrontation directe, ce qui favorise la coopération comme stratégie dominante. En contexte français, cette logique se retrouve dans les fédérations professionnelles ou les syndicats, où la négociation collective transforme un jeu à somme nulle en un jeu à somme positive. Les accords collectifs, en fixant des seuils de tolérance ou des mécanismes de compensation, rendent la coopération plus avantageuse que la défection, renforçant ainsi la stabilité globale du système.


4. Comment les accords collectifs modifient les payoffs stratégiques dans des jeux à risque

Les accords collectifs réorganisent radicalement les payoffs stratégiques dans des jeux à risque. En Chicken Road Vegas, la peur de la défaite pousse à l’agression, mais un accord partagé — par exemple, une règle de rotation des responsabilités — modifie la matrice des gains pour intégrer la sécurité collective. En France, cette dynamique se traduit dans les contrats de transition écologique où les acteurs publics et privés s’engagent dans des trajectoires coordonnées. Ces engagements réduisent les risques perçus, augmentent la confiance et décalent les payoffs vers des résultats durables plutôt que des gains immédiats, souvent illusoires ou instables.


5. Le rôle des institutions et des normes partagées dans la réduction des dilemmes sociaux

Dans les sociétés francophones, les dilemmes sociaux — comme la gestion des ressources ou la transition écologique — sont fréquents, mais les institutions et normes partagées jouent un rôle clé dans leur résolution. Comme le montrent les travaux de la théorie des jeux coopératifs, des cadres institutionnels solides — légaux, culturels ou associatifs — fournissent les mécanismes d’application des accords collectifs. Par exemple, les conventions collectives françaises ou les chartes environnementales locales incarnent des normes reconnues qui réduisent les comportements opportunistes et renforcent la stabilité stratégique. Ces structures agissent comme des « catalyseurs » de coopération, transformant des interactions conflictuelles en processus constructifs.


6. Cas d’étude : stabilité opérationnelle dans les projets collaboratifs français inspirés du jeu

Un exemple concret est le projet collaboratif « ÉcoVillage du Nord », une initiative regroupant agriculteurs, artisans et collectivités locales. Face à des enjeux de transition énergétique, les acteurs ont adopté des accords collectifs définissant des objectifs communs, des calendriers partagés et des mécanismes de récompense. Ces engagements ont transformé un jeu à haut risque d’échec mutuel en une dynamique coopérative où chaque effort individuel renforce la stabilité du groupe. Les données internes montrent une hausse de 40 % de la participation et une réduction des conflits internes depuis la mise en œuvre des accords. Ce cas illustre comment les principes du Chicken Road Vegas, enrichis par des mécanismes collectifs, permettent d’atteindre des résultats durables.


7. Vers une nouvelle dimension de la résilience stratégique : intégration des accords collectifs

La résilience stratégique ne se mesure plus seulement à la capacité d’endurer un choc, mais à la capacité d’anticiper et d’intégrer des accords collectifs qui en renforcent la stabilité à long terme. Dans le contexte français actuel, où les crises multiples exigent une coordination accrue — sanitaire, écologique, sociale — cette intégration devient incontournable. Les jeux comme Chicken Road Vegas enseignent que la coopération n’est pas une faiblesse, mais une force stratégique. En France, les réseaux d’entreprises, les associations citoyennes et les plateformes territoriales adoptent de plus en plus des mécanismes d’accord collectif pour transformer la tension en coopération.


8. Retour au cœur du thème : la coopération comme moteur durable de stabilité dans Chicken Road Vegas

Dans le jeu Chicken Road Vegas, la stabilité véritable n’émerge pas d’une victoire éclatante, mais d’un équilibre coopératif durable où chaque joueur accepte de reculer plutôt que de s’exposer à la défaite. Les accords collectifs agissent comme des leviers essentiels pour transformer ce jeu de tension en un processus constructif. Enracinés dans des normes partagées et renforcés par des mécanismes de confiance, ces accords modifient les payoffs, alignent les incitations et réduisent les dilemmes sociaux — principes clés étudiés dans la théorie des jeux coopératifs. Comme le démontrent les initiatives collaboratives en France, la coopération n’est pas seulement un idéal : c’est une stratégie éprouvée pour construire une résilience collective face à l’incertitude.


Table des matières Contenu
Stratégies stables : leçons de la théorie des jeux et du jeu Chicken Road Vegas
1. Les fondements coopératifs des équilibres stables

Leave a Comment

Your email address will not be published. Required fields are marked *