Что именно возвращает файловая система $wp->abspath()?
Реальная проблема, с которой я сталкиваюсь при использовании $wp_filesystem
, заключается в определении правильных путей. В документации файловой системы путь (например, для каталога плагинов) обычно задается следующим образом: $plugin_path = str_replace(ABSPATH, $wp_filesystem->abspath(), MY_PLUGIN_DIR);
Я пытался понять это, но потерпел неудачу, потому что не смог выяснить, что $wp_filesystem->abspath()
на самом деле должно вернуться. Когда я var_dump()
это, я получаю false
. Может ли кто-нибудь объяснить мне, почему мы не можем просто использовать переменную ABSPATH
в таких функциях, как $wp_filesystem->put_contents()
?
1 answers
Если вы проверите источник abspath()
:
public function abspath() {
$folder = $this->find_folder(ABSPATH);
// Perhaps the FTP folder is rooted at the WordPress install, Check for wp-includes folder in root, Could have some false positives, but rare.
if ( ! $folder && $this->is_dir( '/' . WPINC ) )
$folder = '/';
return $folder;
}
.. вы увидите, что его основная цель - получить "вычисленный" путь для метода файловой системы. Например, при использовании FTP корневой путь учетной записи FTP может быть глубже/дальше по фактическому корню документа . Другие методы также могут не работать только с ABSPATH
, следовательно, вызов find_folder()
(который на самом деле является оболочкой для search_for_folder()
что делает реальную работу).
Следовательно, почему вы что-то видели например:
$plugin_path = str_replace(ABSPATH, $wp_filesystem->abspath(), MY_PLUGIN_DIR);
...поскольку MY_PLUGIN_DIR
будет построен (в какой-то момент) на основе ABSPATH
, но в контексте API файловой системы этот путь может быть недействительным - поэтому мы заменяем ABSPATH
вычисленным abspath()
перед записью.