9ml

1. formタグからアップロードされた画像をサーバーに保存する

<?php
		function upload_image_to_media_library($file) {
			// 画像をサーバーに保存する
			// ファイルサイズは3MB=3*1024*1024バイトいかに設定
			// 接続不良などで保存できなかった場合のエラーチェック
			if( ! function_exists('wp_handle_upload') ) {
				require_once( ABSPATH . 'wp-admin/includes/file.php' );
			}
			//$max_fie_size = 3*1024*1024;
			//if($file['size'] > $max_file_size) {
			//	echo 'ファイルサイズが大きすぎます。' . $file['size'];
			//	return false;
			//}
			$uploaded_file = wp_handle_upload( $file, array('test_form' => false) );
			if(isset($uploaded_file['error'])) {
				echo 'HANDLE UPLOADエラー: ' . $upoloaded_file['error'];
				return false;
			}
			
			if ( isset( $uploaded_file['file'] ) ) {
				
				// 許可された画像タイプか確認
				$file_path = $uploaded_file['file'];
				$file_url = $uploaded_file['url'];
				$wp_file_type = wp_check_filetype( $file_path, null );
				$allowed_types = array('image/jpeg', 'image/png', 'image/gif', 'image/webp');
				if(!in_array($wp_file_type['type'], $allowed_types)) {
					echo '許可されていないファイルタイプです';
					return false;
				}

				// WordPressのデータベースに添付ファイルの情報を登録
				// $attach_idは画像の投稿ID
				$attachment = array(
					'guid' => $file_url,
					'post_mime_type' => $wp_file_type['type'],
					'post_title' => basename( $file_path ),
					'post_content' => '',
					'post_status' => 'inherit'
				);
				$attach_id = wp_insert_attachment( $attachment, $file_path );
				
				// 添付ファイルのメタデータを生成
				require_once( ABSPATH . 'wp-admin/includes/image.php');
				$attach_data = wp_generate_attachment_metadata( $attach_id, $file_path );
				wp_update_attachment_metadata( $attach_id, $attach_data );
				
				// 画像のURLを返す
				return $file_url;
			} else {
				return false;
			}
		}
	?>
	
	<!-- 画像を送信するためにはenctype='multipart/form-dataが必要' -->
	<form method='post' action='' enctype='multipart/form-data'>
		<label for='image_upload'>画像を選択:</label>
		<input type='file' name='file' id='image_upload' required>
		<input type='submit' name='submit_image' value='アップロード'>
	</form>
	<?php
		// $_FILES['file']は、フォームから送信されたファイルデータを扱うグローバル変数であり、fileはname='file'を参照している
		if(isset($_POST['submit_image']) && isset($_FILES['file']) && !empty($_FILES['file']['name'])) {
			$image_url = upload_image_to_media_library($_FILES['file']);
			if($image_url) {
				echo 'アップロード成功。画像URL:' . $image_url . '<br>';
				echo '<img src="' . esc_url($image_url) . '" style="width:500px;">';
			} else {
				echo 'アップロード失敗';
			}
		}
	?>
ホームに戻る