Call to a member function put_contents() on a non-object

I have a plugin and I am creating a css file in wp_content.

I used this:

Read More
$this->content_dir = WP_CONTENT_DIR . "/some_folder";

$path = $this->content_dir . 'options.css';
$css='some string';
global $wp_filesystem; 
if(!$wp_filesystem->put_contents( $path, $css, 0644) ) {
    return __('Failed to create css file');
}

However I get this error:

Fatal error: Call to a member function put_contents() on a non-object

var_dump($css) return string.

Does put_contents write to an existing file or does it create a file like file_put_contents does?

I am looking for an equivalent of this:

if(!file_put_contents($path, $css)){
    return __('Failed to create css file');
};

Thank you!

Related posts

2 comments

  1. Initialize the WP filesystem and no more using file_put_contents function. Try this:

    [...]
    
    global $wp_filesystem;
    // Initialize the WP filesystem, no more using 'file-put-contents' function
    if (empty($wp_filesystem)) {
        require_once (ABSPATH . '/wp-admin/includes/file.php');
        WP_Filesystem();
    }
    
    if(!$wp_filesystem->put_contents( $path, $css, 0644) ) {
        return __('Failed to create css file');
    }
    
  2. require_once( ABSPATH . 'wp-admin/includes/file.php' ); // you have to load this file
    
    global $wp_filesystem;
    $upload_dir = wp_upload_dir(); // Grab uploads folder array
    $dir = trailingslashit( $upload_dir['basedir'] )  . 'cutomizer-css/'; // Set storage directory path
    WP_Filesystem(); // Initial WP file system
    $wp_filesystem->mkdir( $dir ); // Make a new directory folder if folder not their
    
    $wp_filesystem->put_contents( $dir . 'news24-customize.css', $css, 0644 ); // Finally, store the file :D
    

    Add above code in functions.php. After that enqueue that style

    $uploads = wp_upload_dir();
    wp_enqueue_style( 'newstweentyfour-customize', trailingslashit($uploads['baseurl']) . 'newstweentyfour-customize.css', array()  );
    

    Its works i have tested..

Comments are closed.