将Enctype添加到Wordpress帖子和页面表单中

在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之外的任何类似情况。