在WordPress中,当我们在后台编辑文章并点击保存时,会触发save_post
操作。然而,默认情况下,$_FILES
数组中的附件信息在save_post
操作中是不可用的。要使post附件在save_post
操作上可用,我们可以使用以下方法:
add_meta_box
函数来添加一个自定义的元框,将其放置在文章编辑页面的合适位置。在元框中,我们可以使用wp_nonce_field
函数来生成一个安全的隐藏字段,并使用get_post_meta
函数获取已上传附件的ID。function add_attachment_meta_box() {
add_meta_box(
'attachment_meta_box',
'附件',
'render_attachment_meta_box',
'post',
'normal',
'high'
);
}
function render_attachment_meta_box($post) {
wp_nonce_field('attachment_meta_box', 'attachment_meta_box_nonce');
$attachment_id = get_post_meta($post->ID, 'attachment_id', true);
// 在这里显示附件信息或上传附件的表单
}
add_action('add_meta_boxes', 'add_attachment_meta_box');
save_post
操作中处理附件。我们可以使用wp_handle_upload
函数来处理上传的附件,并将其保存到服务器上。然后,我们可以将附件的ID保存到之前添加的隐藏字段中。function save_attachment_meta_box($post_id) {
if (!isset($_POST['attachment_meta_box_nonce']) || !wp_verify_nonce($_POST['attachment_meta_box_nonce'], 'attachment_meta_box')) {
return;
}
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if (!current_user_can('edit_post', $post_id)) {
return;
}
if (!isset($_FILES['attachment'])) {
return;
}
$attachment = $_FILES['attachment'];
$upload_overrides = array('test_form' => false);
$movefile = wp_handle_upload($attachment, $upload_overrides);
if ($movefile && !isset($movefile['error'])) {
$attachment_id = wp_insert_attachment(array(
'post_mime_type' => $movefile['type'],
'post_title' => sanitize_file_name($attachment['name']),
'post_content' => '',
'post_status' => 'inherit'
), $movefile['file'], $post_id);
if ($attachment_id) {
update_post_meta($post_id, 'attachment_id', $attachment_id);
}
}
}
add_action('save_post', 'save_attachment_meta_box');
通过以上步骤,我们成功地将post附件在save_post
操作上可用。在save_post
操作中,我们处理了附件的上传和保存,并将附件的ID存储在隐藏字段中。这样,我们就可以在后续的操作中使用这些附件了。
请注意,以上代码仅为示例,您可能需要根据实际需求进行适当的修改和调整。另外,腾讯云提供了丰富的云计算产品和服务,您可以根据具体需求选择适合的产品。具体产品介绍和链接地址,请参考腾讯云官方文档。
领取专属 10元无门槛券
手把手带您无忧上云