Hôm nay trên Group có bạn hỏi về việc lưu hình ảnh trong bài viết sang 1 host khác rồi thay thế URL ảnh trong bài viết bằng URL ảnh mới tại host đó.
Với số lượng Hooks và tài liệu về Hooks hiện tại thì mình xin chia sẻ cách làm như sau:
Sử dụng hook kdn/post/wp-post để làm công việc này.
Lấy ra các URL ảnh trong nội dung bài viết, sau đó xử lý các URL này và xuất ra các URL mới. Cuối cùng thay thế các URL ảnh cũ bằng URL ảnh mới.
Code như sau, trong code mình đã viết comment rất chi tiết:
<?php // Filter add_filter('kdn/post/wp-post', 'kdn_post_wp_post', 10, 9); // Callback function kdn_post_wp_post($data, $postData, $postBot, $postSaver, $siteId, $postUrl, $urlTuple, $isRecrawl, $isFirstPage) { // Tìm kiếm URL nằm trong thuộc tính "src" và gán vào $matches preg_match_all('/src="(.+?)"/i', $data['post_content'], $matches); // Khởi tạo mảng mới là $newMatches $newMatches = []; /** * Thao tác tiếp theo: * - Phân tích mảng $matches * - Tạo các item cho mảng $newMatches theo dạng: * [ * ['old_url' => $oldUrl, 'new_url' => $newUrl], * ['old_url' => $oldUrl, 'new_url' => $newUrl], * ... * ] * - Phân tích mảng $newMatches * - Tìm $oldUrl và thay thế bằng $newUrl trong $data['post_content'] * - Xuất ra mảng $data sau khi Tìm và thay thế */ // Phân tích mảng $matches foreach ($matches[1] as $key => $oldUrl) { // Khởi tạo $newUrl $newUrl = ''; // Gán $oldUrl vào mỗi item của $newMatches $newMatches[$key]['old_url'] = $oldUrl; // Sử dụng $oldUrl để làm những thứ bạn muốn tại đây // Sau đó gán kết quả mới vào $newUrl // $newUrl = uploadToNewHost($oldUrl); // Ví dụ // Gán $newUrl vào mỗi item của $newMatches $newMatches[$key]['new_url'] = $newUrl ? $newUrl : $oldUrl; } // Phân tích mảng $newMatches // Tìm $oldUrl và thay thế bằng $newUrl trong $data['post_content'] foreach ($newMatches as $newMatch) { $data['post_content'] = str_replace($newMatch['old_url'], $newMatch['new_url'], $data['post_content']); } // Xuất ra mảng $data sau khi Tìm và thay thế return $data; } ?>
Trên đây chỉ là một cách, còn nhiều cách khác để xử lý trường hợp này. Chúc các bạn thành công!