Kiểm tra nếu một tệp đã có trong Thư viện phương tiện


8

Tôi đang tạo các tệp tùy chỉnh trong một plugin và thêm chúng vào Thư viện phương tiện bằng mã được cung cấp trong Codpress Wordpress cho wp_insert_attachment. Tuy nhiên, plugin của tôi thỉnh thoảng ghi đè lên các tệp đó. Tôi cần đảm bảo rằng các tệp không được thêm lại vào Thư viện phương tiện. Đây là mã hiện tại:

$wp_filetype = wp_check_filetype(basename($filename), null );
$wp_upload_dir = wp_upload_dir();
$attachment = array(
   'guid' => $wp_upload_dir['baseurl'] . '/' . _wp_relative_upload_path( $filename ), 
   'post_mime_type' => $wp_filetype['type'],
   'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename)),
   'post_content' => '',
   'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment( $attachment, $filename);
// you must first include the image.php file
// for the function wp_generate_attachment_metadata() to work
require_once(ABSPATH . 'wp-admin/includes/image.php');
$attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
wp_update_attachment_metadata( $attach_id, $attach_data );

Tôi chỉ cần kiểm tra xem tập tin đã là một phần của Thư viện phương tiện hay chưa và cập nhật nó nếu có. Tôi không có post_id để làm việc, chỉ có permalink và hướng dẫn.

Cảm ơn bạn đã giúp đỡ.

Câu trả lời:


6
global $wpdb;
$image_src = wp_upload_dir()['baseurl'] . '/' . _wp_relative_upload_path( $filename );
$query = "SELECT COUNT(*) FROM {$wpdb->posts} WHERE guid='$image_src'";
$count = intval($wpdb->get_var($query));

Bạn có thể sử dụng điều này ở đầu mã của bạn. Sau đó kiểm tra giá trị của $count. Nếu là 0, thì bạn có thể tiếp tục thêm tệp đính kèm


2

Tôi biết đây là một câu hỏi cũ nhưng tôi không thích bất kỳ câu trả lời nào trong số này vì vậy đây là giải pháp của tôi.

Điều này sẽ kiểm tra nếu các tập tin tồn tại. Nếu vậy nó sẽ cập nhật tệp đính kèm hiện có; nếu không, nó sẽ tạo ra một tệp đính kèm mới.

// Get upload dir
$upload_dir    = wp_upload_dir();
$upload_folder = $upload_dir['path'];

// Set filename, incl path
$filename = "{$upload_folder}/myfile-{$id}.pdf";

// Check the type of file. We'll use this as the 'post_mime_type'.
$filetype = wp_check_filetype( basename( $filename ), null );

// Get file title
$title = preg_replace( '/\.[^.]+$/', '', basename( $filename ) );

// Prepare an array of post data for the attachment.
$attachment_data = array(
    'guid'           => $upload_dir['url'] . '/' . basename( $filename ),
    'post_mime_type' => $filetype['type'],
    'post_title'     => $title,
    'post_content'   => '',
    'post_status'    => 'inherit'
);

// Does the attachment already exist ?
if( post_exists( $title ) ){
  $attachment = get_page_by_title( $title, OBJECT, 'attachment');
  if( !empty( $attachment ) ){
    $attachment_data['ID'] = $attachment->ID;
  }
}

// If no parent id is set, reset to default(0)
if( empty( $parent_id ) ){
  $parent_id = 0;
}

// Insert the attachment.
$attach_id = wp_insert_attachment( $attachment_data, $filename, $parent_id );

// Generate the metadata for the attachment, and update the database record.
$attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
wp_update_attachment_metadata( $attach_id, $attach_data );

Trong ví dụ trên tôi đang sử dụng .pdf trong tên tệp $ của tôi nhưng bạn có thể thay thế tên này bằng bất kỳ tên tệp / filetype nào.


1

Tôi có phương pháp này (cảm ơn Mridul):

function MediaFileAlreadyExists($filename){
    global $wpdb;
    $query = "SELECT COUNT(*) FROM {$wpdb->postmeta} WHERE meta_value LIKE '%/$filename'";
    return ($wpdb->get_var($query)  > 0) ;
}

// MediaFileAlreadyExists("my-image.png");

0

hàm này lấy tham số là tên tệp phương tiện và trả về meta_id nếu nó tồn tại, nếu không nó sẽ trả về (false).

function MediaFileAlreadyExists($filename){
    global $wpdb;
    $query = "SELECT meta_id FROM {$wpdb->postmeta} WHERE meta_value LIKE '%/$filename'";

    if ( $wpdb->get_var($query) ){
        return $wpdb->get_var($query);
    }

    return false;
}

0

Bạn có thể kiểm tra nếu hình ảnh tồn tại với post_exists($filename). Nếu hình ảnh tồn tại, bạn có thể cập nhật nó, bạn cũng có thể tạo nó

 //if image exist update else create it
        if (post_exists($filename)){
                $page = get_page_by_title($filename, OBJECT, 'attachment');
                $attach_id = $page->ID;

                $attach_data = wp_generate_attachment_metadata( $attach_id, $destination ); // Generate attachment data, filesize, height, width etc.

                wp_update_attachment_metadata( $attach_id, $attach_data ); // Add the above meta data

                add_post_meta($attach_id, '_wp_attachment_image_alt', $filealt); // Add the alt text 
        }
        else{

                $attach_id = wp_insert_attachment( $attachment, $destination, $post_id ); 

                $attach_data = wp_generate_attachment_metadata( $attach_id, $destination ); 

                wp_update_attachment_metadata( $attach_id, $attach_data ); 

                add_post_meta($attach_id, '_wp_attachment_image_alt', $filealt); 
            }

1
Bạn có thể thêm một lời giải thích trong câu trả lời về cách thức hoạt động của mã không?
kero
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.