องค์กรทางกายภาพของไลบรารีสื่อ wordpress (ปลั๊กอินไลบรารีสื่อจริง)


22

โครงสร้างโฟลเดอร์ไลบรารีสื่อจริง

บทนำ.

ในภาพดังกล่าวข้างต้นที่คุณสามารถดูโครงสร้างโฟลเดอร์ที่สร้างขึ้นด้วยพรีเมี่ยมปลั๊กอินMedia Library ตอนนี้ฉันต้องการสร้างปลั๊กอินส่วนขยายที่สามารถจัดระเบียบโครงสร้างโฟลเดอร์เป็นโครงสร้างโฟลเดอร์จริง - RML เป็นโครงสร้างภาพเท่านั้น

อัปเดต # 2 (2017-01-27): ดูคำตอบ!

ดูที่การจัดระเบียบทางกายภาพของไลบรารีสื่อ WordPress (ปลั๊กอินไลบรารีสื่อจริง)ที่ฉันได้สร้างปลั๊กอินส่วนขยายฟรี

อัปเดต # 1 (2016-12-14): ความสำเร็จครั้งแรก: โฟลเดอร์อัปโหลดภาพขนาดย่อที่กำหนดเอง

ตอนนี้ฉันได้สร้างปลั๊กอินอื่นแล้ว ภาพย่อจริงซึ่งอนุญาตให้คุณสร้างโฟลเดอร์อัพโหลดรูปขนาดย่อที่กำหนดเอง เพียงดูภาพหน้าจอนี้:

โฟลเดอร์อัพโหลดรูปย่อจริง

ทำไมโฟลเดอร์ภาพย่อที่กำหนดเอง โฟลเดอร์ภาพย่อที่กำหนดเองนั้นง่ายต่อการดูแลรักษาเนื่องจากที่นี่เราไม่จำเป็นต้องบำรุงรักษา URL การอัพเดทฐานข้อมูลเพราะภาพขนาดย่อยังคงอยู่ในตำแหน่งเดียวกัน (ซึ่งยังไม่เปลี่ยนแปลงโดยส่วนขยาย RML)

หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับเครื่องกำเนิดภาพย่อที่กำหนดเองคุณสามารถดูหัวข้อนี้ที่ฉันได้อธิบายวิธีการทางเทคนิคขนาดภาพที่กำหนดเองในไดเรกทอรีอัพโหลดที่กำหนดเอง .

โปรดติดตามหัวข้อนี้เนื่องจากต้นปี 2560 ฉันจะดำเนินการพัฒนาส่วนขยาย RML ต่อไปซึ่งอนุญาตการซิงโครไนซ์ระหว่าง RML และโฟลเดอร์อัพโหลดเซิร์ฟเวอร์ ส่วนขยายยังเข้ากันได้กับปลั๊กอินตัวสร้างภาพย่อขนาดเล็กดังนั้นควรมีการอัปเดตฐานข้อมูล

โพสต์ต้นฉบับ

เป้าหมายการขยายของฉัน

ในขณะที่ฉันอยู่ในโฟลเดอร์ "/ Unorganized" ซึ่งหมายความว่าเป็นโฟลเดอร์ / wp-content / uploads / เมื่อฉันย้ายไฟล์ (ตามที่คุณเห็นในภาพหน้าจอ) ไปยังโฟลเดอร์ PDF / SubDir ไฟล์นั้นอยู่ในโฟลเดอร์ภาพ ตอนนี้ส่วนขยายของฉันตรวจพบโฟลเดอร์ที่แตกต่างไปยังโฟลเดอร์ที่มีอยู่จริงและแสดงปุ่ม "เล็กน้อย" ซึ่งช่วยให้ผู้ใช้สามารถย้ายมันได้ด้วย:

ปุ่มเพื่อ physix มัน

ตอนนี้ผู้ใช้คลิกที่ปุ่ม "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) ผู้ใช้สามารถยกเลิกการย้ายไปยังโฟลเดอร์ดั้งเดิมได้

คุณคิดอย่างไรเกี่ยวกับความคิดนั้น มีวิธีแก้ปัญหาที่ดีกว่านี้ไหม? ฉันหวังว่าฉันได้อธิบายทั้งหมดในวิธีที่ดี!


9
คุณไม่ได้ตั้งใจจะเห็นโครงสร้างโฟลเดอร์ที่แนบมาในหลายกรณีไม่มี (อาจเป็นไฟล์ที่ไม่ได้อยู่บนเซิร์ฟเวอร์ S3 AWS CDN ฯลฯ ), WordPress เกี่ยวข้องกับโพสต์ไฟล์แนบไม่ใช่ไฟล์แนบและ ย้ายพวกเขาไปรอบ ๆ บนเซิร์ฟเวอร์เป็นต่อต้าน คุณควรทำสิ่งนี้ให้ดีขึ้นด้วย taxonomy ที่กำหนดเองและเขียนกฎใหม่ที่ทำให้เกิดการเปลี่ยนเส้นทาง
Tom J Nowell

5
ในขณะที่นี่เป็นคำถามที่ยอดเยี่ยมในแง่ของความชัดเจน / คุณภาพ (+1 สำหรับความพยายาม) ท้ายที่สุดเรากำลังจัดการกับปลั๊กอินของบุคคลที่สามที่นี่ซึ่งถือว่าเป็นหัวข้อนอก - ฉันไม่คิดว่าใครจะสามารถ "เร็ว" ช่วยให้คุณไม่ต้องลงทุนใน RML อย่างจริงจัง
TheDeadMedic

@TheDeadMedic ใช่ว่าเป็นจริง แต่ฉันถามคำถามในแบบที่คุณรู้ว่ามันทำงานอย่างไรกับการกระทำใน RML คำถามนี้ไม่เฉพาะ RML มันเป็นฐานข้อมูลที่เฉพาะเจาะจงมากขึ้น - วิธีการแก้ปัญหาด้วยการเปลี่ยน URL
Matthias Günter

2
และอีก +1 สำหรับความพยายาม - หวังว่าเราจะมีคำถามมากกว่านี้ ... เหมือนที่เราเคยมีในช่วงแรก ๆ อย่างไรก็ตามปัญหาหลักดังกล่าวข้างต้น เพื่อให้ประเด็นของคุณ: คุณช่วยแก้ไขไฟล์และอธิบายเหตุผลของสิ่งที่คุณพยายามได้ไหม จนถึงตอนนี้มันไม่สมเหตุสมผลเลยที่จะทำภารกิจระบบไฟล์เหล่านั้น
ไกเซอร์

คุณไปกับ @ MatthiasGünterอย่างไร? คุณจัดการเพื่อหาวิธีการแก้ปัญหา?
ทิมมาโลน

คำตอบ:


1

ส่วนขยายโซลูชันฟรี "โฟลเดอร์อัพโหลดทางกายภาพที่กำหนดเอง"

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

ป้อนคำอธิบายรูปภาพที่นี่

ลองใช้งานปลั๊กอินนี้: https://wordpress.org/plugins/physical-custom-upload-folder/

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

การย้ายไฟล์ที่อัปโหลดแล้ว:ปลั๊กอินนี้ไม่อนุญาตให้ย้ายไฟล์ทางกายภาพเมื่อคุณย้ายไฟล์ในไลบรารีสื่อจริงเพราะ WordPress ใช้ URL ในที่ต่าง ๆ มันยากมากที่จะรักษากระบวนการดังกล่าว ดังนั้นวิธีนี้จะใช้ได้กับการอัปโหลดใหม่เท่านั้น

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