{"id":3603,"date":"2026-03-28T07:01:41","date_gmt":"2026-03-28T06:01:41","guid":{"rendered":"https:\/\/isla-stud.io\/?p=3603"},"modified":"2026-03-28T07:01:43","modified_gmt":"2026-03-28T06:01:43","slug":"wordpress-7-ai-client-developer","status":"publish","type":"post","link":"https:\/\/isla-stud.io\/fr\/allgemein\/wordpress-7-ai-client-developer\/","title":{"rendered":"Le client AI de WordPress 7.0 du point de vue du d\u00e9veloppeur"},"content":{"rendered":"<p>WordPress 7.0 apporte un client AI int\u00e9gr\u00e9. Pas en tant que plugin, pas en tant que fonctionnalit\u00e9 exp\u00e9rimentale, mais en tant que partie du core. C'est une d\u00e9claration.<\/p>\n\n\n\n<p>Je d\u00e9veloppe des plugins WordPress depuis 2009 et j'ai travaill\u00e9 avec <a href=\"https:\/\/citelayer.ai\" target=\"_blank\" rel=\"noopener\">citelayer\u00ae<\/a> construit moi-m\u00eame un plug-in AI directement concern\u00e9 par cette d\u00e9cision architecturale. Voici mon analyse technique : que peut faire l'API, quels sont ses points forts et que doivent savoir les d\u00e9veloppeurs de plug-ins ?<\/p>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Table des mati\u00e8res<\/h2><nav><ol><li><a href=\"#der-entry-point-wp-ai-client-prompt\">Le point d'entr\u00e9e : wp_ai_client_prompt()<\/a><\/li><li><a href=\"#mehr-als-text-bild-sprache-video\">Plus que du texte : Image, voix, vid\u00e9o<\/a><\/li><li><a href=\"#feature-detection-keine-annahmen-treffen\">Feature Detection : ne pas faire de suppositions<\/a><\/li><li><a href=\"#model-preferences-statt-requirements\">Pr\u00e9f\u00e9rences de mod\u00e8le au lieu d'exigences<\/a><\/li><li><a href=\"#strukturierte-antworten-mit-json-schema\">R\u00e9ponses structur\u00e9es avec le sch\u00e9ma JSON<\/a><\/li><li><a href=\"#die-zwei-schichten-architektur\">L'architecture \u00e0 deux niveaux<\/a><\/li><li><a href=\"#granulare-kontrolle-der-filter\">Contr\u00f4le granulaire : le filtre<\/a><\/li><li><a href=\"#starken-und-schwachen\">Points forts et points faibles<\/a><\/li><li><a href=\"#was-das-fur-bestehende-plugins-bedeutet\">Ce que cela signifie pour les plugins existants<\/a><\/li><li><a href=\"#fazit\">Pas un gadget mais une infrastructure<\/a><\/li><\/ol><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"der-entry-point-wp-ai-client-prompt\">Le point d'entr\u00e9e : <code>wp_ai_client_prompt()<\/code><\/h2>\n\n\n\n<p>Tout commence par une seule fonction :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">$builder = wp_ai_client_prompt() ;<\/code><\/pre>\n\n\n\n<p>Cela donne un <code>WP_AI_Client_Prompt_Builder<\/code>-un constructeur fluide par lequel l'invite, la configuration et la m\u00e9thode de g\u00e9n\u00e9ration sont encha\u00een\u00e9es. Le principe de base : le d\u00e9veloppeur d\u00e9crit, <strong>ce que<\/strong> il a besoin. WordPress s'occupe de <strong>comme<\/strong>.<\/p>\n\n\n\n<p>Un exemple simple de g\u00e9n\u00e9ration de texte :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\/\/ Prompt directement en param\u00e8tre - pratique pour les cas simples\n$text = wp_ai_client_prompt( 'R\u00e9sumez les avantages de la mise en cache dans WordPress.' )\n    -&gt;using_temperature( 0.7 )\n    -&gt;generate_text() ;\n\n\/\/ Gestion des erreurs comme partout dans WordPress : v\u00e9rifier WP_Error\nif ( is_wp_error( $text ) ) {\n    return ;\n}\n\necho wp_kses_post( $text ) ;<\/code><\/pre>\n\n\n\n<p>Le texte de l'invite peut \u00eatre envoy\u00e9 en tant que param\u00e8tre ou via <code>with_text()<\/code> ce qui est utile lorsque le prompt est assembl\u00e9 de mani\u00e8re dynamique.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"mehr-als-text-bild-sprache-video\">Plus que du texte : Image, voix, vid\u00e9o<\/h2>\n\n\n\n<p>L'API est multimodale. La g\u00e9n\u00e9ration d'images fonctionne selon le m\u00eame mod\u00e8le :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">use WordPress\\AiClient\\Files\\DTO\\File ;\n\n$image = wp_ai_client_prompt( &#039;Un logo WordPress futuriste dans un style n&eacute;on&#039; )\n    -&amp;gt;generate_image() ;\n\nif ( is_wp_error( $image ) ) {\n    return ;\n}\n\n\/\/ File DTO avec Data URI - directement utilisable\necho &#039;&lt;img src=&quot;&#039; . esc_url( $image-&gt;getDataUri() ) . &#039;&quot; data-no-translation=&quot;&quot; data-no-auto-translation=&quot;&quot;&gt;&#039;;<\/code><\/pre>\n\n\n\n<p>Pour les variations, il y a <code>generate_images( 4 )<\/code> et <code>generate_texts( 4 )<\/code>. A cela s'ajoutent <code>convert_text_to_speech_result()<\/code>, <code>generate_speech_result()<\/code> et <code>generate_video_result()<\/code>. WordPress couvre ainsi toutes les modalit\u00e9s courantes.<\/p>\n\n\n\n<p>Particuli\u00e8rement int\u00e9ressant : une sortie multimodale dans une seule demande :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">use WordPress\\AiClient\\Messages\\Enums\\ModalityEnum ;\n\n\/\/ Texte et images dans une r\u00e9ponse - le r\u00e9sultat contient les deux\n$result = wp_ai_client_prompt( 'Cr\u00e9ez une recette avec des photos pour chaque \u00e9tape.' )\n    -&gt;as_output_modalities( ModalityEnum::text(), ModalityEnum::image() )\n    -&gt;generate_result() ;<\/code><\/pre>\n\n\n\n<p>Cela ouvre la porte \u00e0 des plugins qui g\u00e9n\u00e8rent des contenus qui vont au-del\u00e0 du simple texte.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"feature-detection-keine-annahmen-treffen\">Feature Detection : ne pas faire de suppositions<\/h2>\n\n\n\n<p>Toutes les installations WordPress n'ont pas forc\u00e9ment un fournisseur d'IA configur\u00e9. Et tous les fournisseurs ne supportent pas toutes les modalit\u00e9s. L'API propose des contr\u00f4les d\u00e9terministes :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">$builder = wp_ai_client_prompt( 'test' )\n    -&gt;using_temperature( 0.7 ) ;\n\n\/\/ Pas d'appel \u00e0 l'API - v\u00e9rification purement logique par rapport aux fournisseurs disponibles\nif ( $builder-&gt;is_supported_for_text_generation() ) ) {\n    \/\/ Afficher l'IU pour la g\u00e9n\u00e9ration de texte\n}\n\nif ( $builder-&gt;is_supported_for_image_generation() ) ) {\n    \/\/ Afficher le bouton de g\u00e9n\u00e9ration d'image.\n}<\/code><\/pre>\n\n\n\n<p>La solution est propre. Les contr\u00f4les ne co\u00fbtent rien - pas d'appels \u00e0 l'API, pas de latence. Les d\u00e9veloppeurs de plug-ins peuvent charger leur IU de mani\u00e8re conditionnelle et afficher une indication utile lorsqu'aucune IA n'est disponible. La r\u00e8gle : <strong>Ne jamais supposer que les fonctions AI fonctionnent simplement parce que WordPress 7.0 est install\u00e9.<\/strong><\/p>\n\n\n\n<p>Ch\u00e8ques disponibles : <code>is_supported_for_text_generation()<\/code>, <code>is_supported_for_image_generation()<\/code>, <code>is_supported_for_text_to_speech_conversion()<\/code>, <code>is_supported_for_speech_generation()<\/code>, <code>is_supported_for_video_generation()<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"model-preferences-statt-requirements\">Pr\u00e9f\u00e9rences de mod\u00e8le au lieu d'exigences<\/h2>\n\n\n\n<p>La philosophie du design appara\u00eet ici clairement :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">$result = wp_ai_client_prompt( 'Expliquez l'histoire de l'imprimerie.' )\n    -&gt;using_temperature( 0.1 )\n    -&gt;using_model_preference(\n        'claude-sonnet-4-6',\n        'gemini-3.1-pro-preview',\n        'gpt-5.4'\n    )\n    -&gt;generate_text_result() ;<\/code><\/pre>\n\n\n\n<p><code>using_model_preference()<\/code> est une <strong>Pr\u00e9f\u00e9rence<\/strong>, pas d'exigence. Le client AI prend le premier mod\u00e8le disponible dans la liste - ou n'importe quel mod\u00e8le compatible si aucun n'est configur\u00e9. Le code du plugin fonctionne toujours, quel que soit le fournisseur d'acc\u00e8s.<\/p>\n\n\n\n<p>C'est la bonne d\u00e9cision. Les d\u00e9veloppeurs de plug-ins ne devraient jamais d\u00e9pendre de la disponibilit\u00e9 d'un mod\u00e8le particulier. La recommandation officielle : triez vos mod\u00e8les de mani\u00e8re \u00e0 ce que les plus r\u00e9cents soient plac\u00e9s avant les plus anciens. Les trois plug-ins fournisseurs officiels pour le lancement font d\u00e9j\u00e0 cela.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"strukturierte-antworten-mit-json-schema\">R\u00e9ponses structur\u00e9es avec le sch\u00e9ma JSON<\/h2>\n\n\n\n<p>Pour les plugins qui ont besoin de donn\u00e9es structur\u00e9es - et il y en a beaucoup - c'est un point fort :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">$schema = array(\n    'type' =&gt; 'array',\n    'items' =&gt; array(\n        'type' =&gt; 'objet',\n        'properties' =&gt; array(\n            'plugin_name' =&gt; array( 'type' =&gt; 'string' ),\n            'category' =&gt; array( 'type' =&gt; 'string' ),\n        ),\n        'required' =&gt; array( 'plugin_name', 'category' ),\n    ),\n) ;\n\n$json = wp_ai_client_prompt( 'Liste 5 plugins WordPress populaires avec cat\u00e9gorie.' )\n    -&gt;as_json_response( $schema )\n    -&gt;generate_text() ;\n\n\/\/ Donn\u00e9es structur\u00e9es directement sous forme de tableau - pas de parsage manuel n\u00e9cessaire\n$data = json_decode( $json, true ) ;<\/code><\/pre>\n\n\n\n<p>Cela vaut de l'or pour les plug-ins SEO, les plug-ins de forme et les outils d'analyse de contenu. Au lieu d'analyser un texte non structur\u00e9, on obtient directement des donn\u00e9es utilisables.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"die-zwei-schichten-architektur\">L'architecture \u00e0 deux niveaux<\/h2>\n\n\n\n<p>Sous le capot, le client AI se compose de deux niveaux :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Client PHP AI<\/strong> (<code>wordpress\/php-ai-client<\/code>) - un SDK PHP agnostique pour les fournisseurs, int\u00e9gr\u00e9 \u00e0 Core en tant que biblioth\u00e8que externe. M\u00e9thodes CamelCase, exceptions, techniquement ind\u00e9pendant de WordPress.<\/li>\n\n\n\n<li><strong>Enveloppeur WordPress<\/strong> \u2014 <code>WP_AI_Client_Prompt_Builder<\/code> d\u00e9veloppe le SDK dans les conventions WordPress : m\u00e9thodes snake_case, <code>WP_Error<\/code> au lieu d'exceptions, l'int\u00e9gration avec WordPress HTTP Transport, l'API Abilities, l'infrastructure Connectors et le syst\u00e8me Hook.<\/li>\n<\/ol>\n\n\n\n<p>C'est une s\u00e9paration \u00e9l\u00e9gante. Le PHP SDK peut th\u00e9oriquement \u00eatre utilis\u00e9 en dehors de WordPress. Le wrapper WordPress le rend idiomatique. Et le <code>GenerativeAiResult<\/code>-est s\u00e9rialisable et peut \u00eatre envoy\u00e9 directement \u00e0 l'objet <code>rest_ensure_response()<\/code> int\u00e9gration REST-API out of the box :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">function my_rest_callback( WP_REST_Request $request ) {\n    $result = wp_ai_client_prompt( $request-&gt;get_param( 'prompt' ) )\n        -&gt;generate_text_result();\n\n    \/\/ WP_Error oder GenerativeAiResult \u2014 beides funktioniert\n    return rest_ensure_response( $result );\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"granulare-kontrolle-der-filter\">Contr\u00f4le granulaire : le filtre<\/h2>\n\n\n\n<p>Pour la s\u00e9curit\u00e9 et la conformit\u00e9, il y a <code>wp_ai_client_prevent_prompt<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">add_filter(\n    'wp_ai_client_prevent_prompt',\n    function ( bool $prevent, WP_AI_Client_Prompt_Builder $builder ) : bool {\n        \/\/ Exemple : AI uniquement pour les admins\n        if ( ! current_user_can( 'manage_options' ) ) {\n            return true ;\n        }\n        return $prevent ;\n    },\n    10,\n    2\n) ;<\/code><\/pre>\n\n\n\n<p>Si une invite est bloqu\u00e9e : pas d'appel API, <code>is_supported_*()<\/code> donne <code>false<\/code> en arri\u00e8re, <code>generate_*()<\/code> fournit <code>WP_Error<\/code>. Propre, pr\u00e9visible, pas de conditions de course.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"starken-und-schwachen\">Points forts et points faibles<\/h2>\n\n\n\n<p><strong>Ce qui est bien r\u00e9solu :<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>L'abstraction des fournisseurs. Les d\u00e9veloppeurs de plug-ins n'ont jamais \u00e0 se pr\u00e9occuper des cl\u00e9s API, des limites de taux ou des sp\u00e9cificit\u00e9s des fournisseurs d'acc\u00e8s.<\/li>\n\n\n\n<li>D\u00e9tection de fonctionnalit\u00e9s sans appels \u00e0 l'API. Pas besoin de deviner si quelque chose fonctionne.<\/li>\n\n\n\n<li>Les conventions WordPress. <code>WP_Error<\/code>, hooks, compatibilit\u00e9 REST - cela donne l'impression d'\u00eatre natif.<\/li>\n\n\n\n<li>Support du sch\u00e9ma JSON. Les r\u00e9ponses structur\u00e9es b\u00e9n\u00e9ficient d'un soutien de premier ordre.<\/li>\n\n\n\n<li>L'architecture \u00e0 deux niveaux. Une s\u00e9paration nette entre le SDK et l'int\u00e9gration de WordPress.<\/li>\n<\/ul>\n\n\n\n<p><strong>Ce que j'observe de mani\u00e8re critique<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La configuration du connecteur est du ressort du propri\u00e9taire du site. Les plugins n'ont aucune influence sur ce point, <strong>si<\/strong> un fournisseur d'acc\u00e8s est configur\u00e9. Feature Detection intercepte cela, mais le d\u00e9fi UX demeure.<\/li>\n\n\n\n<li>Le paysage des mod\u00e8les \u00e9volue rapidement. L'avenir nous dira dans quelle mesure la liste des pr\u00e9f\u00e9rences vieillit lorsque de nouveaux mod\u00e8les apparaissent tous les trois mois.<\/li>\n\n\n\n<li>Les implications en termes de performance ne sont pas encore claires. Comment le syst\u00e8me se comporte-t-il en charge lorsque 10 plugins envoient des messages d'invite en m\u00eame temps ?<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"was-das-fur-bestehende-plugins-bedeutet\">Ce que cela signifie pour les plugins existants<\/h2>\n\n\n\n<p>Chaque plugin qui apporte aujourd'hui ses propres int\u00e9grations AI est confront\u00e9 \u00e0 une d\u00e9cision : conserver sa propre connexion API ou migrer vers le client AI ?<\/p>\n\n\n\n<p>Pour <strong>Plugins SEO<\/strong> la r\u00e9ponse est claire - les donn\u00e9es structur\u00e9es, l'analyse de contenu, la g\u00e9n\u00e9ration de m\u00e9ta-descriptions se font beaucoup plus proprement via le client AI. Pour <strong>Plugins de formulaire<\/strong> s'ouvre la validation intelligente des champs et l'auto-remplissage. Pour <strong>Plugins de commerce \u00e9lectronique<\/strong> les descriptions de produits g\u00e9n\u00e9r\u00e9es par l'IA deviennent soudain triviales.<\/p>\n\n\n\n<p>Pour un plugin comme <a href=\"https:\/\/wordpress.org\/plugins\/citelayer\/\" target=\"_blank\" rel=\"noreferrer noopener\">citelayer\u00ae - Visibilit\u00e9 AI pour WordPress<\/a>, Le client AI est une extension naturelle de Citeitelayer, qui travaille \u00e0 l'interface entre WordPress et les syst\u00e8mes d'intelligence artificielle. Citelayer rend le contenu lisible pour l'IA - gr\u00e2ce \u00e0 llms.txt, l'injection de sch\u00e9mas, le suivi des bots et les protocoles comme UCP et WebMCP. Le client AI pourrait compl\u00e9ter ces couches d'analyse par des \u00e9valuations plus intelligentes, bas\u00e9es sur l'AI. J'ai expliqu\u00e9 ce que cela signifie concr\u00e8tement pour la visibilit\u00e9 AI. <a href=\"https:\/\/citelayer.ai\/blog\/wordpress-7-ai-client\" target=\"_blank\" rel=\"noopener\">sur le blog de Citelayer.<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"fazit\">Pas un gadget mais une infrastructure<\/h2>\n\n\n\n<p>Le client WordPress 7.0 AI n'est pas un gadget. C'est une infrastructure. Bien pens\u00e9, idiomatique \u00e0 WordPress, et avec une philosophie de conception claire : le d\u00e9veloppeur d\u00e9crit l'intention, le syst\u00e8me s'occupe de l'ex\u00e9cution.<\/p>\n\n\n\n<p>Quiconque d\u00e9veloppe aujourd'hui des plug-ins WordPress devrait se familiariser avec cette API. Non pas parce qu'il le faut - mais parce qu'elle est la base sur laquelle la prochaine g\u00e9n\u00e9ration de plugins WordPress sera construite.<\/p>\n\n\n\n<p>La documentation compl\u00e8te de l'API est disponible sur le site <a href=\"https:\/\/make.wordpress.org\/core\/2026\/03\/24\/introducing-the-ai-client-in-wordpress-7-0\/\" target=\"_blank\" rel=\"noopener\">WordPress Make Blog<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Le client AI de WordPress 7.0 dans le Developer Deep-Dive : architecture API, exemples de code, d\u00e9tection de fonctionnalit\u00e9s et ce que cela signifie pour les plugins existants. Par une d\u00e9veloppeuse de plugins qui est l\u00e0 depuis 2009.<\/p>","protected":false},"author":1,"featured_media":3606,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_et_pb_use_builder":"off","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[1,754],"tags":[],"dipi_cpt_category":[],"class_list":["post-3603","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-allgemein","category-ki-b2b"],"acf":[],"_links":{"self":[{"href":"https:\/\/isla-stud.io\/fr\/wp-json\/wp\/v2\/posts\/3603","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/isla-stud.io\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/isla-stud.io\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/isla-stud.io\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/isla-stud.io\/fr\/wp-json\/wp\/v2\/comments?post=3603"}],"version-history":[{"count":2,"href":"https:\/\/isla-stud.io\/fr\/wp-json\/wp\/v2\/posts\/3603\/revisions"}],"predecessor-version":[{"id":3607,"href":"https:\/\/isla-stud.io\/fr\/wp-json\/wp\/v2\/posts\/3603\/revisions\/3607"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/isla-stud.io\/fr\/wp-json\/wp\/v2\/media\/3606"}],"wp:attachment":[{"href":"https:\/\/isla-stud.io\/fr\/wp-json\/wp\/v2\/media?parent=3603"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/isla-stud.io\/fr\/wp-json\/wp\/v2\/categories?post=3603"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/isla-stud.io\/fr\/wp-json\/wp\/v2\/tags?post=3603"},{"taxonomy":"dipi_cpt_category","embeddable":true,"href":"https:\/\/isla-stud.io\/fr\/wp-json\/wp\/v2\/dipi_cpt_category?post=3603"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}