web-dev-qa-db-fra.com

Comment puis-je supprimer par lot toutes les images non attachées avec WP-CLI ou un autre processus automatisé?

Après avoir utilisé WPML Media, un plug-in qui crée des copies de chaque image pour chaque langue, nous disposons maintenant de presque 100 000 images en double que nous n'allons pas utiliser et dont nous devons nous débarrasser.

Nous devons non seulement les supprimer du système de fichiers lui-même, mais également veiller à ce que toutes les références de la base de données soient supprimées, comme cela se produirait normalement si on les supprimait manuellement via la médiathèque.

Je recherche une solution WP-CLI, si c'est possible. Cette solution était très utile, mais elle traite toutes les images, pas seulement celles qui ne sont pas attachées/non utilisées dans le système.

Comment puis-je supprimer en bloc des supports et des pièces jointes à l'aide de WP-CLI?

Étant donné une autre solution, le PO a indiqué dans les commentaires qu'il avait finalement réussi à obtenir sa solution avec SQL.

Comment supprimer des milliers d'images non attachées?

Je ne suis pas étranger à la ligne de commande ni à mysql, mais je ne connais pas suffisamment les tables WP pour créer une requête afin de préserver l'intégrité de la base de données. Si tel est le cas, proposez une solution purement liée à une base de données, ou un script PHP qui serait branché sur le système et utilisait la méthode "wordpress".

Je ne cherche pas une solution à base de plugin. J'ai essayé DNUI, DX Delete Attached Media et une vingtaine d'autres qui se sont tous mal terminés.

MISE À JOUR: Utiliser "parent = 0" pour déterminer si une image était attachée ou non était une solution très astucieuse, et je l'ai marquée comme réponse.

Il existe un moyen d'utiliser légitimement une image dans un message et le parent est toujours égal à 0; c'est à ce moment-là que vous visitez les détails de l'image dans la médiathèque et que vous copiez l'URL source de l'image complète à coller manuellement dans une publication. La solution de la réponse acceptée les supprimera également. Pour cette raison, je voudrais encourager d'autres solutions qui prendraient cela en considération.

Cela nécessiterait peut-être de scanner la base de données pour trouver des occurrences du nom de l'image, peut-être similaire à l'algorithme que wp-cli search-replace utiliserait?

4
user658182

Vous pouvez essayer cette modification (non testée) de la réponse à laquelle vous êtes lié par quelque chose

wp post delete $(wp post list --post_type='attachment' --format=ids --post_parent=0)

supprimer les pièces jointes sans parents .

Pour cibler un mime type donné, par exemple image/jpeg essayer:

wp post delete $(wp post list --post_type='attachment' \
    --format=ids --post_parent=0 --post_mime_type='image/jpeg')

Remarques:

  • N'oubliez pas de sauvegarder d'abord avant de tester!

  • Des images non attachées peuvent toujours être utilisées dans le contenu de la publication ou par exemple. dans les widgets.

5
birgire