web-dev-qa-db-ja.com

メディアを追加する方法 PHP

私は自分のウェブサーバー上にローカルフォルダ(/home/chris/pictures)にFTPでアップロードされた1000枚以上の写真を持っています

PHPのワードプレスによく知られているメディアとしてそれらを追加し、それらのIDを取得する方法はありますか?

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

お気づきのとおり、私の写真はカスタムフィールドphotoでも使用されています。

Google dans codexで何時間もかけて、私はこれらの関数がどれほど文書化されていないかに気づいた。たぶん私は検索する正しいキーワードを見つけ出すことができませんでした。

2
Christian

私が正しく理解していれば、各投稿にはファイルメーカーがあり、各ファイルメーカーには写真が1枚しかありません。その構造は明らかではない。

とにかく、一つの方法は以下のようにmedia_sideload_imageを使うことです。

ただし、media_sideload_imageWON'Tはローカルファイル(ファイルシステム上のパス)を扱うので、$ file ['url']を有効なURLに変更する必要があります(http:// yourhomepage.com/chris/pictures、など)。それができない場合は、 wp_upload_bits および wp_insert_attachment を使用する必要がありますが、その方法はもっと面倒です。

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