web-dev-qa-db-fra.com

La suppression des enregistrements orphelins wp_postmeta est-elle sûre?

J'utilise woocommerce comme un panier sur un site wordpress. Les produits et les variantes de produit sont chacun stockés sous forme d'enregistrements dans la table wp_posts. Chacune de ces variations ont aprox. 15-20 enregistrements associés dans wp_postmeta (pour stocker divers détails sur ce produit, tels que le SKU ou le prix).

Ce que j'ai découvert, c'est que de nombreuses variantes (plus de 600 dans ce cas) n'ont pas de produit parent associé. Eh bien, ils le font, mais ce produit parent n'existe plus. J'ai trouvé ce qui suit pour supprimer ces variantes orphelines de wp_posts:

DELETE o FROM `wp_posts` o
LEFT OUTER JOIN `wp_posts` r
ON o.post_parent = r.ID
WHERE r.id IS null AND o.post_type = 'product_variation'

Je pense que cela fonctionnera bien à cette fin. Mais il resterait encore de nombreux enregistrements dans la table wp_postmeta.

Ma question est la suivante: puis-je supprimer tout enregistrement de wp_postmeta dont le post_id ne correspond pas à un enregistrement existant dans wp_posts. Je veux dire, je sais que je peux le faire, mais y at-il un écueil potentiel à retirer ces enregistrements orphelins de wp_postmeta. Autrement dit, si les méta-informations correspondent à une variante de produit inexistante. puis-je le supprimer en toute sécurité?

2
logicbird

Une manière différente de le faire (pas mieux, mais plus facile à suivre) serait:

DELETE * FROM wp_postmeta WHERE post_id NOT IN (SELECT ID FROM wp_posts)

Évidemment, changer les préfixes de 'wp_' en utilisant votre configuration

1
Jonathan Greaves