在Wordpress网站上创建一个小插件时,我决定不使用媒体库,因为我只是想向内容添加一些小存根图像。我在帖子页面上使用创建了一些框,add_meta_box()并向其中添加了文件输入框。唯一的事情是Wordpress中的发布表单没有enctype =“ multipart / form-data”属性,因此它不会将文件传递给PHP中的$_FILES数组。
不可能通过Wordpress将enctype添加到表单声明中,因为没有钩子或动作可以执行此操作。因此,唯一的选择(而不是破解源代码)是使用JavaScript添加属性,并且由于我们已经加载了JQuery,因此我们可以利用它。
我们需要克服的最后一个问题是IE似乎不了解enctype属性,因此我们需要为IE添加encoding =“ multipart / form-data”。好消息是,对于同时添加enctype和encoding属性的任何浏览器(包括IE)都不会产生不良影响。
这是我用来添加enctype的代码,只需将其添加到您的插件即可。它检测您是否正在查看将创建或编辑帖子或页面的页面,然后将必要的JQuery添加到标题以将enctype属性添加到表单。
if (is_admin()) { $current_admin_page = substr(strrchr($_SERVER['PHP_SELF'], '/'), 1, -4); if ($current_admin_page == 'page' || $current_admin_page == 'page-new' || $current_admin_page == 'post' || $current_admin_page == 'post-new') { /** Need to force the form to have the correct enctype. */ function add_post_enctype() { echo "<script type=\"text/javascript\"> jQuery(document).ready(function(){ jQuery('#post').attr('enctype','multipart/form-data'); jQuery('#post').attr('encoding', 'multipart/form-data'); }); </script>"; } add_action('admin_head', 'add_post_enctype'); } }
该技术也适用于Wordpress之外的任何类似情况。