it-swarm.com.de

Überprüfen, ob sich eine Datei bereits in der Medienbibliothek befindet

Ich erstelle benutzerdefinierte Dateien in einem Plugin und füge sie der Medienbibliothek mit dem Code hinzu, der im Wordpress-Codex für wp_insert_attachment enthalten ist. Mein Plugin überschreibt diese Dateien jedoch gelegentlich. Ich muss sicherstellen, dass die Dateien nicht erneut zur Medienbibliothek hinzugefügt werden. Hier ist der aktuelle Code:

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

Ich muss nur prüfen, ob die Datei bereits Teil der Medienbibliothek ist, und sie aktualisieren, falls dies der Fall ist. Ich habe keine post_id, mit der ich arbeiten könnte, nur den Permalink und die guid.

Danke für Ihre Hilfe.

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

Sie können dies oben in Ihrem Code verwenden. Überprüfen Sie dann den Wert von $count. Wenn es 0 ist, können Sie mit dem Hinzufügen des Anhangs fortfahren

6
Mridul Aggarwal

Ich habe diese Methode (danke 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

Ich weiß, dass dies eine alte Frage ist, aber mir hat keine dieser Antworten gefallen. Hier ist meine Lösung.

Dies prüft, ob die Datei existiert. In diesem Fall wird der vorhandene Anhang aktualisiert. Andernfalls wird ein neuer Anhang erstellt.

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

Im obigen Beispiel verwende ich eine PDF-Datei in meinem $ -Dateinamen, aber Sie können diese durch einen beliebigen Dateinamen/Dateityp ersetzen.

1
Lennart

Sie können mit post_exists($filename) prüfen, ob ein Bild vorhanden ist. Wenn ein Bild vorhanden ist, können Sie es aktualisieren und erstellen

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

diese Funktion übernimmt als Parameter den Namen der Mediendatei und gibt die meta_id zurück, falls vorhanden, andernfalls (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