Chào các bạn, nếu bạn không muốn phân tích URL ảnh đại diện và lưu ảnh đại diện khi Thu thập lại thì dưới đây là code dành cho bạn. Ở trường hợp này, chúng ta sử dụng các hooks như sau:
/**
* Không xóa ảnh đại diện khi thu thập lại bài viết.
* Thực hiện 4 việc sau:
* - Không xóa ảnh đại diện.
* - Không xóa tệp đính kèm là ảnh đại diện.
* - Không chuẩn bị dữ liệu ảnh đại diện.
* - Giữ lại đính kèm cho ảnh đại diện.
*/
// 1. Không xóa ảnh đại diện khi thu thập lại.
add_filter('kdn/post/allow_delete_thumbnail', 'kdn_post_allow_delete_thumbnail', 10, 11);
function kdn_post_allow_delete_thumbnail($allowRun, $data, $postData, $postBot, $postSaver, $siteId, $postUrl, $urlTuple, $isRecrawl, $postId, $isFirstPage) {
// Nếu đang thu thập lại, không xóa ảnh đại diện.
if ($isRecrawl) return false;
}
// 2. Không xóa tệp đính kèm là ảnh đại diện khi thu thập lại.
add_filter('kdn/post/allow_delete_attached_media', 'kdn_post_allow_delete_attached_media', 10, 13);
function kdn_post_allow_delete_attached_media($allowDeleteAttachedMedia, $mediaPost, $alreadyAttachedMedia, $data, $postData, $postBot, $postSaver, $siteId, $postUrl, $urlTuple, $isRecrawl, $postId, $isFirstPage) {
// Lấy ID của tệp đính kèm.
$attachedMediaId = $mediaPost->ID;
// Lấy ID của ảnh đại diện hiện tại.
$postThumbnailId = get_post_thumbnail_id($postId);
// Nếu ID của tệp đính kèm chính là ID của ảnh đại diện hiện tại, không xóa tệp đính kèm.
if ($attachedMediaId == $postThumbnailId) {
return false;
// Nếu không, tiếp tục xóa tệp đính kèm.
} else {
return true;
}
}
// 3. Không chuẩn bị dữ liệu ảnh đại diện cho bài viết khi thu thập lại.
add_filter('kdn/post/allow_prepare_thumbnail', 'kdn_post_allow_prepare_thumbnail', 10, 5);
function kdn_post_allow_prepare_thumbnail($allowRun, $postData, $postBot, $proxyList, $postMediaPreparer) {
// Nếu đang thu thập lại, không chuẩn bị dữ liệu cho ảnh đại diện.
if ($postBot->isRecrawl()) {
return false;
// Nếu không, tiếp tục chuẩn bị dữ liệu cho ảnh đại diện.
} else {
return true;
}
}
// 4. Giữ lại đính kèm cho ảnh đại diện của bài viết khi thu thập lại.
add_filter('kdn/post/thumbnail_data_before_set', 'kdn_post_thumbnail_data_before_set', 10, 11);
function kdn_post_thumbnail_data_before_set($mediaFile, $data, $postData, $postBot, $postSaver, $siteId, $postUrl, $urlTuple, $isRecrawl, $postId, $isFirstPage) {
// Nếu đang thu thập lại, giữ lại đính kèm cho ảnh đại diện.
if ($isRecrawl) {
return null;
// Nếu không, tiếp tục xử lý.
} else {
return $mediaFile;
}
}