บทนำ.
ในภาพดังกล่าวข้างต้นที่คุณสามารถดูโครงสร้างโฟลเดอร์ที่สร้างขึ้นด้วยพรีเมี่ยมปลั๊กอินMedia Library ตอนนี้ฉันต้องการสร้างปลั๊กอินส่วนขยายที่สามารถจัดระเบียบโครงสร้างโฟลเดอร์เป็นโครงสร้างโฟลเดอร์จริง - RML เป็นโครงสร้างภาพเท่านั้น
อัปเดต # 2 (2017-01-27): ดูคำตอบ!
ดูที่การจัดระเบียบทางกายภาพของไลบรารีสื่อ WordPress (ปลั๊กอินไลบรารีสื่อจริง)ที่ฉันได้สร้างปลั๊กอินส่วนขยายฟรี
อัปเดต # 1 (2016-12-14): ความสำเร็จครั้งแรก: โฟลเดอร์อัปโหลดภาพขนาดย่อที่กำหนดเอง
ตอนนี้ฉันได้สร้างปลั๊กอินอื่นแล้ว ภาพย่อจริงซึ่งอนุญาตให้คุณสร้างโฟลเดอร์อัพโหลดรูปขนาดย่อที่กำหนดเอง เพียงดูภาพหน้าจอนี้:
ทำไมโฟลเดอร์ภาพย่อที่กำหนดเอง โฟลเดอร์ภาพย่อที่กำหนดเองนั้นง่ายต่อการดูแลรักษาเนื่องจากที่นี่เราไม่จำเป็นต้องบำรุงรักษา URL การอัพเดทฐานข้อมูลเพราะภาพขนาดย่อยังคงอยู่ในตำแหน่งเดียวกัน (ซึ่งยังไม่เปลี่ยนแปลงโดยส่วนขยาย RML)
หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับเครื่องกำเนิดภาพย่อที่กำหนดเองคุณสามารถดูหัวข้อนี้ที่ฉันได้อธิบายวิธีการทางเทคนิคขนาดภาพที่กำหนดเองในไดเรกทอรีอัพโหลดที่กำหนดเอง .
โปรดติดตามหัวข้อนี้เนื่องจากต้นปี 2560 ฉันจะดำเนินการพัฒนาส่วนขยาย RML ต่อไปซึ่งอนุญาตการซิงโครไนซ์ระหว่าง RML และโฟลเดอร์อัพโหลดเซิร์ฟเวอร์ ส่วนขยายยังเข้ากันได้กับปลั๊กอินตัวสร้างภาพย่อขนาดเล็กดังนั้นควรมีการอัปเดตฐานข้อมูล
โพสต์ต้นฉบับ
เป้าหมายการขยายของฉัน
ในขณะที่ฉันอยู่ในโฟลเดอร์ "/ Unorganized" ซึ่งหมายความว่าเป็นโฟลเดอร์ / wp-content / uploads / เมื่อฉันย้ายไฟล์ (ตามที่คุณเห็นในภาพหน้าจอ) ไปยังโฟลเดอร์ PDF / SubDir ไฟล์นั้นอยู่ในโฟลเดอร์ภาพ ตอนนี้ส่วนขยายของฉันตรวจพบโฟลเดอร์ที่แตกต่างไปยังโฟลเดอร์ที่มีอยู่จริงและแสดงปุ่ม "เล็กน้อย" ซึ่งช่วยให้ผู้ใช้สามารถย้ายมันได้ด้วย:
ตอนนี้ผู้ใช้คลิกที่ปุ่ม "Physix it!" และไฟล์ที่ควรจะย้ายไป/wp-content/uploads/pdfs/subdir/Another-Doc.pdf ผมได้สร้างกระบวนการย้ายแล้ว: ผมอ่านออกทุกไฟล์สื่อสำหรับสิ่งที่แนบมานี้ (ภาพขนาดเล็กสำหรับภาพรวม) และใช้ PHP ฟังก์ชั่นการเปลี่ยนชื่อ ($ old_file, $ new_file)ร่วมกับฟังก์ชั่น WP wp_mkdir_p () GUID ในตารางwp_postsและข้อมูลเมตาในwp_postmetaก็เปลี่ยนไปเช่นกัน เมื่อไฟล์ทั้งหมดถูกย้ายฉันเรียกการกระทำ:
<?php
do_action('RML/Physix/Moved', $meta, $id);
// $meta = Infos about the move process, see above screenshot
// $id = The attachment ID
?>
$ meta เป็นอาร์เรย์:
กุญแจ "เปลี่ยนชื่อ" ประกอบด้วยกระบวนการเปลี่ยนชื่อทั้งหมด (ตัวอย่างเช่นที่นี่อาจเป็นไฟล์ภาพย่อสำหรับภาพ)
ปัญหา: รับประกันความเข้ากันได้ของปลั๊กอิน
ปัญหาหลัก (ถ้ามี) ของไลบรารีสื่อ WordPress คือปลั๊กอินจำนวนมากบันทึกการอ้างอิงไปยังรูปภาพที่มี URL แบบเต็มแทนที่จะเป็นรหัสสิ่งที่แนบมา นั่นหมายความว่ามีตาราง MySQL พร้อมคอลัมน์ที่มี URL ไปยังไฟล์ที่กำหนด ฉันจะรับประกันได้อย่างไรว่าการอ้างอิงทั้งหมดเป็นข้อมูลล่าสุดด้วยโฟลเดอร์ฟิสิคัล ฉันคิดว่ามันเป็นไปไม่ได้
แนวทางหนึ่งที่เป็นไปได้
ฉันขอไปสู่การปฏิบัติและอัปเดตตารางมาตรฐานเช่นwp_post-> post_content , ... ด้วยคำสั่ง REPLACE ซ้ำใน SQL
<?php
/**
* When a attachment is moved.
*
* @hooked RML/Physix/Moved
*/
function physix_moved($meta, $id) {
$rename = $meta["rename"];
// Prepare array for recursive REPLACE
$arr = array();
foreach ($rename as $value) {
$arr[] = array($value["old_url"], $value["new_url"]);
}
$rec = $this->recReplace($arr, "post_content"); // function is already finished
}
?>
ตัวแปร $ rec ตอนนี้เป็น REPLACE-Statement:
REPLACE(post_content, 'https://example.io/wp-content/uploads/Another-Doc.pdf', 'https://example.io/wp-content/uploads/pdfs/subdir/Another-Doc.pdf')
โดยวิธีการ: สำหรับภาพ (testimage.jpg) ที่มีไฟล์ภาพขนาดย่อทั้งหมดจะมีลักษณะเช่นนี้:
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(post_content, 'https://example.io/wp-content/uploads/testimage-750x350.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-750x350.jpg'), 'https://example.io/wp-content/uploads/testimage-1170x855.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-1170x855.jpg'), 'https://example.io/wp-content/uploads/testimage-256x187.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-256x187.jpg'), 'https://example.io/wp-content/uploads/testimage-1024x748.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-1024x748.jpg'), 'https://example.io/wp-content/uploads/testimage-300x219.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-300x219.jpg'), 'https://example.io/wp-content/uploads/testimage-150x150.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-150x150.jpg'), 'https://example.io/wp-content/uploads/testimage.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage.jpg')
แต่จะเกิดอะไรขึ้นถ้ามันเป็นสตริงที่เป็นอนุกรม (JSON) ในตารางฐานข้อมูล { "image": "http:\/\/example.io\/wp-content\/uploads\/Another-Doc.pdf" }
เพื่อให้ดูเหมือนว่า ฉันต้องเพิ่มอะไรลงใน REPLACE-Statement
คำชี้แจงแทนขณะนี้สามารถใช้งานผ่านตาราง MySQL ทั้งหมดซึ่งมี URL รูปภาพ ฉันคิดว่าจะสร้างอาร์เรย์ตัวกรองที่ปลั๊กอินสามารถเพิ่มตารางและส่วนขยายของฉันทำที่เหลือ:
<?php
$tables = apply_filters("RML/Physix/Moved/Tables", array( // TODO: use $wpdb->prefix
"wp_posts" => array("post_excerpt", "post_content"),
"wp_postmeta" => array("meta_value")
//...
));
?>
บันทึก "ย้าย"
ฉันต้องการสร้าง "บันทึก" ที่ผู้ใช้สามารถเลิกทำการย้ายได้ หากผู้ใช้เห็นภาพจะเสียหาย (เช่นในปลั๊กอิน Slider Revolution) ผู้ใช้สามารถยกเลิกการย้ายไปยังโฟลเดอร์ดั้งเดิมได้
คุณคิดอย่างไรเกี่ยวกับความคิดนั้น มีวิธีแก้ปัญหาที่ดีกว่านี้ไหม? ฉันหวังว่าฉันได้อธิบายทั้งหมดในวิธีที่ดี!