Uploading non-media files?

There are two ways that error can be triggered ( source ): user does not have unfiltered_upload capability; WP does not like file type or extension. Latter is checked by wp_check_filetype_and_ext() function ( source ) that filters return through wp_check_filetype_and_ext hook to allow validation of additional file types.

$wp_filesystem returns NULL. What are the dependencies?

$wp_filesystem is a global variable containing the instance of the (auto-)configured filesystem object after the filesystem “factory” has been run. To run the factory “over” the global variable (so to set it), just call the WP_Filesystem() function which is, guess what, undocumented in codex. At least the docblock contains some information and you can read … Read more

Moving wp-content outside of web root?

See Ben Word – How to Hide WordPress Summary: In the Roots Theme we’re taking several steps to help make it not so obvious that you’re using WordPress: Cleaning up the output of wp_head and removing the generator from RSS feeds Hiding /wp-content/ by rewriting static theme assets (CSS, JS, and images), rewriting the plugins … Read more