Memeriksa apakah file sudah ada di Perpustakaan Media

8

Saya membuat file khusus dalam plugin dan menambahkannya ke Media Library menggunakan kode yang disediakan di Wordpress Codex untuk wp_insert_attachment. Namun, plugin saya terkadang menimpa file-file itu. Saya perlu memastikan bahwa file tidak ditambahkan lagi ke Perpustakaan Media. Berikut adalah kode saat ini:

$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 );

Saya hanya perlu memeriksa apakah file sudah menjadi bagian dari Perpustakaan Media, dan memperbaruinya jika sudah. Saya tidak punya post_id untuk dikerjakan, hanya permalink dan panduan.

Terima kasih atas bantuan Anda.

Dawson Goodell
sumber

Jawaban:

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));

Anda dapat menggunakan ini di bagian atas kode Anda. Kemudian periksa nilai $count. Jika 0, maka Anda dapat terus menambahkan lampiran

Mridul Aggarwal
sumber
2

Saya tahu ini adalah pertanyaan lama tetapi saya tidak suka jawaban ini jadi inilah solusi saya.

Ini akan memeriksa apakah file tersebut ada. Jika demikian, itu akan memperbarui lampiran yang ada; jika tidak, itu akan membuat lampiran baru.

// 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 );

Pada contoh di atas saya menggunakan .pdf dalam $ filename saya tetapi Anda dapat menggantinya dengan nama file / filetype apa pun.

Lennart
sumber
1

Saya punya metode ini (terima kasih 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");
T.Todua
sumber
0

fungsi ini sebagai parameter nama file media, dan mengembalikan meta_id jika ada, jika tidak kembali (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;
}
hammed
sumber
0

Anda dapat memeriksa apakah gambar ada post_exists($filename). Jika gambar ada, Anda dapat memperbaruinya juga. Anda dapat membuatnya

 //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); 
            }
Altravista
sumber
1
Bisakah Anda menambahkan penjelasan dalam jawaban tentang cara kerja kode?
kero