web-dev-qa-db-fra.com

Que retourne exactement $ wp_filesystem-> abspath ()?

Le vrai problème que je rencontre avec le $wp_filesystem est de définir les chemins corrects. Dans la documentation du système de fichiers, le chemin (par exemple pour le répertoire plugins) est généralement défini comme suit: $plugin_path = str_replace(ABSPATH, $wp_filesystem->abspath(), MY_PLUGIN_DIR);

J'ai essayé de comprendre cela, mais j'ai échoué parce que je ne pouvais pas savoir ce que $wp_filesystem->abspath() est réellement censé retourner. Lorsque je var_dump(), je reçois false. Quelqu'un pourrait-il m'expliquer pourquoi nous ne pouvons pas simplement utiliser la variable ABSPATH dans des fonctions telles que $wp_filesystem->put_contents()?

3
phpheini

Si vous extrayez la source de 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;
}

..vous verrez que son objectif principal est d’obtenir le chemin "calculé" pour la méthode du système de fichiers. Par exemple, avec FTP, le chemin racine du compte FTP peut être plus profond/plus bas que la racine du document . D'autres méthodes peuvent également ne pas fonctionner avec uniquement ABSPATH, d'où l'appel find_folder() (qui est en réalité un wrapper pour search_for_folder() qui effectue le travail réel).

D'où pourquoi vous avez vu quelque chose comme:

$plugin_path = str_replace(ABSPATH, $wp_filesystem->abspath(), MY_PLUGIN_DIR);

... depuis MY_PLUGIN_DIR aura été construit (à un moment donné) sur la base de ABSPATH, mais dans le contexte de l'API du système de fichiers, ce chemin peut être invalide - nous remplaçons donc ABSPATH par la abspath() calculée avant l'écriture.

1
TheDeadMedic