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:
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á:
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:
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!