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

4

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 vous les supprimiez manuellement via la médiathèque.

Je recherche une solution WP-CLI, si cela est possible. Cette solution a été 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 supprimer en bloc des supports et des pièces jointes à l'aide de WP-CLI?

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

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

Je ne suis pas étranger à la ligne de commande ou à 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 s’insérerait dans le système et fonctionnerait à la manière "wordpress".

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

UPDATE: Utiliser "parent = 0" pour déterminer si une image était attachée ou non était une solution très intelligente, et je l’ai marquée comme la 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 retenue pour la réponse supprimera également ces éléments. De ce fait, je voudrais encourager d'autres solutions prenant également en compte cet élément.

Cela nécessiterait peut-être d’analyser 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?

    
posée user658182 07.04.2017 - 15:49

1 réponse

5

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 ex. image/jpeg try:

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 avant de tester!

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

réponse donnée birgire 07.04.2017 - 16:49

Lire d'autres questions sur les étiquettes