第1部分:表单处理首先,让我们修复上载表单处理。无论是表单还是上载,都不应将用户发送到专用PHP文件进行处理,因为:
然后,该文件必须引导WordPress使用WP API,将其与文件夹结构紧密耦合,并引入脆弱性,即使该插件已被禁用,该文件也会工作,引入了安全风险,无法再从其他地方修改和拦截表单处理代码,在缓存系统和性能方面存在许多缺点,WordPress是CMS,您应该让WordPress处理请求。你的工作是告诉it如何处理这些请求。
这就是处理表单的方式:
模板:
<form method="post">
<?php wp_nonce_field( \'allens_form\', \'allens_form_nonce\' ); ?>
<input type="hidden" name="allens_form" value="allens_form">
... form fields
</form>
在插件或主题中
functions.php
:
add_action( \'init\', \'allens_form_handler\');
function allens_form_handler() {
if ( empty( $_POST[\'allens_form\'] ) ) {
return; // this isn\'t a form submission
}
if ( ! wp_verify_nonce( $_POST[\'allens_form_nonce\'], \'allens_form\' ) ) {
return; // invalid or missing nonce! Something dodgy\'s going on here
}
// process form data
}
还要注意添加了nonce。这将大大提高表单的安全性,使其免受某些类型的攻击。考虑在这个网站上提出一个新的问题,以获得更全面的答案,即nonces是什么以及它们可以防止什么。
对AJAX使用相同的策略并使用AJAX端点文件可能很有诱惑力,但正如我前面提到的,出于类似的原因,这是一个坏主意。相反,请使用WP AJAX api,或注册REST api端点。
第2部分:上传视频
所有上传都在上传文件夹中。在许多系统上,文件夹可能位于不同的位置,并且可能是WordPress可以写入的文件系统中的唯一位置。插件文件夹应仅包含代码和资产,不应包含用户内容。
这里缺失的重要信息是帖子类型。
WordPress中的所有帖子都有“type”。帖子类型为“post”,页面类型为“page”,等等,它们都以相同的方式存储在数据库中。还有其他类型的帖子,但你应该感兴趣的是attachment
岗位类型。
当你将任何东西上传到媒体库时,它会被放在上传文件夹中,但WordPress不会在该文件夹中查找上传内容。相反,当上传时,它会创建一个类型为attachment
, 这些附件帖子就是你在管理区看到的。
附件帖子类型包含信息,例如附件的名称、在上载文件夹中的位置、文件的类型、作者以及其他帖子元数据,具体取决于媒体的类型。这些是您想要用于视频上载的内容。
由于帖子可以有父帖子,您会发现上传并插入帖子的图像具有这种关系。这些图像将是附件,附件帖子父级是它们出现的帖子。这也是特色图片的工作原理,贴子有一个自定义字段/贴子元,其中包含附件贴子的ID。所述帖子是特色图片的图片附件。
重要的是,在实现上传时,您会发现有几个功能非常方便,但您会发现最有用的是:
media_handle_upload( $file_id, $post_id, $post_data, $overrides );
如果给定适当的参数,此函数将获取上载的文件,将其移动到正确的位置,为您创建附件帖子,并用所有必要的元数据填充它。
然后如何处理附件帖子由您决定,但您需要将ID保存在有用的地方,并始终通过其ID进行引用。切勿存储附件的URL。要获取要在页面上显示的URL,请使用此功能:
$url = wp_get_attachment_url( $attachment_id );
确保检查功能是否正常工作,
$url
可能是错误对象,或
false
价值