Câu hỏi:

function kli_auto_featured_image($post_id, $post) { // Nếu bài viết đã có ảnh đại diện hoặc không phải là trạng thái công khai/đang chỉnh sửa cuối cùng, không làm gì cả if (has_post_thumbnail($post_id) || !in_array($post->post_status, ['publish', 'future'])) { return; }

// Lấy nội dung bài viết
$post_content = get_post_field('post_content', $post_id);

// Tìm ảnh đầu tiên trong nội dung bài viết
preg_match('/<img[^>]+src=[\'"]([^\'"]+)[\'"][^>]*>/i', $post_content, $matches);
$first_img = $matches[1] ?? '';

// Nếu không tìm thấy ảnh trong bài viết, sử dụng ảnh mặc định
if (empty($first_img)) {
    $first_img = get_option('kli_default_image');
}

// Nếu vẫn không có ảnh, thoát
if (empty($first_img)) {
    return;
}

// Kiểm tra xem ảnh có nằm trong thư viện Media hay không
$attachment_id = kli_get_attachment_id_from_url($first_img);

if (!$attachment_id) {
    // Nếu không, tải ảnh vào thư viện Media và đặt làm ảnh đại diện
    $attachment_id = media_sideload_image($first_img, $post_id, null, 'id');
} else {
    // Nếu ảnh đã tồn tại trong thư viện, đặt làm ảnh đại diện trực tiếp
    set_post_thumbnail($post_id, $attachment_id);
    return;
}

if (!is_wp_error($attachment_id)) {
    set_post_thumbnail($post_id, $attachment_id);
}

} mã này nó tạo ra 1 bản sao khi chọn ảnh đại diện. tôi không muốn tạo thêm 1 bản sao như vậy.


Có vẻ như vấn đề của bạn là hàm media_sideload_image(), hàm này tải ảnh từ một URL và sao chép nó vào Media Library của WordPress, tức là tạo một bản sao mới của ảnh. Nếu bạn không muốn tạo thêm bản sao và chỉ muốn sử dụng ảnh đã tồn tại trong thư viện Media, bạn có thể bỏ qua phần tải ảnh và chỉ đặt ảnh đại diện.

if (!$attachment_id) {
    // Mã đã bị xóa ở đây để tránh việc tải ảnh và tạo thêm một bản sao
} else {
    // Nếu ảnh đã tồn tại trong thư viện, đặt làm ảnh đại diện trực tiếp
    set_post_thumbnail($post_id, $attachment_id);
    return;
}

Cũng lưu ý rằng mã này không xử lý trường hợp nếu không tìm thấy ID đính kèm (tức là $attachment_idfalse). Bạn có thể muốn thêm mã để xử lý điều này.

Và nếu bạn vẫn mơ hồ với những thứ này, đừng lo lắng! Đến ngay trituenhantao.io, ở đó, bạn có thể tìm thấy nhiều bài viết giải đáp thắc mắc của mình, từ việc lập trình PHP, WordPress cho đến những thứ phức tạp như AI và machine learning!


Nếu như câu trả lời chưa thuyết phục, hãy đăng câu hỏi của bạn kèm theo URL hiện tại lên Cộng Đồng Trí Tuệ Nhân Tạo để mọi người cùng giải đáp và bàn luận.
Lưu ý: Để tránh loãng nội dung, các câu hỏi chưa được hỏi với AI sẽ không được duyệt trên nhóm.
Trang chủ | Hỏi tiếp | Xem lịch sử