Cum să eliminați imaginile neutilizate din biblioteca dvs. media în WordPress
Publicat: 2019-10-15Când site-ul tău rulează de ceva vreme, este normal să existe lucruri care nu mai sunt necesare, dar încă există. Unul dintre cele mai enervante exemple este cel al imaginilor care nu mai sunt folosite, dar care continuă să ocupe spațiu în WordPress.
Aceste imagini pe care nu le mai folosești în postările sau paginile tale sau în orice alt tip de conținut care a devenit învechit, rămân găzduite pe serverul tău, irosind resurse și spațiu de stocare. Cel mai bun lucru pe care îl poți face cu ele este să le elimini dacă nu le vei mai folosi. Dar cum le poți găsi și să te asiguri că nu sunt folosite nicăieri? Să vedem…
Înainte de a începe
Primul lucru de făcut dacă doriți să ștergeți imaginile din WordPress care nu mai sunt utilizate este să faceți o copie de rezervă a site-ului dvs., inclusiv fișierele media din folderul wp-content .
Deși imaginile pe care le încărcați în biblioteca media sunt stocate în wp-content/uploads/ , este posibil ca dacă utilizați un plugin pentru a încărca fișierele, acestea să ajungă într-un folder diferit. Prin urmare, asigurați-vă că aveți o copie de rezervă a bazei de date WordPress și toate fișierele din folderul wp-content și nu doar wp-content/uploads .
După ce ați creat copia de rezervă, putem continua cu următorii pași...
Detectați imaginile orfane în WordPress
Există mai multe modalități de a detecta imagini care nu mai sunt utilizate în niciun conținut de pe site-ul dvs. WordPress. Cel mai eficient este să le căutați în baza de date WordPress.
Pentru aceasta trebuie să știm că imaginile pe care le-ați încărcat în biblioteca media WordPress sunt stocate în tabelul wp_posts ca și cum ar fi o postare sau o pagină. Ceea ce le deosebește de alte conținuturi stocate în acest tabel este faptul că au valoarea atașării în coloana post_type .
Apropo, notă importantă: dacă nu ai cunoștințe despre bazele de date, cel mai bine este să fii atent la ceea ce faci de acum înainte, să păstrezi o copie de rezervă a bazei de date și să verifici acest articol WordPress Codex unde explică totul în mai multe detalii.
Unde rămăsesem? Oh, da: vrem să găsim toate acele imagini care nu sunt folosite în WordPress. Acest lucru este mai ușor de definit decât de făcut, dar nu vă faceți griji, vom încerca să vă explicăm pas cu pas și într-un mod simplu.
Tot ce trebuie să facem este să scriem o interogare în limbaj SQL pentru a rula în baza de date WordPress MySQL. Dacă nu știți cum să accesați baza de date a site-ului dvs. web, contactați furnizorul dvs. de găzduire pentru instrucțiuni despre cum să faceți acest lucru. Dacă vă oferă acces la un phpMyAdmin, este și OK
Interogarea pe care trebuie să o rulați este:
Să-l descompunem.
Primul lucru pe care îl facem este să începem cu o SELECT pentru a selecta toate anumite rânduri ale unui anumit tabel. În rândul 2, steaua înseamnă că vrem „toate coloanele” în fiecare rând.
Rândurile 3 și 4 indică tabelele care ne interesează. În acest caz, dorim să selectăm atașamentele WordPress care, așa cum am spus, sunt stocate în wp_posts , așa că acesta este tabelul pe care îl vom folosi.
Începând cu linia 5, instrucțiunea WHERE ne permite să adăugăm condiții pentru a filtra rândurile pe care le dorim și a exclude restul. Fiecare condiție dintre liniile 6 și 14 este separată de instrucțiunea AND , care servește pentru a indica faptul că toate condițiile trebuie îndeplinite simultan. Dacă un rând nu îndeplinește toate condițiile WHERE , acesta nu va fi returnat în rezultatul interogării SELECT .
Prima condiție din linia 6 definește că vrem să obținem doar rândurile a căror valoare în coloana post_type este atașament . După cum am spus mai devreme, postările și paginile sunt stocate și în tabelul wp_posts , printre altele. Cu această condiție vom obține doar imaginile.
Pentru fiecare atașament , WordPress stochează dacă a fost încărcat în contextul unei pagini sau al unei postări folosind coloana post_parent . Prin urmare, condiția liniei 8 ne face să obținem doar acele atașamente ale căror post_parent nu există (adică nu sunt legate la nicio pagină sau postare).

Pe de altă parte, dacă alegem ca o imagine să fie imaginea prezentată a unei postări sau pagini, WordPress creează un rând de metadate în tabelul wp_postmeta cu cheia _thumbnail_id și, ca valoare, setează identificatorul imaginii atașate . În linia 10 a interogării obținem acele imagini al căror identificator nu apare ca valoare a unui rând de wp_postmeta pentru cheia _thumbnail_id .
Linia 12 definește o condiție de filtrare a imaginilor a căror adresă URL nu apare în conținutul postărilor sau paginilor. Adică, dacă adresa URL a imaginii apare în conținut, presupunem că imaginea este încă utilă și, prin urmare, nu trebuie ștearsă. Rețineți că adresa URL a imaginii apare în coloana wp_posts guid
În cele din urmă, este posibil să fi folosit un plugin care plasează adresa URL a imaginilor în rândurile tabelului wp_postmeta . Starea liniei 14 ne permite să detectăm acest caz particular.
Si asta e! Rularea acestei interogări SQL va returna toate imaginile despre care se presupune că nu sunt folosite nicăieri pe site-ul dvs.
Rețineți că atunci când căutați imagini orfane, pot exista rezultate false pozitive. Adică imagini care sunt semnalate ca neutilizate, dar sunt de fapt folosite în WordPress. Acest lucru se datorează faptului că puteți utiliza pluginuri care își definesc propriile tabele și păstrează acolo referințe la imaginile dvs. Dacă acesta este cazul dvs., trebuie să adaptați interogarea adăugând condiții suplimentare pentru a acoperi aceste cazuri.
Eliminați imaginile orfane din WordPress
Acum că avem imaginile care potențial nu sunt folosite în WordPress, ar trebui să ne uităm la rezultate și să vedem dacă toate imaginile pe care le-am enumerat sunt folosite sau nu. În funcție de ceea ce găsim, putem rafina interogarea adăugând mai multe condiții așa cum am spus mai înainte. Dacă totul pare corect, poți continua.
Pentru a șterge un atașament în WordPress avem funcția wp_delete_attachment pe care o găsiți descrisă aici. Dacă vă uitați la documentație, veți vedea că această funcție primește identificatorul atașamentului și un parametru boolean care indică dacă doriți să forțați ștergerea sau doar să o aruncați în gunoi.
Când apelați această funcție în WordPress, acesta va șterge atașamentul și toate informațiile asociate acestuia, inclusiv posibilele comentarii, apariția în taxonomii, metadatele aferente și, cel mai important, fișierele de imagine stocate în folderul wp-content .
Pentru a obține lista de instrucțiuni wp_delete_attachment pe care le vom folosi în PHP, trebuie doar să schimbăm linia 2 a interogării anterioare, astfel încât ceea ce returnează interogarea SELECT să fie șirul de caractere care construiește instrucțiunea pe care o dorim. Unul pentru fiecare rând returnat de interogare. Rezultatele le puteti vedea aici:

Acum trebuie doar să copiați toate aceste instrucțiuni și să le lipiți, de exemplu, în fișierul functions.php al temei și să vă vizitați site-ul. Acest lucru va face ca aceste instrucțiuni să fie executate, ștergând imaginile orfane din WordPress. După aceea, eliminați instrucțiunile anterioare lipite pentru că nu vor mai fi necesare.
Nu uitați să verificați dacă site-ul dvs. încă funcționează perfect și că nu ați șters imaginile relevante. Dacă ceva nu a mers prost, nu vă faceți griji: ar trebui să aveți o copie de rezervă a bazei de date și a folderului wp-content , astfel încât ar trebui să puteți restabili site-ul dvs. la starea anterioară.
Dacă aveți probleme cu SQL și baza de date sau nu ați înțeles nimic din ceea ce am explicat aici, mai întâi anunțați-mi scriind un comentariu mai jos. După aceea, încercați să utilizați un plugin precum Media Cleaner. Rezultatul final pe care îl veți obține trebuie să fie foarte asemănător cu ceea ce am văzut în această postare.
Imagine prezentată de Gary Chan pe Unsplash .
