Remember to always check your PHP Error Logs. They contain the most important information related to issues your might encounter.

Common Questions

– js_composer: yes, it was used some time ago by Visual Editor, but not anymore
– wplr-tmp: yes, totally
– wpseo-redirects: if you are using redirections in Yoast SEO, you should not delete this
The plugin has been extremely optimized so now this depends mainly on your WordPress install and your server. With PHP, for each page load (and therefore for each asynchronous requests, in the case of my plugin), WordPress loads itself every time. All the plugins are also being loaded and might even run a task. Unfortunately, Media Cleaner cannot do anything about it. You can make it faster by checking out a few options, but the best is to enhance the system. I am trying to keep an article about accelerating WordPress here.
It would be way too dangerous. A bad update, the page builder disabled temporary or another mishap and the WordPress install will be basically destroyed. So it’s better not. Also, having this running in the background would slow down the site every time a visitor would load the page (which is really isn’t good), might also crashs. WordPress was not really made for running background tasks (it can only reacts on specific actions) so it’s better to avoid it with such a plugin as Media Cleaner.

That said, if you really want to run a scan in the background every once in a while, you can do it using WP-CLI, and manually create a task (cron tab) on your server. You can ask your developer or system administrator to do this.

Access Control (Roles)

By default, only the administror has access to the Cleaner Dashboard, and any user with the manage_options role (typically, the administrator) has access to the settings.

You can override the access to the Dashboard by adding a filter on wpmc_allow_usage. The following snippet will allow editors to access it.

add_filter( 'wpmc_allow_usage', function( $allow ) {
  return current_user_can( 'editor' ) || $allow;
} );

If you are interested in overring who can access the settings, you can add a filter on wpmc_allow_setup, it works exactly the same way.

Handling Issues for Developers

If you would like to handle special cases and additional detections of file usage, here are a few code snippets that you could use or adapt to your specific needs. You can add those snippets directly using the Code Snippets plugin (or add them into your functions.php file directly).

Images in category’s descriptions

add_action( 'wpmc_scan_once', 'wpmc_scan_once_post_categories', 10, 0 );

function wpmc_scan_once_post_categories() {
	global $wpdb;
	global $wpmc;
	$descs = $wpdb->get_col( "SELECT description FROM {$wpdb->term_taxonomy} WHERE taxonomy = 'category'" );
	foreach ( $descs as $desc ) {
		$urls = $wpmc->get_urls_from_html( $desc );
		$wpmc->add_reference_url( $urls, 'CONTENT (URL)' );

Overriding the Cleaner’s decisions

If you are a developer, you can have the last word on Media Cleaner’s decisions. For example, you might want to always set as used a Media which belongs to the administrator, or always set as non-used some filenames with contains the suffix tmp in it.

There are two hooks for this, and for both, you only need to return your final decision on the fact this media or file is being used.

Media Library Method

You need to hook into the wpmc_check_media filter. This hook will call you with those three arguments :

  • $in_use: The Media Cleaner decision.
  • $media_id: The Media ID.
  • $is_broken: If the physical file doesn’t exist.

Let’s say my user ID is 10, and I would like Media Cleaner to suppose that all my images are indeed in use. I could add the following custom snippet.

​add_filter( 'wpmc_check_media', function( $in_use, $media_id, $is_broken ) {
  $post = get_post( $media_id );
  if ( $post->post_author === 1 ) {
    return true;
  return $in_use;
}, 10, 3 );

Filesystem Method

You need to hook into the wpmc_check_file filter. This hook will call you with those two arguments :

  • $in_use: The Media Cleaner decision.
  • $file: The filepath.

Now here is the example of a code snippet that will mark all the .doc files as in-use.

add_filter( 'wpmc_check_file', function( $in_use, $file ) {
  $ext = pathinfo( $file, PATHINFO_EXTENSION );
  if ( $ext === 'doc' ) {
    return true;
  return $in_use;