web-dev-qa-db-fra.com

Vérifier si un fichier est déjà dans la médiathèque

Je crée des fichiers personnalisés dans un plugin et les ajoute à la médiathèque à l'aide du code fourni dans le Codex Wordpress pour wp_insert_attachment. Cependant, mon plugin écrase parfois ces fichiers. Je dois m'assurer que les fichiers ne sont pas ajoutés à nouveau à la médiathèque. Voici le code actuel:

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

Je dois juste vérifier si le fichier fait déjà partie de la médiathèque et le mettre à jour le cas échéant. Je n'ai pas de post_id pour travailler, juste le permalink et le guid.

Merci de votre aide.

8
Dawson Goodell
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));

Vous pouvez l'utiliser en haut de votre code. Puis vérifiez la valeur de $count. Si la valeur est 0, vous pouvez continuer à ajouter la pièce jointe.

6
Mridul Aggarwal

J'ai cette méthode (merci 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");
1
T.Todua

Je sais que c’est une vieille question, mais je n’ai aimé aucune de ces réponses. Voici donc ma solution.

Cela vérifiera si le fichier existe. Si tel est le cas, la pièce jointe existante sera mise à jour. sinon, cela créera une nouvelle pièce jointe.

// 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 the path to the upload directory.
$upload_dir = wp_upload_dir();

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

Dans l'exemple ci-dessus, j'utilise un fichier .pdf dans mon nom de fichier, mais vous pouvez le remplacer par n'importe quel nom de fichier/type de fichier.

1
Lennart

Vous pouvez vérifier si une image existe avec post_exists($filename). Si une image existe, vous pouvez la mettre à jour et vous pouvez aussi la créer

 //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); 
            }
0
Altravista

cette fonction prend en paramètre le nom du fichier multimédia et renvoie le méta_id s'il existe, sinon il renvoie (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
hammed