WordPressの特定の投稿に対して、添付ファイルをアップロード

以下のコードで実行できる

$wp_filetype = wp_check_filetype(basename($filename), null ); //ファイル名の拡張子、mime形式を配列で取得
$wp_upload_dir = wp_upload_dir(); //ファイルのアップロード先ディレクトリを取得
$attachment = array(
    'guid' => $wp_upload_dir['url'] . '/' . basename( $filename ), 
    'post_mime_type' => $wp_filetype['type'], //mime形式を指定「image/png」「image/jpeg」など
    'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ), //ファイル名を指定
    'post_content' => '', //空の文字列を指定
    'post_status' => 'inherit' //投稿ステータスを指定
);
$attach_id = wp_insert_attachment( $attachment, $filename, $post_id ); //投稿ID「$post_id」に対して添付ファイルをメディアライブラリにアップロード。変数「attach_id」に返ってきたIDを格納
// 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' ); //「wp_generate_attachment_metadata()」を使う場合には、このファイルを事前に読み込んでおくこと
$attach_data = wp_generate_attachment_metadata( $attach_id, $filename ); //wp_update_attachment_metadata() が必要とする形式の添付ファイルのメタデータを作成する
wp_update_attachment_metadata( $attach_id, $attach_data ); //添付ファイルのメタデータを更新

ただし、 $filename はサーバー上のファイルの場所を表す。 ※ファイルのURIではなく絶対パスを使用しなけらばならない。また、ファイルがアップロードディレクトリに存在する必要がある。 参考サイト