Переименовать папку ЗАГРУЗКИ с пользовательским КОНТЕНТОМ WP DIR
Для целей контроля версий у нашего клиента есть приложение 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
.
Есть ли какие-либо способы обойти эту проблему?
2 answers
Покопавшись, я пришел к выводу, что использую 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
можно использовать только для определения foder относительно 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
в все, и папка "Загрузки" по-прежнему не разрешена для /app/uploads
, очень вероятно, что ваша база данных содержит некоторое значение для параметров 'upload_path'
и 'upload_url_path'
.
У вас есть 2 возможности:
- удалите эти параметры
- использовать
"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
, папка загрузки должна быть разрешена правильно.
Если этого не произойдет, должно быть что-то, что действует на какой-то фильтр, например upload_dir
.