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.
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".