私はWordpressで簡単なフロントエンド画像のアップロードに取り組んでいます。このコード片で私はwordpressメディアセクションにアップロードすることができます、しかし、私はただファイルの名前とURLをアップロードします、画像なし。
画像をアップロードするために必要な作業は誰でも知っていますか?
私のフォーム:
<form id="dash_action" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input name="submit" type="submit" class="button" value="<?php _e( 'Save settings' ); ?>" />
</form><!--End dash_action-->
私のPHPフォーム処理:
if( isset( $_POST['submit'] ) ) {
$filename = $_FILES['file']['name'];
$wp_filetype = wp_check_filetype( basename($filename), null );
$wp_upload_dir = wp_upload_dir();
$attachment = array(
'guid' => $wp_upload_dir['subdir'] . '/' . basename( $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, 37 );
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 );
}
WordPressコーデックス は、「ファイルはuploadsディレクトリになければならない」と述べています。アップロードしたファイルをuploadsディレクトリに移動する行を追加し、guidパスを変更しました。
if( isset( $_POST['submit'] ) ) {
$filename = $_FILES['file']['name'];
$wp_filetype = wp_check_filetype( basename($filename), null );
$wp_upload_dir = wp_upload_dir();
// Move the uploaded file into the WordPress uploads directory
move_uploaded_file( $_FILES['file']['tmp_name'], $wp_upload_dir['path'] . '/' . $filename );
$attachment = array(
'guid' => $wp_upload_dir['url'] . '/' . basename( $filename ),
'post_mime_type' => $wp_filetype['type'],
'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ),
'post_content' => '',
'post_status' => 'inherit'
);
$filename = $wp_upload_dir['path'] . '/' . $filename;
$attach_id = wp_insert_attachment( $attachment, $filename, 37 );
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 );
}
media_handle_sideload
はあなたの友達です!
使用法:
media_handle_sideload( $file_array, $post_id, $desc, $post_data );
そのため、コードのサイズは劇的に縮小されます。
if( isset( $_POST['submit'] ) ) {
$attach_id = media_handle_sideload( $_FILES['file'], 0, 'description' );
}
タイトルなどを付けて投稿データの配列を渡すこともできます。
ファイルを自動的に正しい場所に移動し、添付ファイルを作成してメタデータを生成し、それを関連する投稿に添付して、代わりに添付ファイルIDを提供します。
失敗をチェックするためにis_wp_error()
を必ず使用してください。
代わりにmedia_handle_upload()
を使ってください。メタデータの生成やその他すべてを含めて、これはすべてあなたのために行います。
この方法で自分自身をロールバックしたい場合は、実際にファイルを正しい場所に移動するためにwp_handle_upload()
を呼び出すことを忘れていました。