web-dev-qa-db-fra.com

Comment éviter les doublons pour wp_insert_post?

J'ai une fonction qui crée une page lorsque je crée un article (afin de construire des arbres de relations parent-enfant).

J'utilise le titre $ de l'article pour créer la page, ce qui crée également un slug en double. Existe-t-il un moyen de modifier légèrement la limace pour la rendre unique? Comment puis-je assurer que la nouvelle limace n'interférera pas avec le message d'origine?

3
AlxVallejo

Si vous utilisez wp_insert_post, il devrait calculer un slug de publication unique pour vous. Si vous n'utilisez pas wp_insert_post, essayez d'utiliser wp_unique_post_slug . Si aucune de ces solutions ne fonctionne pour vous, vous pouvez simplement essayer d'ajouter -page ou au post_name (slug) de la nouvelle page avant de l'insérer.

WordPress vérifie l'unicité des publications postérieures au niveau de l'application - il ne semble pas qu'il existe un index unique sur wp_posts.post_name. Ainsi, par exemple, si vous êtes dans une transaction où vous créez deux articles simultanément, la vérification de l'unicité échouera. Il est également possible que vous créiez une sorte de situation de concurrence critique dans laquelle les deux postes sont insérés en même temps et que la vérification de l'unicité des deux limaces échouait.

1
chrisguitarguy

D'après mon expérience, l'exigence est généralement opposée - obtenir les mêmes limaces lorsque WP refuse obstinément de les générer. :)

En très peu de mots, slug risque de se chevaucher entre types de publication hiérarchiques et non hiérarchiques, mais pas séparément. Etant donné que dans votre cas post (non hiérarchique) et page (hiérarchique) sont impliqués, WP permet avec joie la réutilisation de slug.

Si vous voulez forcer manuellement WP à supprimer la duplication du slug de la page, votre meilleure option consiste probablement à forcer le contrôle de la duplication à échouer et à déclencher une logique de suffixe numérique. D'après la source wp_unique_post_slug() qui peut être effectuée via le filtre suivant:

apply_filters( 'wp_unique_post_slug_is_bad_hierarchical_slug', false, $slug, $post_type, $post_parent )
0
Rarst

Je suppose que WP ajoute automatiquement un numéro à la fin si le slug se répète.

0
Rutwick Gangurde