ข้ามไปเนื้อหาหลัก

Filikod 1.2.0: อัปเดตระบบตรวจจับภาพซ้ำใน WordPress

นักพัฒนา Filikod เผยเบื้องหลังการเพิ่มฟีเจอร์ตรวจจับภาพซ้ำใน WordPress 3,099 ไฟล์ พร้อมวิธีแก้ปัญหาไฟล์แปลภาษา WPML ที่ถูกเข้าใจผิด

เรียบเรียงโดย AI
Inewgen
21 Sep 2026ที่มา: Dev.to4 นาทีอ่าน (0 ครั้ง)
แชร์
Filikod 1.2.0: อัปเดตระบบตรวจจับภาพซ้ำใน WordPress

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

ขนาดตัวอักษร
  • Filikod เพิ่มฟีเจอร์สแกนหาไฟล์รูปภาพซ้ำในคลังมีเดีย WordPress
  • เว็บไซต์หลายภาษาที่ใช้ WPML มักสร้างไฟล์แนบซ้ำต่อภาษาแม้ใช้ไฟล์จริงอันเดียวกัน
  • ระบบต้องกรองการแปลภาษาและตรวจสอบไฟล์ที่ถูกลบออกไปจากฮาร์ดดิสก์
  • ปลั๊กอินเลือกที่จะแสดงผลและเตือนผู้ใช้แทนการลบไฟล์อัตโนมัติเพื่อความปลอดภัย

การจัดการคลังมีเดียบน WordPress มักมีปัญหาเรื่องไฟล์รูปภาพที่ถูกอัปโหลดซ้ำซ้อนโดยไม่รู้ตัว นักพัฒนาปลั๊กอินสแกน Alt Text ฟรีอย่าง Filikod ได้แชร์ประสบการณ์การพัฒนาฟีเจอร์ค้นหาไฟล์ภาพที่เหมือนกันทุกประการ (Exact-Duplicate Detection) หลังจากนำไปทดสอบจริงบนเว็บไซต์ของลูกค้าที่มีรูปภาพจำนวน 3,099 ไฟล์ และมีการใช้งานปลั๊กอินแปลภาษา WPML ร่วมด้วยถึงสามภาษา ซึ่งทำให้พบข้อจำกัดและปัญหาที่ไม่คาดคิดหลายประการ

ในความเป็นจริง ไฟล์รูปภาพที่ซ้ำกันมักไม่ได้ใช้ชื่อไฟล์เดียวกันเสมอไป เช่น photo.jpg และ photo-1.jpg แต่ภาพหน้าจอแดชบอร์ดเดียวกันอาจถูกอัปโหลดในเดือนกรกฎาคม สิงหาคม และกันยายน โดยทีมงานสามคนที่มีชื่อไฟล์ ชื่อเรื่อง และข้อความอัปเดต (Alt Text) แตกต่างกันโดยสิ้นเชิง ทำให้ระบบหลังบ้านของ WordPress ไม่สามารถเชื่อมโยงไฟล์เหล่านี้เข้าหากันได้ การระบุความซ้ำซ้อนจึงต้องใช้การตรวจสอบเนื้อหาข้อมูลภายในไฟล์ (Byte Fingerprint) แทนการดูที่ชื่อไฟล์

นอกจากนี้ ยังมีรายละเอียดปลีกย่อยที่นักพัฒนาต้องคำนึงถึง เช่น ตั้งแต่ WordPress 5.3 เป็นต้นมา ระบบจะย่อขนาดภาพขนาดใหญ่อัตโนมัติและให้ไฟล์แนบชี้ไปที่ภาพที่ย่อแล้ว ขณะที่ไฟล์ต้นฉบับยังคงอยู่บนดิสก์ หากเว็บไซต์เคยเปลี่ยนไลบรารีรูปภาพระหว่างการอัปโหลด ไบต์ของไฟล์อาจไม่ตรงกัน การคำนวณลายนิ้วมือจึงต้องทำกับไฟล์ต้นฉบับเมื่อ WordPress ยังเก็บรักษาไว้ และต้องอัปเดตลายนิ้วมือใหม่ทุกครั้งที่มีการปรับแต่งขนาดหรือใช้งานเครื่องมือแก้ไขภาพในระบบ

code editor programming laptop screen

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

3,099จำนวนรูปภาพทั้งหมดในเว็บทดสอบ
29กลุ่มภาพซ้ำที่แท้จริงหลังแก้ไขโค้ด

ปัญหาสำคัญที่เกิดขึ้นระหว่างการสแกนเว็บไซต์หลายภาษาคือ ปลั๊กอินแปลภาษาอย่าง WPML, Polylang และ Bogo จะสร้างไฟล์แนบแยกต่างหากสำหรับแต่ละภาษา แม้ว่าจะชี้ไปที่ไฟล์จริงอันเดียวกันบนดิสก์ก็ตาม ผลลัพธ์คือระบบตรวจจับภาพซ้ำมองเห็นไฟล์เหล่านี้เป็นภาพซ้ำที่ต้องจัดการ ทั้งที่หากลบออกจะทำให้หน้าเว็บในภาษาอื่นแสดงผลภาพไม่ถูกต้อง นอกจากนี้ระบบตรวจสอบ Alt Text ยังเคยทำงานผิดพลาดโดยนับข้อความแบรนด์เดียวกันในแต่ละภาษาเป็นข้อผิดพลาดซ้ำซ้อน

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

แนวทางแก้ไขคือการกำหนดกฎว่าชุดการแปลภาษาทั้งหมด (Translation Set) ให้ถือเป็นรูปภาพเดียว โดยปลั๊กอินแปลภาษาแต่ละตัวจะมีตารางหรือตารางเสริมที่เก็บความสัมพันธ์นี้ไว้ เมื่อดึงข้อมูลแผนผังดังกล่าวมาได้ กลุ่มไฟล์ที่มีไบต์เหมือนกันจะถูกยุบเหลือเพียงรายการเดียวต่อหนึ่งชุดการแปลภาษา รวมถึงกฎของ Alt Text ที่จะนับว่าซ้ำก็ต่อเมื่ออยู่บนรูปภาพที่แตกต่างกันอย่างแท้จริงเท่านั้น ส่วนปลั๊กอินประเภทแปลแบบสดอย่าง Weglot หรือ TranslatePress จะไม่สร้างไฟล์แนบเพิ่ม จึงไม่มีปัญหานี้

ไม่อยากพลาดข่าวใหม่?

สมัครรับสรุปข่าวสารใหม่ทางอีเมล ไม่บ่อยจนรำคาญ

โฆษณา

"Rewriting every reference to a file across post content, page builder JSON, custom fields and widgets is where duplicate cleaners earn their one-star reviews"

ผู้พัฒนา Filikod

หลังจากปรับปรุงระบบเรียบร้อยแล้ว ผลการสแกนบนคลังมีเดียเดิมลดลงเหลือเพียง 29 กลุ่ม และมีไฟล์ส่วนเกิน 30 ไฟล์ ซึ่งทั้งหมดเป็นภาพซ้ำที่ใช้งานจริงบนหน้าเว็บ นอกจากนี้ยังพบไฟล์ตกค้างจากการย้ายเว็บไซต์อีก 232 ไฟล์ที่ไม่มีไฟล์อยู่บนดิสก์แล้วแต่ยังมีชื่อปรากฏในระบบ ทำให้ผู้เข้าชมเห็นเป็นภาพเสีย นักพัฒนาจึงได้เพิ่มแท็บแยกสำหรับตรวจสอบไฟล์เหล่านี้โดยเฉพาะ พร้อมระบุเส้นทางและหน้าที่ใช้งานเพื่อให้ผู้ดูแลระบบจัดการได้ง่ายขึ้น

ประเด็นทางเทคนิคอีกจุดหนึ่งคือ การกรองคิวรีของผู้ดูแลระบบตามภาษาปัจจุบัน ทำให้การสแกนข้ามข้อมูลไปถึงสองในสามส่วน จนกว่าจะมีการกำหนดคำสั่งให้ละเว้นตัวกรองของบุคคลที่สามด้วยคำสั่ง 'suppress_filters' => true ซึ่งนักพัฒนาซอฟต์แวร์ควรตรวจสอบยอดนับข้อมูลกับ SQL ดิบเสมอ ฟีเจอร์ทั้งหมดนี้ได้ถูกรวมไว้ใน Filikod เวอร์ชัน 1.2.0 ซึ่งเปิดให้ใช้งานฟรีภายใต้สัญญาอนุญาต GPL บน WordPress.org

ที่มา: Dev.to

ความคิดเห็น

แสดงความคิดเห็น
0/2000

พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้