web-dev-qa-db-fra.com

Comment définir le chemin avec WP_Filesystem et ftp base/chroot

Dans mon thème, je vais utiliser WP_Filesystem pour écrire un fichier, par exemple:

$file = get_template_directory().'/library/assets/css/wpless2css.css';

Ce qui sort quelque chose comme /home/user/domain/http_docs/wp-contents/theme/mytheme/library/assets/css/wpless2css.css

Cela fonctionnera sauf si l'utilisateur ftp sera chrooté sur /home/user/domain/ (sur certains serveurs?).

Dans le cas d'un chroot, le WP_Filesystem ne peut pas trouver $file.

Une solution semble définir FTP_PATH dans wp-config.php en /home/user/domain/ et utiliser:

if(FTP_BASE) $file =  str_replace(FTP_BASE,'',get_template_directory()).'/library/assets/css/wpless2css.css';

Je recherche une solution plus robuste et un support pour les différents systèmes de permissions possibles.

3
Bass Jobsen

Après avoir changé FTP_BASE dans mon wp-config, j’ai trouvé la fonction de mise à jour de WP cassée. Ensuite, je réalise que la fonction de mise à jour fonctionne de la même manière et n’a besoin d’aucun réglage supplémentaire. Dans wp-admin/includes/update-core.php, j'ai trouvé l'utilisation de $wp_filesystem->wp_content_dir(). Cela résout mon problème aussi.

Sur http://xref.wordpress.org/branches/3.8/WordPress/Filesystem/WP_Filesystem_Base.html , vous trouverez une liste des fonctions utiles possibles:

string wp_content_dir () 
string wp_lang_dir () 
string wp_plugins_dir () 
string wp_themes_dir ([string $theme = false])

En fait, @otto m'a donné la réponse plus tôt ( en utilisant wp_filesystem dans des plugins ), voici ce qu'il a écrit:

Lorsque vous utilisez $ wp_filesystem, il existe un appel de fonction pratique pour obtenir le chemin du répertoire de contenu: $ wp_filesystem-> wp_content_dir () ;. Vous devez utiliser cette fonction car le chemin du répertoire "distant" peut être différent du chemin du répertoire "local".

1
Bass Jobsen