> ## Documentation Index
> Fetch the complete documentation index at: https://help.semji.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Intégration WordPress : connectez votre CMS pour publier depuis Semji

> Connectez WordPress pour publier depuis Semji sans copier-coller. Vous décidez de ce que les agents peuvent lire, créer ou modifier

## En un coup d'œil

* **Ce que vous pouvez faire** : donner aux agents Semji un accès contrôlé à votre contenu WordPress : articles, pages et types de contenu personnalisés, avec taxonomies, champs ACF, titres SEO et méta descriptions (Yoast SEO, Rank Math ou SEOPress).
* **Pour qui** : propriétaires de l'espace de travail et administrateurs WordPress.
* **Compatibilité** : à partir de WordPress 5.6.

## Prérequis

* WordPress 5.6 ou plus récent. Les mots de passe d'application, qui servent à la connexion, existent depuis cette version.
* Un site en ligne, public et en HTTPS. Un site local ou sur réseau interne ne peut pas être connecté.
* L'API REST de WordPress accessible. Elle est active par défaut, mais un plugin de sécurité peut l'avoir désactivée.
* Un compte WordPress autorisé à gérer les articles, rôle Auteur au minimum. Choisissez le rôle Éditeur si les agents doivent pouvoir modifier les articles rédigés par d'autres.
* Si un pare-feu, un WAF ou une protection anti-bot (Cloudflare, Akamai, Sucuri, …) se trouve devant votre site, il doit autoriser les adresses IP de Semji. Voir [Pare-feu, Cloudflare et autorisation d'IP](#pare-feu-cloudflare-et-autorisation-dip).
* Vous êtes propriétaire du workspace dans Semji. La connexion est partagée avec tout le workspace.

<Note>
  La disponibilité de l'intégration WordPress dépend de votre offre Semji. Si le bouton Connecter ouvre une fenêtre de mise à niveau au lieu du formulaire de connexion, contactez votre responsable de compte.
</Note>

## Comment connecter votre site WordPress

<Steps>
  <Step title="Créer un mot de passe d'application dans WordPress">
    Un mot de passe d'application est un mot de passe dédié que WordPress génère pour un service extérieur, ici Semji. Il n'est lié qu'à cette connexion et vous pouvez le révoquer à tout moment, sans toucher au mot de passe habituel du compte.

    Dans l'administration WordPress, ouvrez le compte que Semji utilisera, via Comptes → Profil (Users → Profile) ou Comptes → Tous les comptes (Users → All Users). Descendez jusqu'à la section Mots de passe d'application (Application Passwords), saisissez un nom comme Semji, puis cliquez sur Ajouter un nouveau mot de passe d'application (Add New Application Password).

    WordPress affiche ce mot de passe une seule fois, sous la forme `xxxx xxxx xxxx xxxx xxxx xxxx`. Copiez-le tout de suite. Vous pourrez le coller dans Semji avec ou sans les espaces.

    <Info>
      La section Mots de passe d'application n'apparaît pas ? C'est que votre site n'est pas en HTTPS, tourne sur une version antérieure à WordPress 5.6, ou qu'un plugin de sécurité a désactivé la fonctionnalité.
    </Info>
  </Step>

  <Step title="Connecter depuis Semji">
    Vous devez être propriétaire du workspace, car la connexion vaut pour toute l'équipe. Dans Semji, ouvrez Paramètres → Intégrations, allez dans l'onglet CMS et cliquez sur Connecter sur la ligne WordPress.

    <video autoPlay muted loop playsInline src="https://mintcdn.com/semji/ZF6m599EYafA5y4i/images/help-center/connect-your-tools/cms-publisher/03-integration-cms.mp4?fit=max&auto=format&n=ZF6m599EYafA5y4i&q=85&s=3ca13af0ab70156f9f1c51bdb3f87228" title="Intégration CMS" data-path="images/help-center/connect-your-tools/cms-publisher/03-integration-cms.mp4" />

    Remplissez les trois champs :

    * **URL du site** : l'adresse exacte de votre site en HTTPS, par exemple `https://votre-site.com`. Entrez l'adresse réellement utilisée par votre site : s'il bascule de exemple.com vers [www.exemple.com](http://www.exemple.com), saisissez la version [www](http://www). Semji ne suit pas les redirections.
    * **E-mail ou nom d'utilisateur** : l'identifiant WordPress ou l'adresse e-mail du compte auquel appartient le mot de passe d'application. WordPress accepte les deux : il cherche d'abord le nom d'utilisateur, puis l'adresse e-mail.
    * **Mot de passe d'application** : celui généré à l'étape précédente.

          <img src="https://mintcdn.com/semji/ql0fCIIUu6X2284g/images/help-center/connect-your-tools/integration-wordpress/04-connecter-wordpress.jpg?fit=max&auto=format&n=ql0fCIIUu6X2284g&q=85&s=9fa3108cccdecd0fe237b81e87691291" alt="connecter wordpress" width="670" height="391" data-path="images/help-center/connect-your-tools/integration-wordpress/04-connecter-wordpress.jpg" />

    Cliquez sur Suivant. Semji teste la connexion en direct en appelant `GET /wp-json/wp/v2/users/me` sur votre site avec ces identifiants, et détecte quel plugin SEO votre site utilise.
  </Step>

  <Step title="Choisir les outils WordPress">
    Décidez ce que les agents IA peuvent faire sur votre site. Les six outils sont activés par défaut : Créer des articles, Lire des articles, Lister les types de contenu, Lister les articles, Lister les termes de taxonomie et Mettre à jour les articles. Vous pourrez modifier cette sélection à tout moment.

    Mettre à jour les articles couvre aussi le titre SEO et la méta description, qui peuvent demander une configuration préalable sur votre site WordPress selon votre plugin SEO. Voir [Activer la mise à jour du titre SEO et de la méta description](#activer-la-mise-à-jour-du-titre-seo-et-de-la-méta-description). Et si vos types de contenu utilisent des champs ACF, exposez-les à l'API REST pour que les agents puissent les lire et les remplir. Voir [Exposer les champs ACF à Semji](#exposer-les-champs-acf-à-semji).

    <img src="https://mintcdn.com/semji/ql0fCIIUu6X2284g/images/help-center/connect-your-tools/integration-wordpress/05-outils-wordpress.jpg?fit=max&auto=format&n=ql0fCIIUu6X2284g&q=85&s=2e4cb9e2353ceb90055fc70123034107" alt="outils wordpress" width="670" height="392" data-path="images/help-center/connect-your-tools/integration-wordpress/05-outils-wordpress.jpg" />
  </Step>

  <Step title="Enregistrer">
    Cliquez sur Enregistrer. La ligne WordPress s'affiche désormais comme connectée.

    <img src="https://mintcdn.com/semji/ql0fCIIUu6X2284g/images/help-center/connect-your-tools/integration-wordpress/03-wordpress-connected.jpg?fit=max&auto=format&n=ql0fCIIUu6X2284g&q=85&s=3584a99803664ad61be28208571af8f1" alt="wordpress connected" width="670" height="118" data-path="images/help-center/connect-your-tools/integration-wordpress/03-wordpress-connected.jpg" />
  </Step>
</Steps>

## Ce que Semji peut faire une fois connecté

| Outil | Ce qu'il fait |
| - | - |
| Lister les types de contenu | Découvrir les types de contenu du site (articles et pages natifs, plus les types personnalisés comme FAQ ou actualités) avec les taxonomies rattachées à chacun, pour que les agents publient au bon endroit |
| Lister les articles | Rechercher et lister les articles de n'importe quel type de contenu, avec des filtres par statut et de la pagination |
| Lire des articles | Récupérer le contenu complet d'un article : source brute de l'éditeur, titre SEO et méta description, termes de taxonomie, et champs ACF quand le site les expose |
| Créer des articles | Créer de nouveaux articles sur n'importe quel type de contenu, toujours en brouillon sauf si vous demandez explicitement à un agent de publier, avec catégories, étiquettes, termes de taxonomies personnalisées et champs ACF |
| Mettre à jour les articles | Modifier uniquement les champs que vous changez : titre, contenu, statut, slug, image mise en avant, catégories, étiquettes, termes de taxonomies personnalisées, champs ACF, titre SEO et méta description. Les champs SEO passent par votre plugin SEO et peuvent demander une [configuration préalable](#activer-la-mise-à-jour-du-titre-seo-et-de-la-méta-description) |
| Lister les termes de taxonomie | Rechercher et lister les termes de n'importe quelle taxonomie (catégories avec leur hiérarchie, étiquettes, ou taxonomies personnalisées comme auteurs ou thématiques), pour que les agents retrouvent l'ID d'un terme avant de classer un article |

## Plugins SEO pris en charge

Semji détecte automatiquement votre plugin SEO. Il n'y a aucun fournisseur à choisir. La détection lit les espaces de noms annoncés par l'index de votre API REST (`/wp-json/`), et se rabat sur l'inspection des champs SEO exposés sur vos articles quand un plugin de sécurité filtre l'index. Le titre SEO et la méta description sont ensuite lus et écrits via les champs propres au plugin détecté :

| Plugin SEO | Champ du titre SEO | Champ de la méta description |
| - | - | - |
| Yoast SEO | `_yoast_wpseo_title` | `_yoast_wpseo_metadesc` |
| Rank Math | `rank_math_title` | `rank_math_description` |
| SEOPress | `_seopress_titles_title` | `_seopress_titles_desc` |

<Note>
  **All in One SEO n'est pas pris en charge.** Il stocke ses métadonnées dans une table personnalisée de la base de données plutôt que dans des champs d'article standards, donc elles ne peuvent pas être modifiées via l'API REST de WordPress. Sur les sites AIOSEO, les mises à jour SEO renvoient un avertissement explicite, tandis que le reste de la mise à jour de l'article s'applique. Tout le reste de l'intégration fonctionne normalement.
</Note>

<Warning>
  Si plusieurs plugins SEO sont actifs en même temps (typiquement pendant une migration), Semji retient le premier pris en charge dans cet ordre : Yoast SEO, puis Rank Math, puis SEOPress. Désactivez le plugin que vous n'utilisez plus pour que les mises à jour ciblent celui qui génère réellement vos pages.
</Warning>

## Activer la mise à jour du titre SEO et de la méta description

Une configuration préalable est nécessaire ou non selon votre plugin SEO et sa version :

* **Yoast SEO 28.1 et plus récent** : rien à faire. Les versions récentes de Yoast exposent nativement leurs champs de titre SEO et de méta description à l'API REST, et Semji peut les mettre à jour tout de suite.
* **Yoast SEO plus ancien, Rank Math et SEOPress** : ils stockent le titre SEO et la méta description dans des champs personnalisés protégés, sur lesquels l'API REST n'accepte pas l'écriture par défaut. Un court extrait de code PHP doit d'abord déclarer ces champs auprès de l'API REST.

Il y a deux façons équivalentes d'installer cet extrait : entièrement depuis l'administration WordPress avec un plugin d'extraits de code (aucun accès au serveur nécessaire), ou sous forme de fichier de plugin must-use déposé sur le serveur. Choisissez-en une. Le même extrait couvre les trois plugins SEO pris en charge et tous les types de contenu publics (articles, pages et types personnalisés), il continue donc de fonctionner si vous changez de plugin SEO ou ajoutez des types de contenu plus tard.

Les écritures restent protégées par les permissions WordPress : seuls les utilisateurs autorisés à modifier des articles (la capacité `edit_posts`) peuvent modifier ces champs. C'est le même niveau de permission que pour modifier l'article lui-même.

<Tabs>
  <Tab title="Depuis l'administration WordPress">
    Utilisez un plugin d'extraits de code comme [Code Snippets](https://wordpress.org/plugins/code-snippets/). Il stocke le code dans la base de données et l'exécute à chaque chargement, sans rien toucher au système de fichiers du serveur.

    <Steps>
      <Step title="Installer le plugin">
        Dans l'administration WordPress, allez dans Extensions → Ajouter (Plugins → Add New Plugin), cherchez Code Snippets, puis installez et activez le plugin.
      </Step>

      <Step title="Créer l'extrait">
        Dans le nouveau menu Snippets, cliquez sur Add New, donnez à l'extrait un nom comme `Semji SEO fields REST support`, et collez le code ci-dessous. Il commence sans la ligne d'ouverture `<?php`, car Code Snippets l'ajoute lui-même.

        ```php theme={null}
        /**
         * Plugin Name: Semji SEO fields REST support
         * Description: Registers the SEO title and meta description fields of
         * the active SEO plugin (Yoast SEO, Rank Math, or SEOPress) with the
         * WordPress REST API so they can be read and updated by authorized
         * applications, on every public post type. Writing requires the
         * edit_posts capability.
         */

        add_action('init', function () {
            // Each pair of fields is registered only while its plugin is active,
            // so an inactive plugin's fields are never exposed by mistake.
            $seo_meta_keys_by_plugin_constant = [
                'WPSEO_VERSION'      => ['_yoast_wpseo_title', '_yoast_wpseo_metadesc'],
                'RANK_MATH_VERSION'  => ['rank_math_title', 'rank_math_description'],
                'SEOPRESS_VERSION'   => ['_seopress_titles_title', '_seopress_titles_desc'],
            ];

            foreach ($seo_meta_keys_by_plugin_constant as $plugin_constant => $seo_meta_keys) {
                if (!defined($plugin_constant)) {
                    continue;
                }

                foreach (get_post_types(['public' => true], 'names') as $post_type) {
                    foreach ($seo_meta_keys as $meta_key) {
                        register_post_meta($post_type, $meta_key, [
                            'type'          => 'string',
                            'single'        => true,
                            'show_in_rest'  => true,
                            'auth_callback' => static function () {
                                return current_user_can('edit_posts');
                            },
                        ]);
                    }
                }
            }
        }, 20);
        ```

        L'extrait détecte lequel des trois plugins est actif et ne déclare que les champs de celui-ci, il continue donc de fonctionner si vous changez de plugin SEO plus tard.
      </Step>

      <Step title="Exécuter partout et activer">
        Gardez la portée sur Run snippet everywhere. Les requêtes de l'API REST doivent aussi le charger, ne le limitez donc pas à l'administration. Puis cliquez sur Save Changes and Activate.
      </Step>
    </Steps>

    Désactiver l'extrait retire la capacité.
  </Tab>

  <Tab title="Sur le serveur">
    Un plugin must-use est un simple fichier PHP déposé dans `wp-content/mu-plugins/`. WordPress charge automatiquement les plugins must-use : il n'y a rien à activer, et supprimer le fichier retire la capacité.

    <Steps>
      <Step title="Créer le fichier du plugin">
        Sur votre serveur, créez le dossier `wp-content/mu-plugins/` s'il n'existe pas encore, puis créez-y un fichier nommé `semji-seo-fields.php`.
      </Step>

      <Step title="Coller le code du plugin">
        ```php semji-seo-fields.php theme={null}
        <?php
        /**
         * Plugin Name: Semji SEO fields REST support
         * Description: Registers the SEO title and meta description fields of
         * the active SEO plugin (Yoast SEO, Rank Math, or SEOPress) with the
         * WordPress REST API so they can be read and updated by authorized
         * applications, on every public post type. Writing requires the
         * edit_posts capability.
         */

        add_action('init', function () {
            // Each pair of fields is registered only while its plugin is active,
            // so an inactive plugin's fields are never exposed by mistake.
            $seo_meta_keys_by_plugin_constant = [
                'WPSEO_VERSION'      => ['_yoast_wpseo_title', '_yoast_wpseo_metadesc'],
                'RANK_MATH_VERSION'  => ['rank_math_title', 'rank_math_description'],
                'SEOPRESS_VERSION'   => ['_seopress_titles_title', '_seopress_titles_desc'],
            ];

            foreach ($seo_meta_keys_by_plugin_constant as $plugin_constant => $seo_meta_keys) {
                if (!defined($plugin_constant)) {
                    continue;
                }

                foreach (get_post_types(['public' => true], 'names') as $post_type) {
                    foreach ($seo_meta_keys as $meta_key) {
                        register_post_meta($post_type, $meta_key, [
                            'type'          => 'string',
                            'single'        => true,
                            'show_in_rest'  => true,
                            'auth_callback' => static function () {
                                return current_user_can('edit_posts');
                            },
                        ]);
                    }
                }
            }
        }, 20);
        ```
      </Step>
    </Steps>
  </Tab>
</Tabs>

### Vérifier que les champs sont exposés

Quelle que soit l'option choisie, appelez votre API REST avec les mêmes identifiants que Semji, sur n'importe quel ID d'article, en regardant le champ de méta description de votre plugin (ici Rank Math, remplacez-le par le champ du [tableau ci-dessus](#plugins-seo-pris-en-charge) pour Yoast SEO ou SEOPress) :

```bash theme={null}
curl -s -u 'USERNAME:APP_PASSWORD' \
  'https://votre-site.com/wp-json/wp/v2/posts/123' | jq '.meta.rank_math_description'
```

Une chaîne, même vide (`""`), signifie que le champ est exposé et que Semji peut le mettre à jour. `null` signifie que le code ne s'exécute pas encore.

<Note>
  Sans cette configuration préalable, la partie SEO d'un appel Mettre à jour les articles est ignorée. Le reste de la mise à jour de l'article s'applique quand même, et l'agent reçoit un avertissement explicite qui nomme votre plugin SEO et le champ manquant. Les agents vous diront que le champ n'est pas exposé plutôt que de prétendre que la mise à jour a réussi. Tout le reste de l'intégration fonctionne normalement.
</Note>

## Exposer les champs ACF à Semji

Beaucoup de sites WordPress structurent leur contenu avec [Advanced Custom Fields](https://www.advancedcustomfields.com/) (ACF), par exemple un type de contenu FAQ dont la question et la réponse vivent dans des champs dédiés plutôt que dans le corps de l'article. Les agents Semji gèrent ces champs nativement : Lire des articles renvoie les valeurs ACF d'un article, et Créer des articles et Mettre à jour les articles les remplissent.

Cela ne fonctionne que pour les champs visibles via l'API REST, et **ACF n'expose pas les groupes de champs par défaut**. En sortie de boîte, la clé `acf` est absente des réponses REST de votre site : les agents ne voient donc pas les champs, encore moins les remplir, et vous le diront lors d'une publication.

Contrairement aux champs SEO ci-dessus, aucun extrait PHP n'est nécessaire : ACF (gratuit et Pro, version 5.11 ou plus récente) intègre nativement la prise en charge de l'API REST derrière un seul réglage. Le fork Secure Custom Fields propose le même réglage.

### Activer « Show in REST API » sur le groupe de champs

Le réglage se trouve sur le groupe de champs, pas sur chaque champ individuel :

<Steps>
  <Step title="Ouvrir le groupe de champs">
    Dans l'administration WordPress, allez dans ACF → Field Groups et ouvrez le groupe rattaché à votre type de contenu (par exemple FAQ).
  </Step>

  <Step title="Activer Show in REST API">
    Dans le panneau Settings du groupe de champs, activez Show in REST API, puis enregistrez le groupe.
  </Step>

  <Step title="Répéter pour chaque groupe de champs">
    Faites de même pour chaque groupe de champs que les agents doivent pouvoir lire et remplir.
  </Step>
</Steps>

<Note>
  Pour un type de contenu personnalisé, le type lui-même doit aussi être visible dans l'API REST, sinon les agents ne peuvent même pas le lister. S'il a été créé via l'interface Post Types d'ACF, activez Show in REST API dans les Advanced settings du type. S'il est déclaré dans le code, passez `'show_in_rest' => true` à `register_post_type()`.
</Note>

### Vérifier que les champs ACF sont exposés

Appelez votre API REST avec les mêmes identifiants que Semji, sur n'importe quel élément existant. Remplacez `faq` par la base REST de votre type de contenu (`posts` pour les articles natifs) :

```bash theme={null}
curl -s -u 'USERNAME:APP_PASSWORD' \
  'https://votre-site.com/wp-json/wp/v2/faq/123' | jq '.acf'
```

Un objet listant vos champs, même avec des valeurs vides, signifie qu'ils sont exposés et que les agents peuvent les lire et les remplir. `null` signifie que le groupe de champs n'est pas encore exposé.

### Aider les agents à bien remplir les champs

L'API REST ne transporte que les noms et les valeurs des champs. Les libellés et les instructions que vous voyez dans l'administration WordPress restent invisibles pour les agents. Les agents découvrent les champs d'un type en lisant un élément existant, quelques habitudes rendent donc les remplissages fiables :

* **Utilisez des noms de champs descriptifs.** Un agent comprend `answer_short`, il ne peut que deviner ce que contient `field_2`.
* **Gardez au moins un élément bien rempli** pour chaque type de contenu. Les agents le lisent pour savoir quel champ contient quoi, et la forme de valeur attendue (texte brut ou HTML, ID de média pour un champ image, …).
* **Briefez l'agent.** Quand les noms de champs sont ambigus, dites dans vos instructions à quoi sert chaque champ, et l'agent y placera son contenu en conséquence.

## Gérer ou déconnecter

Depuis Paramètres → Intégrations → CMS, la ligne WordPress propose :

* **Gérer les outils** : activer ou désactiver chacun des six outils.
* **Déconnecter** : retirer l'intégration pour tout le workspace.

## Pare-feu, Cloudflare et autorisation d'IP

Semji appelle directement l'API REST de votre site. Si un pare-feu ou une protection type Cloudflare se trouve devant votre WordPress, il doit laisser passer ces appels, sinon la connexion échoue.

Semji's servers reach the internet through a fixed set of outbound IP addresses. If a firewall, WAF, or anti-bot protection (Cloudflare, Akamai, Sucuri, …) sits in front of your site, it can block Semji's requests — typically with a `403 Forbidden` — before they ever reach your CMS, even when your credentials are correct.

Allow the following Semji IP addresses:

```text theme={null}
63.34.75.122
63.35.78.179
54.228.104.165
18.200.156.37
34.248.117.83
52.213.28.177
```

Sur Cloudflare, créez une règle personnalisée WAF avec l'action Skip, qui cible les requêtes dont l'IP source fait partie des adresses ci-dessus et dont le chemin commence par `/wp-json/`.

<Warning>
  Un blocage par le pare-feu ressemble à une erreur d'identifiants. Quand une protection répond « 403 Forbidden » sur `/wp-json/`, Semji affiche une erreur d'identifiants invalides même si votre nom d'utilisateur et votre mot de passe sont corrects. Si vous êtes sûr de vos identifiants, vérifiez d'abord le pare-feu.
</Warning>

## Dépannage

<AccordionGroup>
  <Accordion title="Identifiants WordPress invalides. Vérifiez l'e-mail ou le nom d'utilisateur et le mot de passe d'application.">
    Votre site a répondu `401` ou `403`. Les causes possibles : l'identifiant (e-mail ou nom d'utilisateur) ou le mot de passe d'application est erroné ou a été révoqué, les mots de passe d'application sont désactivés sur le site, ou un pare-feu (Cloudflare, Wordfence) bloque Semji avant même qu'il n'atteigne WordPress. Voir la section pare-feu.
  </Accordion>

  <Accordion title="Impossible de se connecter au site WordPress. Vérifiez les identifiants et l'URL du site.">
    Semji n'a pas réussi à joindre votre site. Les causes les plus fréquentes :

    * L'adresse redirige. Semji ne suit pas les redirections, entrez donc l'adresse finale, par exemple la version www ou la version https.
    * L'API REST n'est pas accessible : `/wp-json/` renvoie une erreur 404, souvent à cause d'un plugin ou d'un réglage de permaliens.
    * Le site est injoignable : problème de DNS, hébergeur indisponible, ou site non public.
    * Le site répond trop lentement : la réponse doit arriver en moins de 10 secondes.
  </Accordion>

  <Accordion title="Erreurs affichées avant même de valider le formulaire">
    * « Veuillez saisir une URL valide. » : le texte saisi n'est pas une adresse web.
    * « L'URL du site doit commencer par https\://. » : les sites en HTTP ne peuvent pas être connectés.
    * « L'URL du site pointe vers une adresse privée ou réservée, ce qui n'est pas autorisé. » : les sites locaux ou internes sont refusés, le site doit être public.
  </Accordion>

  <Accordion title="Un agent signale une erreur après une connexion qui marchait">
    * « L'authentification WordPress a échoué. Vérifiez les identifiants dans les paramètres de l'intégration. » : le mot de passe d'application a été révoqué ou changé depuis la connexion. Reconnectez-vous avec un mot de passe neuf.
    * « Aucune intégration WordPress configurée pour ce workspace. » : l'intégration a été déconnectée. Un propriétaire de workspace doit la reconnecter.
    * « L'article a été mis à jour, mais ses métadonnées SEO NE l'ont PAS été : aucun plugin SEO pris en charge (Yoast SEO, Rank Math ou SEOPress) n'a été détecté… » : Semji n'a trouvé aucun des trois sur le site. Activez l'un d'eux, ou si l'un est déjà actif, appliquez la [configuration préalable](#activer-la-mise-à-jour-du-titre-seo-et-de-la-méta-description) pour que ses champs soient visibles via l'API REST.
    * « Les métadonnées SEO n'ont PAS été enregistrées : ce site WordPress utilise … mais n'expose pas ses champs … en écriture via l'API REST… » : le site n'accepte pas encore les écritures REST sur les champs de votre plugin SEO. Appliquez la configuration préalable décrite dans [Activer la mise à jour du titre SEO et de la méta description](#activer-la-mise-à-jour-du-titre-seo-et-de-la-méta-description). Le reste de la mise à jour de l'article a bien été appliqué.
  </Accordion>

  <Accordion title="Un agent dit qu'il ne peut pas voir ou remplir les champs ACF d'un type de contenu">
    Le groupe de champs n'est pas exposé à l'API REST : la clé `acf` est donc absente des réponses REST de votre site et les agents ne peuvent ni lire ni écrire ces champs. Activez Show in REST API sur le groupe de champs. Voir [Exposer les champs ACF à Semji](#exposer-les-champs-acf-à-semji). Si le type de contenu lui-même n'apparaît pas quand l'agent liste les types, il doit aussi être visible dans l'API REST (même section).
  </Accordion>
</AccordionGroup>

## Articles liés

* [Connecter votre CMS : publiez vos contenus dans votre CMS sans quitter Semji](/fr/connect-your-tools/cms-publisher)
* [Synchroniser des brouillons vers votre CMS](/guides/sync-drafts-to-cms) : le flux de publication par API, si vous préférez piloter la synchronisation vous-même.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.