ฉันจะลบภาพที่ไม่ได้ใช้ทั้งหมดออกจากไดเรกทอรีอัพโหลดได้อย่างไร


20

ฉันกำลังพยายามล้างโฟลเดอร์ที่อัปโหลดเนื่องจากตอนนี้พวกเขาเริ่มที่จะใช้พื้นที่มากเกินไปในเซิร์ฟเวอร์ของฉัน

ฉันได้ลองใช้ปลั๊กอินเพื่อให้บรรลุจุดประสงค์นี้เช่น DNUI และ Cleanup Images แต่ปลั๊กอินเหล่านี้ไม่สามารถใช้งานได้หรือในกรณีของ DNUI (ซึ่งได้รับการอัปเดตล่าสุดและใช้งานได้) ไม่บรรลุผลตามที่ฉันต้องการ นี่เป็นเพราะเว็บไซต์ของฉันใช้ Woocommerce และธีมซึ่งทั้งคู่ใช้รูปภาพภายในสถานที่อื่น ๆ ไม่ใช่แค่โพสต์หรือหน้าเช่นหัวกระดาษท้ายกระดาษและแกลเลอรี่ ดูเหมือนว่า WC ใช้มันเป็นของตัวเองในปลั๊กอิน Lightbox เรียกว่าพริตตี้ภาพถ่ายซึ่งเป็นภาพที่มีรายละเอียดว่า "ไม่ได้ใช้" โดย DNUI จะถูกเรียกจาก

ฉันรู้ว่ามันเป็นการถามสักหน่อย แต่ฉันสงสัยว่าใครจะชี้ฉันในทิศทางที่ถูกต้องได้ไหม? ฉันไม่ได้เป็นนักพัฒนาดังนั้นอาจไม่ควรโพสต์ที่นี่ แต่ฉันสามารถทำงานกับเวลาและความมุ่งมั่นได้ ฉันเคยเห็นสคริปท์ในเว็บไซต์นี้ที่ได้ผลลัพธ์เช่นเดียวกับปลั๊กอิน DNUI แต่ไม่มีอะไรที่คำนึงถึงการใช้อิมเมจอื่น ๆ (ถ้าเป็นไปได้?) ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมมาก


2
ฉันอยากจะทำในสิ่งเดียวกัน แต่สิ่งที่ผมกังวลมีวิธีการกำหนดที่ไม่ได้ใช้ ตัวอย่างเช่นผู้แต่งอาจอัปโหลดภาพไปยังโพสต์ฉบับร่างจากนั้นสร้างโพสต์ฉบับร่างใหม่วางเนื้อหาและโพสต์นั้นถูกเผยแพร่ นี่หมายความว่าภาพนั้นถูกกำหนดให้กับโพสต์ฉบับร่างไม่ใช่โพสต์ที่เผยแพร่ อาจเป็นสคริปต์ที่ตรวจสอบการโพสต์ทั้งหมดและตรวจสอบ URL ภาพเพื่อดูว่ามีการใช้รูปภาพใดและไม่ใช่ หวังว่าเราจะได้คำตอบที่ดี
Christine Cooper

น่าเสียดายที่ยิ่งคำจำกัดความของคำว่า "ไม่ได้ใช้" มีความละเอียดมากเท่าใดโอกาสที่คุณจะหาคำตอบที่เหมาะสมก็ยิ่งน้อยลงเท่านั้น คุณพูดถึงภาพกี่ภาพ (เป็นจำนวนและขนาด)
Rarst

สวัสดี Rarst ขอบคุณสำหรับการตอบเว็บไซต์มีการใช้งานมาประมาณ 5 ปีแล้วและขึ้นอยู่กับภาพมากโดยมีการเปลี่ยนแปลงเล็กน้อยของธีมและปลั๊กอิน ฉันเชื่อว่ามีรูปภาพที่ไม่ได้ใช้งานนับพันรูป และเนื่องจากปริมาณการเปลี่ยนแปลงขนาดจึงแตกต่างกันอย่างมาก ฉันได้ใช้รูปย่อขนาดเล็กที่สร้างแรงขึ้นมาใหม่เพื่อลองและลดจำนวนนี้และมันใช้งานได้ในระดับหนึ่ง แต่ปลั๊กอินนี้มักจะหมดเวลาเนื่องจากจำนวนเงิน นอกจากนี้ยังเพิ่มซีพียูบนเซิร์ฟเวอร์ของฉันให้อยู่ในระดับที่ไม่สามารถใช้งานได้หากฉันเปิดใช้งาน
G-Olly

ฉันตระหนักถึงความซับซ้อนของปัญหาดังนั้นฉันจึงใช้ห้องสมุดสื่อเพื่อพยายามระบุและลบภาพเหล่านี้ น่าเสียดายที่ฉันพบว่ามันมักจะใช้เป็นรายการที่ไม่ได้ใช้และในทางกลับกันเช่นนี้มันเป็นกระบวนการช้าอย่างระมัดระวัง แต่ฉันได้จมูกของฉันไปที่หินลับในขณะนี้
G-Olly

1
ถ้าฉันอาจจะใส่สองเซ็นต์ของฉันสำหรับบางชนิดเว็บไซต์ฉันคิดว่าปัญหาสามารถแก้ไขได้สังเกตุ สำหรับเว็บไซต์เหล่านี้ webcrawlers กำลังเยี่ยมชมทุกหน้าในเว็บไซต์ จากบันทึกเซิร์ฟเวอร์ของคุณจะได้รับรายการ URL ของหน้าที่เข้าชมทั้งหมด แยกวิเคราะห์หน้าเหล่านี้โดยใช้ DOMDocument และรับองค์ประกอบ <img> และ srcs ทั้งหมด ปัญหาด้วยวิธีนี้คือถ้า Javascript สร้าง hrefs และ srcs แบบไดนามิก

คำตอบ:


4

การลบภาพโดยใช้ปลั๊กอิน:

คุณสามารถใช้ปลั๊กอินนี้มันจะค้นหาฐานข้อมูลของคุณและดูว่าภาพถูกแทรกลงในโพสต์ใด ๆ (ในเนื้อหาเป็นภาพเด่นในฟิลด์ที่กำหนดเองทุกที่ ... ) หรือเป็นพื้นหลัง ...

หากไม่ได้ใช้ภาพทุกที่มันจะให้ตัวเลือกในการลบ คุณจะได้รับรายชื่อรูปภาพทั้งหมดในไซต์ของคุณที่ไม่ได้ใช้อีกต่อไปดังนั้นคุณจึงสามารถลบได้อย่างปลอดภัย

https://wordpress.org/plugins/dnui-delete-not-used-image-wordpress/

และสิ่งนี้ยังคงใช้งานได้แม้จะล้าสมัย

https://wordpress.org/plugins/wordpress-uploaded-files-cleaner/


การลบภาพด้วยตนเอง:

นอกจากนี้คุณยังสามารถค้นหารูปภาพที่ไม่ได้แนบกับโพสต์และหน้าของไลบรารีสื่อของคุณ

ไปที่ไลบรารีสื่อและคลิกที่ "ไม่ติด" มันจะแสดงภาพทั้งหมดที่อาจปรากฏในส่วนอื่น ๆ ของเว็บไซต์ของคุณหรือไม่ได้ใช้


1
ปัญหาเกี่ยวกับรูปภาพที่ไม่ได้แนบกับโพสต์ใด ๆ คืออาจใช้ในที่อื่น - ตัวอย่างเช่นหากคุณมีฟิลด์กำหนดเองที่ใช้เครื่องมืออัปโหลดภาพตามผู้อัปโหลดสื่อดั้งเดิมของ Wordpress ขึ้นอยู่กับลักษณะของธีม รหัสแล้วรูปภาพที่อัปโหลดจะไม่มีแนบไว้กับโพสต์ใด ๆ (บนฐานข้อมูลของคุณ) ยังเป็นแนวคิดที่ถูกต้อง
Bruno Monteiro

ฉันจะ @BrunoMonteiro ที่สองที่นี่ เป็นไปได้ทั้งหมดที่จะมีรูปภาพที่ไม่ได้แนบกับโพสต์
BODA82

3

Cron / งานตามกำหนดเวลาและการรวบรวมข้อมูล DB เป็นเพื่อนของคุณ

มันจะต้องเป็นปลั๊กอินคุณสามารถกำหนดช่วงเวลา wp_cron ได้ไม่ต่างจากที่แนะนำไว้ข้างต้น แต่ด้วยการเพิ่มการตรวจสอบฟิลด์ 'post_content' เช่นใด ๆ (คุณจะต้องระบุสิ่งเหล่านี้ขึ้นอยู่กับสภาพแวดล้อม WP ของคุณ) สำหรับ URI / URL ของภาพ สิ่งนี้มีความเป็นไปได้ที่จะใช้เวลามาก / การเสียภาษีในกระบวนการของระบบ - กระบวนการนี้จริง ๆ แล้วจะต้องทำงานวันละครั้งหรือสัปดาห์เดียวโดยสมมติว่าไม่มีเหตุผลทางกฎหมาย / ธุรกิจอื่น ๆ ให้ทำงานบ่อยขึ้น

การกำหนดค่าฐานข้อมูล master-slave DB ของกระบวนการอนุญาตให้กระบวนการนี้มีความเสียหายน้อยลงอย่างมีนัยสำคัญ แต่นั่นไม่เกินขอบเขตของคำถามนี้ที่ฉันเชื่อ



1

คุณจะต้องสแกนwp-content/uploadsโฟลเดอร์ของคุณเพื่อหาไฟล์ที่อัพโหลดแล้วจากนั้นฐานข้อมูลของคุณสำหรับการอ้างอิงไปยังไฟล์เหล่านั้นและในที่สุดก็จับคู่เข้าด้วยกัน สิ่งที่ไม่สามารถจับคู่ควรปลอดภัยที่จะลบ

การสแกนฐานข้อมูลเป็นส่วนที่ยุ่งยาก การอ้างอิงไฟล์ส่วนใหญ่จะถูกเก็บไว้ใน Media Library ซึ่งคุณสามารถเข้าถึงได้โดยใช้ฟังก์ชั่น WordPress มาตรฐาน / API แต่จะเกิดอะไรขึ้นกับไฟล์ที่ถูกลบออกจาก Media Library แต่ยังคงมีการอ้างอิงโดยโพสต์ หรือไฟล์ที่ปลั๊กอินอื่นเชื่อมโยงด้วยวิธีอื่น?

ฉันทำการทดสอบจำนวนมากและจากสิ่งที่ฉันรวบรวมการอ้างอิงไฟล์ทั้งหมดจะถูกเก็บไว้ในรูปแบบข้อความล้วน (เช่นเซลล์ตารางเท่ากับเส้นทางของไฟล์หรือ URL) รูปแบบ HTML (เช่นเนื้อหาของโพสต์) เป็นข้อมูลต่อเนื่องหรือในที่สุดก็เป็นวัตถุ JSON คุณจะต้องสแกนฐานข้อมูลทั้งหมดและลองเดาว่าจะใช้รูปแบบใดภายในเซลล์แต่ละเซลล์ แน่นอนว่าอาจมีวิธีแปลกใหม่อื่น ๆ ที่ปลั๊กอินบางตัวใช้เพื่อเก็บการอ้างอิงไปยังไฟล์ของพวกเขา แต่สิ่งเหล่านั้นสามารถจัดการได้เป็นกรณี ๆ ไป

ดังนั้นผมเขียนปลั๊กอินที่ไม่โดยอัตโนมัติทุกที่ตั้งแต่ผมจำเป็นต้องใช้มันสำหรับบางส่วนของเว็บไซต์ของลูกค้าของเราและตั้งชื่อมันTheia อัพโหลดทำความสะอาด มันใช้งานได้ดีสำหรับฉัน แต่แน่นอนว่าคุณควรสำรองข้อมูลก่อนที่จะลองทำสิ่งนี้


วิธีการที่ดี ... ฉันสงสัยว่าคุณพบปัญหาใด ๆ กับมันมีมากขึ้นและ content / plugins / โพสต์เพิ่มช่วงเวลา ...
jj_

มีปัญหาที่นี่และมีใช่ ตัวอย่างเช่นสำหรับปลั๊กอินบางตัวคุณต้องยกเว้นตารางบางตัวที่อาจทำให้ช้าลงอย่างมาก เราพยายามแยกคำหลักบางคำออกโดยอัตโนมัติเช่นตาราง "บันทึก" แต่ไม่สามารถตรวจสอบได้ในทุกกรณี
liviucmg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.