WordPress : wp_insert_post enfreint les règles de réécriture
J’utilise wp_insert_post
pour 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_post
mais 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é ~
0 commentaire