Pour contrôler les versions, notre client dispose d’une application WordPress dotée d’une structure de répertoires semblable à celle-ci:
.
|_____app
| |_____themes
| |_____plugins
| |_____uploads
|_____index.php
|_____WordPress
|_____wp-config.php
Dans wp-config.php
:
define('WP_CONTENT_DIR', __DIR__ . '/app');
define('WP_CONTENT_URL', WP_HOME . '/app');
Maintenant, elle veut renommer tous les dossiers WordPress par défaut dans le répertoire app.
Avec plugins
et themes
, nous pouvons le faire facilement en utilisant WP_PLUGIN_DIR
et register_theme_directory () . Mais, d’une certaine manière, il n’est pas facile de renommer le dossier uploads
.
J'ai essayé de nombreuses modifications avec la constante UPLOADS
, mais cela ne peut pas aider car le dossier de téléchargement personnalisé est toujours créé dans le répertoire WordPress
.
Existe-t-il un moyen de résoudre ce problème?
Après avoir fouillé, j'ai fini par utiliser upload_dir
filter.
Voici ce que j'ai essayé dans functions.php
de changer uploads
en media
. J'espère que ça peut aider quelqu'un aussi :)
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;
});
Merci beaucoup à @gmazzap pour les instructions et la suggestion concernant le filtre upload_dir
!
Si vous regardez la source de _wp_upload_dir
, vous verrez:
if (defined('UPLOADS') && ! (is_multisite() && get_site_option('ms_files_rewriting'))) {
$dir = ABSPATH.UPLOADS;
$url = trailingslashit($siteurl).UPLOADS;
}
Donc, UPLOADS
ne peut être utilisé que pour définir un modificateur relatif à ABSPATH
, qui, je suppose, est le dossier /WordPress
dans votre configuration.
Dans la même fonction, vous pouvez voir que si get_option('upload_path')
et get_option('upload_url_path')
sont vides, le chemin et l'URL du dossier de téléchargement sont définis sur, respectivement, WP_CONTENT_DIR.'/uploads'
et WP_CONTENT_URL.'/uploads'
, ce qui devrait être parfaitement correct pour vous, tant que vous définissez WP_CONTENT_DIR
et WP_CONTENT_URL
comme dans OP.
Si vous ne définissez pas UPLOADS
at all et que le dossier uploads n'est toujours pas résolu en /app/uploads
, il est fort probable que votre base de données contienne some valeur pour les options 'upload_path'
et 'upload_url_path'
.
Vous avez 2 possibilités:
"pre_option_{$option}"
filters pour forcer get_option()
à renvoyer quelque chose de vide pour ces options (mais pas false
sinon les filtres seront ignorés).Pour la deuxième possibilité, le code pourrait être quelque chose comme ceci:
add_filter('pre_option_upload_path', '__return_empty_string');
add_filter('pre_option_upload_url_path', '__return_empty_string');
Avec le code ci-dessus en place et sans aucune constante UPLOADS
définie, tant que vous définissez WP_CONTENT_DIR
et WP_CONTENT_URL
, le dossier de téléchargement doit être résolu correctement.
Si cela ne se produit pas, il doit y avoir quelque chose qui agit sur some filter, par exemple upload_dir
.