Что именно возвращает файловая система $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()?

Author: phpheini, 2016-05-13

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() перед записью.

 1
Author: TheDeadMedic, 2016-05-14 18:14:43