work.log

元エンジニアの備忘録的ブログ

WordPressに添付ファイル情報だけ追加するメモ

投稿:2014-11-05 18:44  更新:

WordPress の DB に添付ファイル情報だけを追加するメモ書きです。

管理画面上から添付ファイルの操作するには、添付ファイル情報が DB に保存されている必要があるのですが、FTP ソフト等で追加してしまうとこの情報がないので WordPress からは操作できません。

なので、後から添付ファイル情報だけを登録したいと思っているのですが、調べると下記 3 つの関数を使って登録する必要があるようです。

  • wp_insert_attachment
  • wp_generate_attachment_metadata
  • wp_update_attachment_metadata

公式の例を見るとこんな風に使うらしい。

$filename = '/path/sample.png';
$parent_post_id = 0;
$filetype = wp_check_filetype( basename( $filename ), null );

$wp_upload_dir = wp_upload_dir();

$attachment = array(
        'guid'           => $wp_upload_dir['baseurl'] . $filename,
        'post_mime_type' => $filetype['type'],
        'post_title'     => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ),
        'post_content'   => '',
        'post_status'    => 'inherit'
);

$attach_id = wp_insert_attachment( $attachment, $wp_upload_dir['basedir'] . $filename, $parent_post_id );

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

$attach_data = wp_generate_attachment_metadata( $attach_id, $wp_upload_dir['basedir'] . $filename );
wp_update_attachment_metadata( $attach_id, $attach_data );

$parent_post_id は多分、投稿した記事に関連付けさせるためのものだけど、これ設定しないと何かまずいのかな ?

それがちょっとわからないがこれを実行すると DB に添付ファイル情報が格納され、WordPress の管理画面から操作できるようになります。

全く違うサービスから WordPress に引っ越しをしたい時に覚えておくと便利な関数だと思います。