問題描述
對於版本控制目的,我們的客户端有一個 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。