重命名带有自定义WP_CONTENT_DIR的上载文件夹

时间:2016-05-31 作者:dan9vu

出于版本控制目的,我们的客户端有一个WordPress应用程序,其目录结构如下:

.
|_____app
|  |_____themes
|  |_____plugins
|  |_____uploads
|_____index.php
|_____WordPress
|_____wp-config.php
在中wp-config.php:

define(\'WP_CONTENT_DIR\', __DIR__ . \'/app\');
define(\'WP_CONTENT_URL\', WP_HOME . \'/app\');
现在,她想重命名应用程序目录中的所有默认WordPress文件夹。

具有pluginsthemes 我们可以使用WP_PLUGIN_DIRregister_theme_directory(). 但不知何故,重命名并不容易uploads 文件夹

我尝试了许多修改UPLOADS 常量,但它没有帮助,因为自定义上载文件夹总是在WordPress 目录

有没有办法解决这个问题?

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

在四处挖掘之后,我最终使用了upload_dir 滤器

这是我试过的functions.php 要更改uploadsmedia. 希望它也能帮助别人:)

 add_filter(\'upload_dir\', function($uploads)
 {
     $custom = [];

     foreach ($uploads as $key => $value) {
         if ( false !== strpos($value, \'/app/uploads\') ) {
             $custom[$key] = str_replace(\'/app/uploads\', \'/app/media\', $value);
         } else {
             $custom[$key] = $value;
         }
     }

     return $custom;
 });
非常感谢@gmazzap 有关指南和建议upload_dir 滤器

SO网友:gmazzap

如果你看看_wp_upload_dir, 您将看到:

if (defined(\'UPLOADS\') && ! (is_multisite() && get_site_option(\'ms_files_rewriting\'))) {
    $dir = ABSPATH.UPLOADS;
    $url = trailingslashit($siteurl).UPLOADS;
}
所以UPLOADS 只能用于定义相对于ABSPATH, 我想是的/WordPress 安装程序中的文件夹。

在相同的函数中,您可以看到如果get_option(\'upload_path\')get_option(\'upload_url_path\') 为空,上载文件夹的路径和URL分别设置为,WP_CONTENT_DIR.\'/uploads\'WP_CONTENT_URL.\'/uploads\' 这对你来说应该很好,只要你定义WP_CONTENT_DIRWP_CONTENT_URL 就像在OP。

如果您不定义UPLOADS而且uploads文件夹仍然没有解析为/app/uploads, 很可能您的数据库中包含\'upload_path\'\'upload_url_path\' 选项。

您有两种可能性:

删除这些选项使用"pre_option_{$option}" 要强制的筛选器get_option() 为这些选项返回空的内容(但不是false 否则过滤器将被忽略)

add_filter(\'pre_option_upload_path\', \'__return_empty_string\');
add_filter(\'pre_option_upload_url_path\', \'__return_empty_string\');
有上述代码,且无任何UPLOADS 定义的常量,只要您定义WP_CONTENT_DIRWP_CONTENT_URL, 应正确解析uploads文件夹。

如果没有发生这种情况,那么必须有某种东西作用于某些过滤器,例如upload_dir.