WordPress : wp_insert_post enfreint les règles de réécriture

Publié par Jean-Michel le

J’utilise wp_insert_postpour ajouter par programme du contenu à un site. Cela fonctionne bien avec les articles, les catégories et les balises, mais pas avec les pages.

Lorsque j’essaie d’ajouter une page (c’est-à-dire une publication avec post_type=page), les règles de réécriture ne sont pas correctement régénérées (ou quelque chose leur arrive après wp_insert_post). Plus précisément, les règles liées aux URL de catégories et de balises sont perdues, comme indiqué ci-dessous :

[category/(.+?)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?category_name=$matches[1]&feed=$matches[2]
[category/(.+?)/(feed|rdf|rss|rss2|atom)/?$] => index.php?category_name=$matches[1]&feed=$matches[2]
[category/(.+?)/page/?([0-9]{1,})/?$] => index.php?category_name=$matches[1]&paged=$matches[2]
[category/(.+?)/?$] => index.php?category_name=$matches[1]
[tag/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?tag=$matches[1]&feed=$matches[2]
[tag/([^/]+)/(feed|rdf|rss|rss2|atom)/?$] => index.php?tag=$matches[1]&feed=$matches[2]

…etc

Lire également:  Remplacer le contenu de la page Wordpress après GET depuis la page php

Cela signifie que les URL des archives de balises et de catégories sont cassées. Il suffit de cliquer sur Paramètres> Permaliens pour les réparer. J’ai essayé de réparer en utilisant $wp_rewrite->flush_rules()immédiatement après wp_insert_postmais cela n’a pas résolu le problème…

Solution n°1 trouvée

J’ai rencontré le même problème je pense. J’utilisais wp_insert_post dans un rappel ajax. Le champ post_name était en train d’être effacé. Je l’ai finalement retracé en appelant wp_publish_post peu de temps après. J’ai commenté la publication et défini post_status avant l’insertion et tout a mieux fonctionné.

Lire également:  Wordpress : Comment formater différemment la première ligne d'un article ?

Solution n°2 trouvée

Difficile de dire quel est votre problème sans voir plus de code, mais je parierais que votre problème sera résolu si vous ajoutez ceci après avoir inséré votre message :

do_action('save_post', $post_ID, $post);

WordPress utilise cette action pour vider le cache, réécrire les règles, etc. Assurez-vous d’utiliser les variables appropriées pour $post_ID et $post, bien sûr. Pour faire bonne mesure, vous devez également ajouter :

do_action('wp_insert_post', $post_ID, $post);

Ainsi, tous les plugins, thèmes, etc. qui utilisent ce crochet sauront faire ce qu’ils font.

Lire également:  Wordpress : Changer le logo d'en-tête pour différentes pages

Santé ~

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *