O problema real que tenho ao usar o $wp_filesystem
está definindo os caminhos corretos. Na documentação do sistema de arquivos, o caminho (por exemplo, para o diretório de plugins) geralmente é definido como este: $plugin_path = str_replace(ABSPATH, $wp_filesystem->abspath(), MY_PLUGIN_DIR);
Eu tentei entender isso, mas eu falhei porque não consegui descobrir o que $wp_filesystem->abspath()
deveria realmente retornar. Quando eu var_dump()
eu fico false
. Alguém poderia me explicar por que não podemos simplesmente usar a variável ABSPATH
em funções como $wp_filesystem->put_contents()
?
Se você verificar a origem do 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; }
… você verá que o objective principal é obter o caminho “calculado” para o método do sistema de arquivos. Por exemplo, com FTP, o caminho raiz da conta FTP pode ser mais profundo / mais baixo na raiz do documento real . Outros methods também não podem funcionar com apenas ABSPATH
, daí a chamada find_folder()
(que é realmente um wrapper para search_for_folder()
que faz o trabalho real).
Por isso, por que você viu algo como:
$plugin_path = str_replace(ABSPATH, $wp_filesystem->abspath(), MY_PLUGIN_DIR);
… desde que MY_PLUGIN_DIR
tenha sido construído (em algum ponto) com base em ABSPATH
, mas, dentro do contexto da API do sistema de arquivos, esse caminho pode ser inválido – então substituímos ABSPATH
pelo abspath()
calculado abspath()
antes de escrever.