Comment supprimer les images inutilisées de votre bibliothèque multimédia dans WordPress
Publié: 2019-10-15Lorsque votre site Web fonctionne depuis un certain temps, il est normal qu'il y ait des choses qui ne sont plus nécessaires mais qui existent toujours. L'un des exemples les plus ennuyeux est celui des images qui ne sont plus utilisées mais qui continuent de prendre de la place dans votre WordPress.
Ces images que vous n'utilisez plus dans vos publications ou pages, ou dans tout autre type de contenu devenu obsolète, restent hébergées sur votre serveur, gaspillant des ressources et de l'espace de stockage. La meilleure chose que vous puissiez faire avec eux est de les éliminer si vous n'allez pas les utiliser à nouveau. Mais comment pouvez-vous les trouver et vous assurer qu'ils ne sont utilisés nulle part ? Voyons ça…
Avant de commencer
La première chose à faire si vous souhaitez supprimer les images de votre WordPress qui ne sont plus utilisées est de faire une copie de sauvegarde de votre site Web, y compris les fichiers multimédias dans le dossier wp-content .
Bien que les images que vous téléchargez dans la médiathèque soient stockées dans wp-content/uploads/ , il est possible que si vous utilisez un plugin pour télécharger les fichiers, ils se retrouvent dans un dossier différent. Par conséquent, assurez-vous d'avoir une copie de sauvegarde de votre base de données WordPress et de tous les fichiers dans le dossier wp-content et pas seulement wp-content/uploads .
Une fois que vous avez créé la sauvegarde, nous pouvons continuer avec les étapes suivantes…
Détecter les images orphelines dans WordPress
Il existe plusieurs façons de détecter les images qui ne sont plus utilisées dans aucun contenu de votre site Web WordPress. Le plus efficace est de les rechercher dans la base de données WordPress.
Pour cela, nous devons savoir que les images que vous avez téléchargées dans la médiathèque WordPress sont stockées dans la table wp_posts comme s'il s'agissait d'un article ou d'une page. Ce qui les distingue des autres contenus stockés dans cette table, c'est qu'ils ont la valeur de pièce jointe dans la colonne post_type .
Au fait, remarque importante : si vous n'avez pas de connaissances sur les bases de données, il est préférable de faire attention à ce que vous faites à partir de maintenant, de conserver une sauvegarde de la base de données et de consulter cet article du Codex WordPress où ils expliquent tout dans plus de détails.
Où étions nous? Oh oui : nous voulons trouver toutes ces images qui ne sont pas utilisées dans votre WordPress. C'est plus facile à définir qu'à faire, mais ne vous inquiétez pas, nous allons essayer de l'expliquer étape par étape et de manière simple.
Tout ce que nous avons à faire est d'écrire une requête en langage SQL à exécuter dans la base de données WordPress MySQL. Si vous ne savez pas comment accéder à la base de données de votre site Web, contactez votre hébergeur pour savoir comment procéder. S'ils vous donnent accès à un phpMyAdmin, c'est aussi OK
La requête que vous devez exécuter est :
Décomposons-le.
La première chose que nous faisons est de commencer par une SELECT pour sélectionner toutes certaines lignes d'une table spécifique. À la ligne 2, l'étoile signifie que nous voulons "toutes les colonnes" dans chaque ligne.
Les lignes 3 et 4 indiquent la ou les tables qui nous intéressent. Dans ce cas, nous voulons sélectionner les pièces jointes WordPress qui, comme je l'ai dit, sont stockées dans wp_posts , c'est donc la table que nous utiliserons.
À partir de la ligne 5, l'instruction WHERE nous permet d'ajouter des conditions pour filtrer les lignes souhaitées et exclure le reste. Chaque condition entre les lignes 6 et 14 est séparée par l'instruction AND , qui sert à indiquer que toutes les conditions doivent être remplies en même temps. Si une ligne ne remplit pas toutes les conditions WHERE , elle ne sera pas renvoyée dans la sortie de la requête SELECT .
La première condition de la ligne 6 définit que nous voulons obtenir uniquement les lignes dont la valeur dans la colonne post_type est attachment . Comme je l'ai déjà dit, les publications et les pages sont également stockées dans la table wp_posts , entre autres contenus. Avec cette condition, nous n'obtiendrons que les images.
Pour chaque pièce jointe , WordPress stocke si elle a été téléchargée dans le contexte d'une page ou d'un article en utilisant la colonne post_parent . Par conséquent, la condition de la ligne 8 nous oblige à obtenir uniquement les pièces jointes dont post_parent n'existe pas (c'est-à-dire qu'elles ne sont liées à aucune page ou publication).

D'autre part, si nous choisissons une image comme image vedette d'un article ou d'une page, WordPress crée une ligne de métadonnées dans la table wp_postmeta avec la clé _thumbnail_id et, en tant que valeur, il définit l'identifiant de l'image de pièce jointe . À la ligne 10 de la requête, nous obtenons les images dont l'identifiant n'apparaît pas comme la valeur d'une ligne de wp_postmeta pour la clé _thumbnail_id .
La ligne 12 définit une condition pour filtrer les images dont l'URL n'apparaît pas dans le contenu des publications ou des pages. Autrement dit, si l'URL de l'image apparaît dans le contenu, nous supposons que l'image est toujours utile et ne doit donc pas être supprimée. Notez que l'URL de l'image apparaît dans la colonne guid de la table wp_posts .
Enfin, il est possible que vous ayez utilisé un plugin qui place l'URL des images dans les lignes de la table wp_postmeta . L'état de la ligne 14 nous permet de détecter ce cas particulier.
Et c'est tout! L'exécution de cette requête SQL renverra toutes les images qui ne sont prétendument utilisées nulle part sur votre site.
Gardez à l'esprit que lors de la recherche d'images orphelines, il peut y avoir des faux positifs. C'est-à-dire des images qui sont signalées comme inutilisées mais qui sont en fait utilisées dans WordPress. En effet, vous pouvez utiliser des plugins qui définissent leurs propres tables et y conservent des références à vos images. Si tel est votre cas, vous devez adapter la requête en ajoutant des conditions supplémentaires pour couvrir ces cas.
Supprimer les images orphelines dans WordPress
Maintenant que nous avons les images qui ne sont potentiellement pas utilisées dans WordPress, nous devrions jeter un œil aux résultats et voir si toutes les images que nous avons répertoriées sont utilisées ou non. En fonction de ce que nous trouvons, nous pouvons affiner la requête en ajoutant plus de conditions comme nous l'avons dit précédemment. Si tout semble correct, vous pouvez passer à autre chose.
Pour supprimer une pièce jointe dans WordPress, nous avons la fonction wp_delete_attachment que vous pouvez trouver décrite ici. Si vous regardez la documentation, vous verrez que cette fonction obtient l'identifiant de la pièce jointe et un paramètre booléen indiquant si vous souhaitez forcer la suppression ou simplement la supprimer.
Lorsque vous appelez cette fonction dans WordPress, elle supprime la pièce jointe et toutes ses informations associées, y compris les éventuels commentaires, l'apparition dans les taxonomies, les métadonnées associées et, surtout, les fichiers image stockés dans le dossier wp-content .
Pour obtenir la liste des instructions wp_delete_attachment que nous utiliserons en PHP, il suffit de changer la ligne 2 de la requête précédente pour que ce que la requête SELECT renvoie soit la chaîne de caractères qui construit l'instruction que nous voulons. Un pour chaque ligne renvoyée par la requête. Vous pouvez voir les résultats ici :

Il ne vous reste plus qu'à copier toutes ces instructions et les coller, par exemple, dans le fichier functions.php de votre thème et visiter votre site web. Cela entraînera l'exécution de ces instructions, supprimant les images orphelines de votre WordPress. Après cela, supprimez les instructions collées précédentes car elles ne seront plus nécessaires.
N'oubliez pas de vérifier que votre site Web fonctionne toujours parfaitement et que vous n'avez pas supprimé les images pertinentes. Si quelque chose ne va pas, ne vous inquiétez pas : vous devriez avoir une sauvegarde de votre base de données et de votre dossier wp-content , vous devriez donc pouvoir restaurer votre site Web à son état précédent.
Si vous avez des problèmes avec SQL et la base de données, ou si vous n'avez rien compris à ce que j'ai expliqué ici, faites-le moi savoir en écrivant un commentaire ci-dessous. Après cela, essayez d'utiliser un plugin comme Media Cleaner. Le résultat final que vous obtiendrez doit être très similaire à ce que nous avons vu dans ce post.
Image sélectionnée par Gary Chan sur Unsplash .
