在Pre_UPDATE_OPTION_{OPTION_NAME}上载文件

时间:2020-07-01 作者:Andrea Somovigo

在WP中保存选项时,是否有方法上载文件?我有这个选项设置(save绑定到options.php),需要在服务器上上传和存储一个文件

enter image description here

并且在update\\u option{option\\u name}中找不到文件:

add_action(\'init\', array($this,\'upload_credentials\'), 10);
function upload_credentials( ) {
  //CRM_adv_settings is the option name
  add_filter( \'pre_update_option_CRM_adv_settings\', array($this,\'system_save_file\'), 10, 2 );
}

function system_save_file($new_value, $old_value){
  //$rawData = file_get_contents("php://input");
  $f=$_FILES;
  $p=$_POST;
}
找不到$\\u文件,在$\\u POST中有文件名;尝试了关于update_optionpre_update_option 但没有成功,有什么想法吗?

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

我很确定问题是not 使用WordPress挂钩。取而代之的是:

找不到$_FILES, 在里面$_POST, 这是文件名

。。很可能是因为您的表单标签(<form>) 没有所需的enctype attribute 必须设置为multipart/form-data 要使文件上载输入生效,需要将文件上载到服务器,而无需设置enctypemultipart/form-data, 输入仍然有效(即,您可以选择要上载的文件),但它的工作方式与标准输入字段类似,浏览器只提交文件名(例如。my-image.png) 而不是实际的文件本身(PHP在$_FILES).

因此,请确保表单标记具有该属性enctype="multipart/form-data":

<form method="post" action="options.php" enctype="multipart/form-data">
    ...
</form>

相关推荐

在发送到options.php之前分析表单值

我正在开发一个自定义插件,它需要为远程API输入身份验证数据,并且需要保存这些数据。我想在保存到db之前对其进行加密。我添加了一个设置页面,其中包含:<form method=\"post\" action=\"options.php\"> <!-- form fields here... --> </form> 而不是将每个选项保存为{wp_table_prefix}_options 表中,我希望它们仅保存为一行中的对象,因此name 属