我可以为每个用户更改媒体上载位置吗?

时间:2016-09-13 作者:M.mik

您好,我正在使用最新的WP版本,与WooCommerce一起使用。

我有一个插件,允许用户从产品页面上传图像。图像作为存档zip文件上载。

我需要用户可以选择使用插件对媒体库中的图像进行特效,例如:

InstaFX

问题是,使用该插件上载的所有图像zipped, 因此,它们不在数据库中。所以wordpress不知道这些图片是否在服务器上,也不知道是谁上传的。

因此,我编写了一个小PHP脚本,将所有文件提取到媒体文件夹。

现在的问题是,所有用户都可以看到该文件夹中的媒体。

是否有办法编写一个使用用户名的小插件,并告诉WP该用户的媒体文件夹与用户名位于同一文件夹中。示例:

username: testusrand何时testusr 转到媒体库wordpress,告知该用户的文件夹位于“uploads/testusr“”

因此,用户只能看到自己的图像。

我知道我可以改变wp-config.php 但这是一个全局设置,我正在寻找每个用户的设置。

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

最简单的方法是:

// $filename should be the path to a file in the upload directory.
$filename = \'2016/09/1.jpg\';

// The ID of the post this attachment is for.
$parent_post_id = 32;

// Check the type of file. We\'ll use this as the \'post_mime_type\'.
$filetype = wp_check_filetype( basename( $filename ), null );

// Get the path to the upload directory.
$wp_upload_dir = wp_upload_dir();

// Prepare an array of post data for the attachment.
$attachment = array(
    \'guid\'           => $wp_upload_dir[\'url\'] . \'/\' . basename( $filename ), 
    \'post_mime_type\' => $filetype[\'type\'],
    \'post_title\'     => preg_replace( \'/\\.[^.]+$/\', \'\', basename( $filename ) ),
    \'post_content\'   => \'\',
    \'post_status\'    => \'inherit\'
);

// Insert the attachment.
$attach_id = wp_insert_attachment( $attachment, $filename, $parent_post_id );

// Make sure that this file is included, as wp_generate_attachment_metadata() depends on it.
require_once( ABSPATH . \'wp-admin/includes/image.php\' );

// Generate the metadata for the attachment, and update the database record.
$attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
wp_update_attachment_metadata( $attach_id, $attach_data );

set_post_thumbnail( $parent_post_id, $attach_id );
使用这个工作很好唯一的问题是没有缩略图,除了工作很好

相关推荐

Upload media only to DB

我使用的是最新的WordPress(5.6),据我所知,没有将媒体直接上传到DB的可见设置。是否有这样一个隐藏的选项,或者WordPress不支持DB作为媒体存储而不是wp-content/uploads?我希望使用DB作为优先(或唯一,如果可能的话)存储,而不是文件系统,然后直接从DB加载媒体(如post映像)。