Tổ chức vật lý của thư viện phương tiện wordpress (plugin Real Media Library)


22

Cấu trúc thư mục Real Media Library

Giới thiệu.

Trong ảnh chụp màn hình ở trên, bạn có thể thấy cấu trúc thư mục được xây dựng với plugin Real Media Library . Bây giờ tôi muốn tạo một plugin mở rộng có thể tổ chức cấu trúc thư mục thành cấu trúc thư mục vật lý - RML chỉ là cấu trúc trực quan.

Cập nhật # 2 (2017-01-27): Kiểm tra câu trả lời!

Hãy xem tổ chức vật lý của thư viện phương tiện wordpress (plugin Real Media Library) nơi tôi đã tạo một plugin mở rộng miễn phí.

Cập nhật # 1 (2016-12-14): Thành công đầu tiên: Thư mục tải lên hình thu nhỏ tùy chỉnh

Bây giờ, tôi đã tạo một plugin khác Real Thumbnail Generator , cho phép bạn tạo thư mục tải lên hình thu nhỏ tùy chỉnh. Chỉ cần nhìn vào ảnh chụp màn hình này:

Thư mục tải lên của Thumbnail Real

Tại sao thư mục hình thu nhỏ tùy chỉnh? Thư mục hình thu nhỏ tùy chỉnh dễ bảo trì hơn, vì ở đây, chúng tôi không cần duy trì URL cập nhật cơ sở dữ liệu vì hình thu nhỏ vẫn ở cùng một vị trí (vẫn không bị thay đổi bởi tiện ích mở rộng RML).

Nếu bạn muốn tìm hiểu thêm về trình tạo hình thu nhỏ tùy chỉnh, bạn có thể xem chủ đề này, nơi tôi đã giải thích một phương pháp kỹ thuật Mỗi kích thước hình ảnh tùy chỉnh trong thư mục tải lên tùy chỉnh? .

Hãy tiếp tục chủ đề này, vì đầu năm 2017 tôi sẽ tiếp tục phát triển tiện ích mở rộng RML cho phép đồng bộ hóa giữa RML và thư mục tải lên của máy chủ. Tiện ích mở rộng cũng tương thích với plugin Real Thumbnail Generator, do đó cần có bản cập nhật cơ sở dữ liệu.

Bài gốc

Mục tiêu mở rộng của tôi.

Hiện tại tôi đang ở trong thư mục "/ Chưa được tổ chức", điều đó có nghĩa đó là thư mục / wp-content / uploads /. Khi tôi di chuyển tệp (như bạn có thể thấy trong ảnh chụp màn hình) vào thư mục PDF / SubDir, tệp nằm trong thư mục trực quan. Bây giờ tiện ích mở rộng của tôi phát hiện thư mục khác với thư mục vật lý và hiển thị một "nút" nhỏ cho phép người dùng di chuyển vật lý, quá:

Nút để kết hợp nó

Người dùng bây giờ bấm vào nút "Physix it!" và tệp nên được chuyển đến /wp-content/uploads/pdfs/subdir/Anther-Doc.pdf . Tôi đã tạo quá trình di chuyển rồi: Tôi đọc tất cả các tệp phương tiện cho tệp đính kèm này (hình thu nhỏ bao gồm cho hình ảnh) và sử dụng đổi tên hàm php ($ old_file, $ new_file) cùng với chức năng WP wp_mkdir_p () . GUID trong bảng wp_posts và dữ liệu meta trong wp_postmeta cũng được thay đổi. Khi tất cả các tập tin được di chuyển, tôi gọi hành động:

<?php
do_action('RML/Physix/Moved', $meta, $id);
// $meta = Infos about the move process, see above screenshot
// $id = The attachment ID
?>

$ meta là một mảng:

nhập mô tả hình ảnh ở đây

Khóa "đổi tên" chứa tất cả các quy trình đổi tên (ví dụ ở đây có thể là các tệp hình thu nhỏ cho hình ảnh).

Vấn đề: Đảm bảo khả năng tương thích plugin.

Vấn đề chính (nếu có) của thư viện phương tiện WordPress là, nhiều plugin lưu các tham chiếu đến hình ảnh với URL đầy đủ thay vì ID đính kèm. Điều đó có nghĩa là, có các bảng MySQL với các cột chứa URL tới tệp đã cho. Làm thế nào tôi có thể đảm bảo rằng TẤT CẢ các tài liệu tham khảo được cập nhật với các thư mục vật lý? Tôi nghĩ rằng nó là không thể.

Một cách tiếp cận có thể.

Tôi nối vào hành động và cập nhật các bảng tiêu chuẩn như wp_post-> post_content , ... với câu lệnh REPLACE đệ quy trong 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
}
?>

Biến $ rec hiện là Tuyên bố REPLACE:

REPLACE(post_content, 'https://example.io/wp-content/uploads/Another-Doc.pdf', 'https://example.io/wp-content/uploads/pdfs/subdir/Another-Doc.pdf')

Nhân tiện: Đối với một hình ảnh (testimage.jpg) với tất cả các tệp hình thu nhỏ, nó có thể trông như thế này:

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')

Nhưng điều gì xảy ra, nếu nó là một chuỗi tuần tự (JSON) trong bảng cơ sở dữ liệu? Nó trông như thế { "image": "http:\/\/example.io\/wp-content\/uploads\/Another-Doc.pdf" }. Tôi phải thêm gì vào Tuyên bố thay thế?

Tuyên bố REPLACE hiện có thể được sử dụng thông qua tất cả các bảng MySQL có chứa URL hình ảnh. Tôi đã nghĩ về việc tạo một mảng bộ lọc trong đó các plugin có thể thêm các bảng của chúng và phần mở rộng của tôi làm phần còn lại:

<?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")
    //...
));
?>

Nhật ký "di chuyển"

Tôi muốn tạo một "nhật ký" nơi người dùng có thể hoàn tác di chuyển. Nếu người dùng nhìn thấy, một hình ảnh bị hỏng (ví dụ như trong plugin Slider Revolution), anh ta có thể hoàn tác việc di chuyển đến thư mục gốc.

Bạn nghĩ gì về ý tưởng đó? Có một giải pháp tốt hơn? Tôi hy vọng tôi đã giải thích tất cả một cách tốt đẹp!


9
Bạn không có ý định xem cấu trúc thư mục bên dưới tệp đính kèm, trong nhiều trường hợp không có tệp nào (có lẽ các tệp thậm chí không có trên máy chủ? S3 AWS CDN, v.v.), WordPress giao dịch trong các bài đăng đính kèm, không phải tệp đính kèm và di chuyển chúng trên một máy chủ là phản tác dụng. Bạn sẽ làm tốt hơn với quy tắc phân loại tùy chỉnh và viết lại quy tắc kích hoạt chuyển hướng
Tom J Nowell

5
Mặc dù đây là một câu hỏi xuất sắc về độ rõ ràng / chất lượng (+1 cho nỗ lực), cuối cùng chúng tôi đang xử lý một plugin của bên thứ 3 ở đây, được coi là lạc đề - Tôi không nghĩ ai sẽ có thể "Nhanh chóng" giúp bạn mà không cần đầu tư nghiêm túc vào RML.
TheDeadMote

@TheDeadMedic Đúng vậy. Nhưng tôi đã hỏi câu hỏi theo cách, rằng bạn biết nó hoạt động như thế nào với các hành động trong RML. Câu hỏi này không phải là RML cụ thể, nó là Cơ sở dữ liệu cụ thể hơn - cách giải quyết vấn đề với việc thay thế url.
Matthias Günter

2
Và +1 khác cho nỗ lực - ước gì chúng ta sẽ có nhiều câu hỏi như vậy giống như chúng ta đã có trong những ngày đầu. Dù sao, các vấn đề chính được nêu ở trên. Để đưa ra quan điểm của bạn: Bạn có thể vui lòng gửi một chỉnh sửa và giải thích lý do cho những gì bạn đang cố gắng? Cho đến nay nó không có ý nghĩa gì để thực hiện các nhiệm vụ hệ thống tập tin.
kaiser

Làm thế nào bạn đi với điều này @ MatthiasGünter? Bạn đã quản lý để tìm một giải pháp?
Tim Malone

Câu trả lời:


1

Mở rộng giải pháp miễn phí "Thư mục tải lên tùy chỉnh vật lý"

Cách đây rất lâu, tôi đã bắt đầu mở chuỗi này và bây giờ có một plugin mở rộng có thể sử dụng được cho Real Media Library cho phép bạn quản lý vật lý thư mục tải lên của mình .

nhập mô tả hình ảnh ở đây

Kiểm tra plugin này: https://wordpress.org/plugins/physical-custom-upload-folder/

Bạn có biết thư mục wp-content / upload không? Ở đó, các tệp được lưu trữ trong các thư mục dựa trên năm / tháng. Đây có thể là một quá trình rất phức tạp và hàng loạt, đặc biệt là khi bạn đang làm việc với máy khách FTP như FileZilla.

Di chuyển các tệp đã tải lên: Plugin này không cho phép di chuyển các tệp vật lý khi bạn di chuyển tệp trong Thư viện phương tiện thực vì WordPress sử dụng URL ở các vị trí khác nhau. Rất khó để duy trì một quá trình như vậy. Vì vậy, điều này chỉ hoạt động cho tải lên mới.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.