Проверка наличия файла в медиатеке

Я создаю пользовательские файлы в плагине и добавляю их в медиабиблиотеку, используя код, представленный в Wordpress Codex для wp_insert_attachment. Однако мой плагин иногда перезаписывает эти файлы. Мне нужно убедиться, что файлы не добавлены снова в медиабиблиотеку. Вот текущий код:

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

Мне просто нужно проверить, является ли этот файл уже частью медиа-библиотеки, и обновите его, если он есть. У меня нет post_id для работы, только постоянная ссылка и руководство.

Спасибо за вашу помощь.

7 голосов | спросил Dawson Goodell 26 +04002012-10-26T18:16:38+04:00312012bEurope/MoscowFri, 26 Oct 2012 18:16:38 +0400 2012, 18:16:38

4 ответа


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

Вы можете использовать это в верхней части своего кода. Затем проверьте значение $count. Если это 0, вы можете продолжить добавление вложения

ответил Mridul Aggarwal 26 +04002012-10-26T18:36:54+04:00312012bEurope/MoscowFri, 26 Oct 2012 18:36:54 +0400 2012, 18:36:54
0

У меня есть этот метод (спасибо 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 27 FebruaryEurope/MoscowbMon, 27 Feb 2017 01:11:33 +0300000000amMon, 27 Feb 2017 01:11:33 +030017 2017, 01:11:33
0
  

эта функция принимает в качестве параметра имя медиафайла и возвращает meta_id   если он exisists, в противном случае он возвращает (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 17 J000000Monday17 2017, 14:57:17
0

Вы можете проверить, существует ли изображение с помощью post_exists($filename). Если изображение существует, вы можете его обновить, и вы можете его создать.

 //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 10 52017vEurope/Moscow11bEurope/MoscowFri, 10 Nov 2017 13:50:17 +0300 2017, 13:50:17

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132