Pourquoi utiliser WP_Filesystem ? WP_Filesystem est capable d’identifier les limitations en lecture / écriture de votre hébergement et de choisir la méthode adaptée pour l’accès aux fichiers (ftp par exemple), en toute sécurité. De plus, WP_Filesystem supporte trois usages différents de ftp (extension, sockets ou SSH). Dans certains cas, l’utilisateur devra s’authentifier pour accéder à ftp et WP_Filesystem permet de grandement simplifier ce cas.

Un tutoriel très complet sur le sujet : http://ottopress.com/2011/tutorial-using-the-wp_filesystem/

Exemple d’écriture d’un fichier sitemap.xml à la racine du répertoire d’installation de wordpress :

avec fopen, fwrite, fclose :

$fp = fopen( ABSPATH . 'sitemap.xml', 'w' );
fwrite( $fp, $sitemap );
fclose( $fp ); 

avec WP_Filesystem :

WP_Filesystem();
global $wp_filesystem;

$homedir = $wp_filesystem->abspath();
$file = trailingslashit( $homedir ) . 'sitemap.xml';
$wp_filesystem->put_contents( $file, $sitemap, FS_CHMOD_FILE );

Exemple de lecture d’une url distante (en l’occurrence une API Facebook) :

Avec file_get_contents :

$xml = file_get_contents( 'http://api.facebook.com/restserver.php?method=links.getStats&urls=' . $url ); 

Avec WP_Filesystem :

WP_Filesystem();
global $wp_filesystem;
$xml = $wp_filesystem->get_contents( 'http://api.facebook.com/restserver.php?method=links.getStats&urls=' . $url );

Important ! Si vous utilisez la classe WP_FileSystem hors de l’admin (donc dans une fonction appelée dans le frontend), il faut inclurele fichier wp-admin/includes/file.php sinon elle ne sera pas connue :

// Include WP_Filesystem
require_once(ABSPATH . 'wp-admin/includes/file.php');

Sources :

  • https://wordpress.stackexchange.com/questions/120273/converting-fopen-fwrite-operations-to-wp-filesystem
  • https://github.com/woocommerce/woocommerce/issues/6091