首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使post附件在save_post操作上可用?

在WordPress中,当我们在后台编辑文章并点击保存时,会触发save_post操作。然而,默认情况下,$_FILES数组中的附件信息在save_post操作中是不可用的。要使post附件在save_post操作上可用,我们可以使用以下方法:

  1. 首先,我们需要在文章编辑页面添加一个隐藏字段,用于存储附件的ID。可以使用add_meta_box函数来添加一个自定义的元框,将其放置在文章编辑页面的合适位置。在元框中,我们可以使用wp_nonce_field函数来生成一个安全的隐藏字段,并使用get_post_meta函数获取已上传附件的ID。
代码语言:php
复制
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');
  1. 接下来,我们需要在save_post操作中处理附件。我们可以使用wp_handle_upload函数来处理上传的附件,并将其保存到服务器上。然后,我们可以将附件的ID保存到之前添加的隐藏字段中。
代码语言:php
复制
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存储在隐藏字段中。这样,我们就可以在后续的操作中使用这些附件了。

请注意,以上代码仅为示例,您可能需要根据实际需求进行适当的修改和调整。另外,腾讯云提供了丰富的云计算产品和服务,您可以根据具体需求选择适合的产品。具体产品介绍和链接地址,请参考腾讯云官方文档。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

利用 phar 拓展 php 反序列化漏洞攻击面

通常我们在利用反序列化漏洞的时候,只能将序列化后的字符串传入unserialize(),随着代码安全性越来越高,利用难度也越来越大。但在不久前的Black Hat上,安全研究员Sam Thomas分享了议题It’s a PHP unserialization vulnerability Jim, but not as we know it,利用phar文件会以序列化的形式存储用户自定义的meta-data这一特性,拓展了php反序列化漏洞的攻击面。该方法在文件系统函数(file_exists()、is_dir()等)参数可控的情况下,配合phar://伪协议,可以不依赖unserialize()直接进行反序列化操作。这让一些看起来“人畜无害”的函数变得“暗藏杀机”,下面我们就来了解一下这种攻击手法。

05
领券