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

Tags :

Classés dans :