SlickStack manages WordPress must-use plugins, supporting loader files, and the production object-cache drop-in through:
sudo bash /var/www/ss-install-wordpress-mu-pluginsThis workflow is also run by the complete ss-install process. It rebuilds the managed MU plugin directories rather than preserving arbitrary files already placed there.
- How MU plugins work
- Installation behavior
- Environment layout
- Required SlickStack files
- Production object cache
- Staging and development safeguards
- Default plugin set
- Custom plugin mode
- Managed directories and conflicts
- Vendored ZIP mirrors
- Updating vendored ZIPs
- Troubleshooting
- Scope
- Related guides
WordPress loads must-use plugins automatically from:
wp-content/mu-plugins/
They do not use the normal activation and deactivation controls in WP Admin. SlickStack installs an autoloader.php file because most managed plugins are stored in their own subdirectories rather than as top-level PHP files.
The MU plugin workflow also manages object-cache.php. That file is technically a WordPress drop-in rather than a must-use plugin, but it is installed by the same SlickStack script because it is part of the managed WordPress cache layer.
At the beginning of the workflow, SlickStack creates the required MU plugin directories and removes their existing contents for production and any enabled staging or development environment.
It then:
- installs the required
000-common.phpfile - installs
autoloader.php - installs or removes the production
object-cache.phpdrop-in - installs staging and development safeguards when those environments are enabled
- installs either the default plugin set or the configured custom plugin set
- runs
ss-workerso generated SlickStack constants and support files are current - restores managed MU plugin permissions
- purges PHP OPcache
- removes temporary download and extraction files
Run the workflow directly with:
sudo bash /var/www/ss-install-wordpress-mu-pluginsThe installed Bash aliases also include:
ss install mu plugins
ss install wordpress mu pluginsBecause the workflow clears the MU plugin directories first, do not store unmanaged custom files there and expect them to survive a reinstall.
The managed locations are:
| Environment | MU plugin directory | Object cache |
|---|---|---|
| Production | /var/www/html/wp-content/mu-plugins/ |
Optional managed /var/www/html/wp-content/object-cache.php |
| Staging | /var/www/html/staging/wp-content/mu-plugins/ |
Not installed |
| Development | /var/www/html/dev/wp-content/mu-plugins/ |
Not installed |
Production is always present. Staging and development paths are managed when their corresponding environments are enabled in ss-config.
The following files are installed independently from the selectable default or custom plugin set.
SlickStack installs:
wp-content/mu-plugins/000-common.php
in production and each enabled test environment.
This required plugin provides shared SlickStack behavior inside WordPress, including environment-aware login and admin information, the SlickStack status dashboard, selected warnings and toolbar features, generated server constants, and other common integration behavior.
The installer replaces domain and whitelabel placeholders before copying the file. ss-worker then refreshes the generated SlickStack constants used by the plugin.
Do not remove or edit the installed copy directly. The next MU plugin installation can replace it.
SlickStack installs:
wp-content/mu-plugins/autoloader.php
in production and each enabled test environment.
The autoloader supports the directory-based plugin packages used by SlickStack, such as:
mu-plugins/force-https/force-https.php
Without the managed loader, WordPress normally loads only top-level PHP files directly from mu-plugins.
The MU plugin workflow downloads and manages the Memcached object-cache drop-in at:
/var/www/html/wp-content/object-cache.php
Installation is controlled by:
WP_OBJECT_CACHE="true"When the value is anything other than false, the drop-in is installed for production. When it is false, the managed production drop-in is removed.
Before installing the drop-in, SlickStack removes potentially conflicting production object-cache, Redis, and Memcached plugin paths from the normal wp-content/plugins directory.
The drop-in is not installed in staging or development. This avoids sharing a persistent object-cache namespace while test environments are synchronized or modified.
See Memcached and Caching for cache behavior and purge commands.
When staging or development is enabled, SlickStack installs these additional MU plugin packages into that environment:
disable-emails
disable-default-runner
disable-emails suppresses normal WordPress application email from test environments. This reduces the risk of copied production sites sending password resets, order messages, form notifications, or other email to real recipients.
disable-default-runner suppresses the default Action Scheduler runner in test environments. This reduces the risk of copied scheduled queues performing background application work as though the environment were production.
Before installing these packages, SlickStack removes normal-plugin copies with the same or older related names from the staging and development wp-content/plugins directories.
These safeguards do not make copied production data harmless. Protect test environments, remove sensitive data when appropriate, and verify important plugin behavior separately.
See Staging & Development for synchronization, shared uploads, indexing, and production-push risks.
Unless valid custom mode is selected, SlickStack installs these seven vendored plugin packages into production and each enabled test environment:
| Package | Managed purpose |
|---|---|
clear-caches |
Connects WordPress cache-clearing behavior to the managed cache layers |
disable-empty-trash |
Prevents WordPress from automatically emptying Trash |
disable-image-compression |
Keeps generated image quality at the configured uncompressed baseline |
disable-xml-rpc |
Blocks the WordPress XML-RPC interface and related pingback behavior |
force-https |
Keeps WordPress URLs and redirects aligned with HTTPS |
plugin-blacklist |
Applies SlickStack's managed plugin blacklist behavior |
repoman |
Supports managed plugin updates from approved Git repositories |
The installed directories are:
clear-caches/
disable-empty-trash/
disable-image-compression/
disable-xml-rpc/
force-https/
plugin-blacklist/
repoman/
The installer also removes normal-plugin copies and older conflicting namespaces before copying these packages into mu-plugins.
SlickStack can replace the default seven-package set with custom ZIP sources configured in ss-config.
Custom mode begins with:
WP_MU_PLUGINS="custom"
MU_PLUGIN_01_SOURCE="https://example.com/plugin.zip"
MU_PLUGIN_01_DIR="plugin-slug"Additional numbered source and directory variables exist through slot 20.
The required SlickStack files remain managed in custom mode:
000-common.phpautoloader.php- the production
object-cache.phpbehavior - staging and development safeguards
Custom mode replaces only the normal default seven-package branch.
Each custom source should be a directly downloadable ZIP whose extracted top-level directory matches the configured MU_PLUGIN_XX_DIR value. The directory name is also used as the temporary filename and final directory name.
Current limitation: The custom installer is an older, less defensive implementation. It iterates through all 20 numbered slots and copies custom packages into production, staging, and development paths. Partially populated configurations and servers without both test environments should therefore be tested carefully before relying on custom mode in production.
SlickStack does not validate arbitrary custom plugin code, compatibility, licensing, update safety, or trustworthiness. Use only sources you control or have reviewed.
The MU plugin directories are generated SlickStack state. Reinstallation can remove:
- manually uploaded MU plugins
- direct edits to managed plugins
- abandoned files from an older plugin version
- malware or unauthorized files placed in the managed directory
This replacement behavior keeps the expected plugin set predictable, but it means manual customization inside the directory is not persistent.
The installer also removes selected matching plugins from normal WordPress plugin directories to avoid loading the same functionality twice. This includes the default SlickStack packages, object-cache plugins, and staging or development safeguards.
Use the ss-config custom-plugin variables for supported custom packages rather than manually placing files into the managed MU plugin directory.
Most default plugin packages are not fetched directly from their standalone repositories during server installation. SlickStack keeps approved ZIP mirrors under:
modules/wordpress/mu-plugins/
The public download variables in bash/ss-functions.txt point to those committed ZIP files. This keeps server installation independent from live GitHub release API lookups, which can fail because of rate limits or temporary network conditions.
Each default ZIP is expected to contain a clean matching top-level directory, for example:
force-https.zip
└── force-https/
└── force-https.php
The module directory also contains additional optional or historical packages that are not necessarily installed by the current default workflow.
git-updater.zip is an explicitly approved external mirror sourced from afragen/git-updater, but it is not part of the default seven-package installer set.
Vendored ZIP files should be updated in the SlickStack repository before servers consume them.
The manual GitHub Actions workflow documented in GitHub Workflows:
- finds the latest tagged version from each approved source repository
- compares it with the version in the committed ZIP
- downloads the tagged source archive when an update is needed
- normalizes the top-level directory name
- rebuilds and verifies the ZIP
- commits only changed packages
The workflow currently covers the seven default plugin ZIPs plus the approved afragen/git-updater mirror. Other optional or historical packages remain outside that workflow unless their source is explicitly reviewed and added.
Server installs should continue using the committed SlickStack mirrors rather than performing live release lookups.
List the managed files:
sudo find /var/www/html/wp-content/mu-plugins -maxdepth 2 -type f -printCheck staging or development when enabled:
sudo find /var/www/html/staging/wp-content/mu-plugins -maxdepth 2 -type f -print
sudo find /var/www/html/dev/wp-content/mu-plugins -maxdepth 2 -type f -printConfirm the production object-cache drop-in:
sudo ls -l /var/www/html/wp-content/object-cache.phpRebuild only the managed MU plugin layer:
sudo bash /var/www/ss-install-wordpress-mu-pluginsAfter rebuilding:
- review the command output for failed downloads or extraction errors
- confirm
000-common.phpandautoloader.phpexist - confirm the expected default or custom directories exist
- confirm staging and development safeguards exist when those environments are enabled
- confirm WordPress and WP Admin load normally
- purge or rebuild additional caches only when the affected layer requires it
Do not run the complete ss-install merely to repair one missing MU plugin unless broader stack reconciliation is also required.
SlickStack manages a specific MU plugin layout for its WordPress environments. It is not a general WordPress plugin marketplace, dependency manager, Composer workflow, or arbitrary release API client.
Normal plugins installed through WP Admin or WP-CLI remain separate from this managed MU plugin layer, except when SlickStack removes known conflicting copies during reconciliation.