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

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é.

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.

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 *