Wordpress媒体库的物理组织(Real Media Library插件)


22

Real Media Library文件夹结构

介绍。

在上面的屏幕截图中,您可以看到使用高级插件Real Media Library构建的文件夹结构。现在,我想创建一个扩展插件,该插件可以将文件夹结构组织为物理文件夹结构 -RML只是可视结构。

更新#2(2017-01-27):找出答案!

看看我创建了免费扩展插件的wordpress媒体库的物理组织(Real Media Library插件)

更新#1(2016-12-14):首次成功:自定义缩略图上传文件夹

现在,我创建了另一个插件Real Thumbnail Generator,该插件可让您创建自定义缩略图上传文件夹。看看这个截图:

Real Thumbnail Generator上传文件夹

为什么要自定义缩略图文件夹?自定义缩略图文件夹更易于维护,因为在这里,我们不需要维护数据库更新URL,因为缩略图仍位于同一位置(RML扩展名仍未更改)。

如果您想了解有关自定义缩略图生成器的更多信息,可以查看此线程,在这里我已经解释了一种技术方法自定义上传目录中的每个自定义图像大小?

请继续关注这个话题,因为从2017年初开始,我将继续开发RML扩展,该扩展允许RML和服务器上载文件夹之间的同步。该扩展还与Real Thumbnail Generator插件兼容,因此应该进行数据库更新。

原始帖子

我的推广目标。

目前,我在文件夹“ / Unorganized”中,这意味着它是文件夹/ wp-content / uploads /。当我将文件(如屏幕截图所示)移动到PDFs / SubDir文件夹时,该文件位于可视文件夹中。现在,我的扩展程序检测到与物理文件夹不同的文件夹,并显示一个小“按钮”,该按钮也允许用户物理移动它:

进行物理按键

用户现在单击按钮“ Physix it!”。并将文件移至/wp-content/uploads/pdfs/subdir/Another-Doc.pdf。我已经创建了移动过程:我读出了此附件的所有媒体文件(包括图像的缩略图),并将php 函数named($ old_file,$ new_file)与WP函数wp_mkdir_p()一起使用。wp_posts表中的GUID 和wp_postmeta中的元数据已更改。当所有文件都移动后,我将其称为:

<?php
do_action('RML/Physix/Moved', $meta, $id);
// $meta = Infos about the move process, see above screenshot
// $id = The attachment ID
?>

$ meta是一个数组:

在此处输入图片说明

键“重命名”包含所有重命名过程(例如,这里可以是图像的缩略图文件)。

问题:保证插件兼容性。

WordPress媒体库的主要问题(如果是)是,许多插件将对引用的引用保存为具有完整URL而不是附件ID的图像。这意味着,存在带有列的MySQL表,这些列包含指向给定文件的URL。如何保证所有引用与物理文件夹都是最新的?我认为这是不可能的。

一种可能的方法。

我加入了该动作,并使用SQL中的递归REPLACE语句更新了标准表,如wp_post-> post_content,...。

<?php    
/**
 * When a attachment is moved.
 * 
 * @hooked RML/Physix/Moved
 */
function physix_moved($meta, $id) {
    $rename = $meta["rename"];

    // Prepare array for recursive REPLACE
    $arr = array();
    foreach ($rename as $value) {
        $arr[] = array($value["old_url"], $value["new_url"]);
    }
    $rec = $this->recReplace($arr, "post_content"); // function is already finished
}
?>

$ rec变量现在是REPLACE-Statement:

REPLACE(post_content, 'https://example.io/wp-content/uploads/Another-Doc.pdf', 'https://example.io/wp-content/uploads/pdfs/subdir/Another-Doc.pdf')

顺便说一句:对于带有所有缩略图文件的图像(testimage.jpg),它看起来可能像这样:

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(post_content, 'https://example.io/wp-content/uploads/testimage-750x350.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-750x350.jpg'), 'https://example.io/wp-content/uploads/testimage-1170x855.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-1170x855.jpg'), 'https://example.io/wp-content/uploads/testimage-256x187.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-256x187.jpg'), 'https://example.io/wp-content/uploads/testimage-1024x748.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-1024x748.jpg'), 'https://example.io/wp-content/uploads/testimage-300x219.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-300x219.jpg'), 'https://example.io/wp-content/uploads/testimage-150x150.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-150x150.jpg'), 'https://example.io/wp-content/uploads/testimage.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage.jpg')

但是,如果它是数据库表中的序列化字符串(JSON),会发生什么?所以看起来像{ "image": "http:\/\/example.io\/wp-content\/uploads\/Another-Doc.pdf" }。我必须在REPLACE-Statement中添加什么?

现在,可以在包含图像URL的所有MySQL表中使用REPLACE-Statement。我考虑过要创建一个过滤器数组,插件可以在其中添加表,其余部分由我的扩展完成:

<?php
$tables = apply_filters("RML/Physix/Moved/Tables", array( // TODO: use $wpdb->prefix
    "wp_posts" => array("post_excerpt", "post_content"),
    "wp_postmeta" => array("meta_value")
    //...
));
?>

“移动”日志

我想创建一个“日志”,用户可以在其中撤消移动。如果用户看到图像损坏(例如在Slider Revolution插件中),则可以撤消对原始文件夹的移动。

您如何看待这个想法?有更好的解决方案吗?我希望我已经用一种很好的方式解释了一切!


9
您并不是要看到附件的文件夹结构,在很多情况下没有附件(也许文件甚至不在服务器上?S3 AWS CDN等),WordPress处理附件中的内容,而不是附件文件,以及在服务器上移动它们会适得其反。您最好使用自定义分类法和触发重定向的重写规则来做到这一点
Tom J Nowell

5
虽然这是一个关于清晰度/质量(+1努力)的极好的问题,但最终我们还是在这里处理了一个第三方插件,这被认为是不合时宜的-我认为没有人能够做到“迅速”为您提供帮助,而无需认真投资RML。
TheDeadMedic '16

@TheDeadMedic是的,这是正确的。但是我问这个问题的方式是,您知道它如何与RML中的动作一起工作。这个问题不是RML特定的,而是数据库特定的-如何解决url替换的问题。
MatthiasGünter,

2
再加上+1的努力–希望我们能有更多这样的问题……就像我们在早期那样。无论如何,上面概述了主要问题。为了使你的观点:能否请您提交的修改并解释理由为你想什么呢?到目前为止,执行这些文件系统任务没有任何意义。
kaiser

您如何处理这个@MatthiasGünter的?您设法找到解决方案了吗?
蒂姆·马隆

Answers:


1

免费的解决方案扩展“物理自定义上传文件夹”

很久以前,我开始打开此线程,现在有一个Real Media Library可用的扩展插件,它使您可以物理管理上载文件夹

在此处输入图片说明

查看此插件:https : //wordpress.org/plugins/physical-custom-upload-folder/

您知道wp-content / uploads文件夹吗?在那里,文件存储在基于年/月的文件夹中。这可能是一个非常复杂且繁琐的过程,尤其是在使用FileZilla这样的FTP客户端时。

移动已经上传的文件:当您在Real Media Library中移动文件时,此插件不允许物理移动文件,因为WordPress在不同位置使用URL。维持这样的过程非常困难。因此,这仅适用于新上载。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.