web-dev-qa-db-fra.com

Comment ajouter un média avec PHP

J'ai plus de 1000 images sur mon serveur web, téléchargées avec FTP dans un dossier local (/home/chris/pictures)

Existe-t-il un moyen de les ajouter en tant que média bien connu à Wordpress dans PHP et obtenir leur identifiant?

while ( $the_query->have_posts() ) : $the_query->the_post();
    $post_id = get_the_ID();
    $filemakerID = get_post_meta($post_id, 'filemaker_id', true);

    $file['url']='/home/chris/picture_export/'.$filemakerID.'.jpeg';
    $file['type'] = 'image/jpeg';

    //THE DREAMED FUNCTION WOULD BE USED THIS WAY
    $photo_id = awesome_function( $file, $post_id);

    add_post_meta($post_id, 'photo', $photo_id );
}

Comme vous l'avez remarqué, ma photo est également utilisée dans un champ personnalisé photo.

Après des heures passées sur google dans codex, j’ai remarqué à quel point ces fonctions sont mal documentées. Peut-être que je ne pouvais tout simplement pas trouver les bons mots-clés à rechercher.

2
Christian

Si je comprends bien, chaque message a un filemaker, et chaque filemaker a une seule photo? La structure est un peu obscure.

Quoi qu'il en soit, l'un des meilleurs moyens est d'utiliser media_sideload_image comme ci-dessous.

Cependant, media_sideload_image WON'T fonctionne avec les fichiers locaux (un chemin sur votre système de fichiers). Vous devez donc modifier votre $ file ['url'] pour qu'elle soit une URL valide (http://votrehomepage.com/chris/images, par exemple). Si vous ne pouvez pas faire cela, vous devez utiliser wp_upload_bits et wp_insert_attachment , mais cette façon de procéder demande beaucoup plus de travail/plus difficile.

function awesome_function($file, $post_id) {

    require_once(ABSPATH . 'wp-admin' . '/includes/image.php');
    require_once(ABSPATH . 'wp-admin' . '/includes/file.php');
    require_once(ABSPATH . 'wp-admin' . '/includes/media.php');

    // upload image to server
    media_sideload_image($file['url'], $post_id);

    // get the newly uploaded image
    $attachments = get_posts( array(
        'post_type' => 'attachment',
        'number_posts' => 1,
        'post_status' => null,
        'post_parent' => $post_id,
        'orderby' => 'post_date',
        'order' => 'DESC',) 
    );

    // returns the id of the image
    return $attachments[0]->ID;
}
5
pbd