如何将原始文件名保存到数据库?

时间:2019-07-08 作者:Janina

当前Wordpress从图像的exif标题值中获取附件名称:

<?php
// Use image exif/iptc data for title and caption defaults if possible.
} elseif ( 0 === strpos( $type, \'image/\' ) && $image_meta = wp_read_image_metadata( $file ) ) {
    if ( trim( $image_meta[\'title\'] ) && ! is_numeric( sanitize_title( $image_meta[\'title\'] ) ) ) {
        $title = $image_meta[\'title\'];
    }
有没有办法将原始文件名保存到数据库中?我尝试了很多过滤器和挂钩,但没有任何结果。

https://developer.wordpress.org/reference/functions/media_handle_upload/

Possible solution 可以使用sanitize\\u file\\u name过滤器获取$filename\\u raw,并将其插入到具有已清理$filename的自定义表中。

为了稍后获得原始文件名,我们只需要在比较经过清理的文件名和附件文件名时查询自定义表。

我说得对吗?或者还有其他方法吗?

1 个回复
最合适的回答,由SO网友:Howdy_McGee 整理而成

将原始文件名保存在当前$_REQUEST 并在WordPress生成附件元数据时对其进行处理:

/**
 * Store original attachment filename in the current $_REQUEST superglobal
 * 
 * @param NULL
 * @param Array $file - Uploaded File Information
 * 
 * @return NULL
 */
function wpse342438_store_attachment_filename( $null, $file ) {

    $_REQUEST[\'original_filename\'] = basename( $file[\'name\'] );

    return $null;

}
add_filter( \'pre_move_uploaded_file\', \'wpse342438_store_attachment_filename\', 10, 2 );

/**
 * Save original filename if it exists in our $_REQUEST
 * 
 * @param Array $metadata           - Generated Attachment Metadata
 * @param Integer $attachment_id    - WordPress Attachment Post ID
 * 
 * @return Array $metadata
 */
function wpse342438_save_original_filename( $metadata, $attachment_id ) {

    if( ! empty( $_REQUEST[\'original_filename\'] ) ) {
        update_post_meta( $attachment_id, \'_original_filename\', sanitize_text_field( $_REQUEST[\'original_filename\'] ) );
    }

    return $metadata;

}
add_filter( \'wp_generate_attachment_metadata\', \'wpse342438_save_original_filename\', 10, 2 );
Thepre_move_uploaded_file 在您上传的文件从tmp目录移动到实际WordPress上传文件夹结构之前,应该触发钩子。这个wp_generate_attachment_metadata 每次在数据库中添加附件时,钩子都应该运行,以便创建相关的posmeta。如果original_filename 当我们到达这里时,密钥已经存在于请求中,我们可以设置它。

相关推荐

Custom CSS In Uploads Folder

我想知道上传文件夹中是否有自定义CSS文件。我从以前的开发人员那里继承了一个自定义主题,前端的大量样式都是从这个样式表派生出来的,它同样不在主题或插件文件夹中,而是wp-content/uploads 文件夹我正在努力找出它是如何推导出来的,但它确实存在。这是否被视为不良做法,或者是否有这样的用例?我相信之前的开发人员提到了Visual Composer或JS Composer以及编译更少的文件。。。但我对此不确定,他已经失去了联系,我想知道为什么我们要以这种方式使用样式表,因此这个问题是关于最佳实践的,