Переименовать папку ЗАГРУЗКИ с пользовательским КОНТЕНТОМ 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.

Есть ли какие-либо способы обойти эту проблему?

Author: wpclevel, 2016-05-31

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 фильтру!

 5
Author: wpclevel, 2017-04-13 12:37:46

Если вы посмотрите на источник _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.

 4
Author: gmazzap, 2016-05-31 17:12:08