Skip to content
Switch branches/tags

Latest commit

… 8 new string functions (#2812)

* Introduce php-compat helper that currently contains polyfills for PHP 8 new string functions"

* Simplify str_starts_with

Co-authored-by: Volodymyr Kolesnykov <>
Co-authored-by: Jesse Greathouse <>

Git stats


Failed to load latest commit information.
Latest commit message
Commit time
Nov 10, 2016
Jan 24, 2022

VIP Go mu-plugins

This is the development repo for mu-plugins on VIP Go.


Enterprise Search

Please, visit our Enterprise Search documentation to learn more.


Local Dev

We recommend using the VIP local development environment for local development:

In order to use mu-plugins code in a "hot-reload" fashion you need to specify the local folder where this repository is cloned to. For example:

vip dev-env create --mu-plugins $(pwd)

You will be prompted to configure other options of the environment. When the environment is created you can start it with:

vip dev-env start


PHP Lint
npm run phplint

We use eslines to incrementally scan changed code. It will automatically run on pre-push (see .huskyrc.json).

This is also run on Circle CI for all PRs.

If you want to scan the entire codebase:

npm run phpcs

If you don't have the Lando-based environment running (e.g. in a CI context), we have a script that runs unit tests in a self-contained Docker environment. To run these tests, execute the following from the project root:


You can also filter by test name.

./bin/ --filter test__rate_limit_ep_query_integration__clears_start_correctly

See ./bin/ for more options.


PHP Linting and PHPUnit tests are run by Circle CI as part of PRs and merges. See .circleci/config.yml for more.

Core tests

We run core tests as part of the CI pipeline. There are many failures when running with mu-plugins so we had to ignore several tests. To add another test there check bin/

To investigate failing test locally you can do following (buckle up as this is not so easy:()):

  1. While in your mu-plugins folder do MU_PLUGINS_DIR=$(pwd)

  2. Switch to where you want to checkout core code e.g. cd ~/svn/wp

  3. Checkout the core code (pick the latest version): svn co --quiet --ignore-externals .

  4. Create test config: cp wp-tests-config-sample.php wp-tests-config.php && sed -i 's/youremptytestdbnamehere/wordpress_test/; s/yourusernamehere/root/; s/yourpasswordhere//; s/localhost/' wp-tests-config.php

  5. Build core npm ci && npm run build

  6. Export env variable export WP_TESTS_DIR="$(pwd)/tests/phpunit"

  7. Start local DB: docker run -d -p 3306:3306 circleci/mariadb:10.2

  8. Create empty DB mysqladmin create wordpress_test --user="root" --password="" --host="" --protocol=tcp

  9. Copy over MU-plugins cp -r $MU_PLUGINS_DIR build/wp-content/mu-plugins

  10. Run the test you want (in this case test_allowed_anon_comments) $MU_PLUGINS_DIR/vendor/bin/phpunit --filter test_allowed_anon_comments



A new release of the plugin consists of all those pull requests that have been merged since the last release and have been deployed to Staging (i.e. have the [Status] Deployed to staging label. Releases are named after the day they are released plus a minor version:


e.g: 20210917.0

Releases are created using GitHub's releases and are effectively a tag in the GitHub repository. Previous releases can be found here.

To create a new release, please use the create-release script. The script requires the GitHub CLI to be installed in the computer. It will create the new release, properly tagged and with the expected description.

cd vip-go-mu-plugins



For Automattic Use: Instructions are in the FG :)


This is a repo primarily meant for local non-development use.

Every commit merged into master is automatically pushed to the public copy at Automattic/vip-go-mu-plugins-built. This is handled via CI by the script script, which builds pushes a copy of this repo and expanded submodules.