问题描述
对于版本控制目的,我们的客户端有一个 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 文件夹。
使用 plugins
和 themes
,我们可以通过使用 WP_PLUGIN_DIR
和 register_theme_directory()轻松实现。但是,不知何故,重命名 uploads
文件夹并不容易。
我已经尝试过许多修改与 UPLOADS
常量,但它不能帮助,因为自定义上传文件夹总是创建在 WordPress
目录中。
有没有办法解决这个问题?
最佳解决方案
在挖掘之后,我最终用 upload_dir
过滤器。
这是我在 functions.php
中尝试将 uploads
更改为 media
。希望它可以帮助某人:)
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
过滤器的建议!
次佳解决方案
如果您查看_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_DIR
和 WP_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_DIR
和 WP_CONTENT_URL
,则应正确解析 uploads 文件夹。
如果没有发生这种情况,必须有某些过滤器,例如 upload_dir
。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。