WordPress 处理图片和文件上传函数 media_handle_upload()



在程序开发中,处理上传文件是一个麻烦事,在 WordPress 中,不是这样的,WordPress 为我们提供了处理上传图片的函数:media_handle_upload,我们只需要把参数传给这个函数,上传的图片或文件就自动保存在服务器上并插入媒体库中了。下面我们来看以下这个函数怎么用的。

函数

media_handle_upload( $file_id, $post_id, $post_data, $overrides );

参数

  • $file_id: (string) (必须的) PHP $_FILES 超级变量的索引。默认:None
  • $post_id: (int) (必需的) ,需要插入附件的文章 ID,如果不想把附件插入到文章里,设为 0 即可。默认: None
  • $post_data: (array) (可选) 允许修改附件的一些信息。默认: array()
  • $overrides: (array) (optional) 允许覆盖 wp_handle_upload() 的表现。默认: array( ‘test_form’ => false )

返回值

(int|WP_Error) 如果成功,返回附件 ID,如果失败,返回一个 WP_Error 实例。

例子

前端表单:

<form id="featured_upload" method="post" action="#" enctype="multipart/form-data">
	<input type="file" name="my_image_upload" id="my_image_upload"  multiple="false" />
	<input type="hidden" name="post_id" id="post_id" value="55" />
	<?php wp_nonce_field( 'my_image_upload', 'my_image_upload_nonce' ); ?>
	<input id="submit_my_image_upload" name="submit_my_image_upload" type="submit" value="Upload" />
</form>

处理上传的文件

// 检查 nonce 和用户权限
if ( 
	isset( $_POST['my_image_upload_nonce'], $_POST['post_id'] ) 
	&& wp_verify_nonce( $_POST['my_image_upload_nonce'], 'my_image_upload' )
	&& current_user_can( 'edit_post', $_POST['post_id'] )
) {
	// 如果通过检查,安全性是没问题的

	// 在前端使用时,需要引入以下3个文件
	require_once( ABSPATH . 'wp-admin/includes/image.php' );
	require_once( ABSPATH . 'wp-admin/includes/file.php' );
	require_once( ABSPATH . 'wp-admin/includes/media.php' );
	
	// 让WordPress处理上传的文件
	// 注意, 'my_image_upload' 是上面表单里的文件字段的name
	$attachment_id = media_handle_upload( 'my_image_upload', $_POST['post_id'] );
	
	if ( is_wp_error( $attachment_id ) ) {
		// 上传出错时的处理
	} else {
		// 上传成功后的处理
	}

} else {
	// nounxe检查失败时的提示信息
}

<< WordPress 插入页面/文章的函数 wp_insert_post() WordPress“添加媒体”文件时只显示上传到当前文章的附件图片 >>
工作中
  • 作者 建站迷

    建站迷

    让天下没有难做的网站!
    解决中小型企业的无站之伤。



没有账号? 忘记密码?

社交账号快速登录