Thanks for your interest in contributing to MultiSyde!
This plugin explores improvements for the WordPress Multisite experience, especially around usability, visibility, and admin workflows. Whether you're here to fix a bug, suggest an enhancement, or build something new — you're welcome!
- Getting Started
- Development Setup
- Code Standards
- Creating a Pull Request
- Feature Structure
- Reporting Issues
- Code of Conduct
Before contributing, it's a good idea to familiarize yourself with:
- How WordPress Multisite works.
- The purpose of each feature module in the plugin.
You can explore the plugin’s features in the modules/ directory or by visiting the Feature Overview.
We recommend using the WordPress Environment for local development.
git clone git@github.com:inpsyde/multisyde.git
cd multisyde
composer install
npm install -g @wordpress/env
wp-env startYour environment will be available at http://localhost:8888
(Default credentials: Username: admin, Password: password)
Database credentials:
- User:
root - Password:
password
- PHP: Follow WordPress PHP Coding Standards
- JavaScript (if applicable): Follow WordPress JavaScript Coding Standards
- Use
phpcsandPHPStan(level 8) to validate your code.
composer run cs
composer run phpstan- Fork the repository on GitHub.
- Create a new branch:
git checkout -b feature/my-contribution
- Make your changes and commit them with meaningful messages.
- Run code quality tools before submitting:
composer run qa
- Push your branch and open a pull request against the
dev/mainbranch. Themainbranch is generated by CI fromdev/mainand must not be targeted or edited directly.
Please include in your PR:
- A clear description of what your change does
- Links to related issues or Trac tickets (if any)
- Screenshots or screencasts for UI-related features
- Notes on testing or impacts to existing functionality
Each feature is placed in its own directory under modules/ and follows a clear, modular structure to ensure ease of development, maintenance, and testing. Using LastUserLogin as an example:
The Feature class:
- Implements the
LoadableFeatureinterface. - Hooks into WordPress' Network Admin screens (
manage_users-network_columns,wp_login, etc.). - Defines constants (
COLUMN_KEY,META_KEY) that uniquely identify the feature's logic and storage. - Handles:
- Display of the custom column.
- Recording login time via
wp_loginaction. - Sortability by login date in the user table.
- Conditional rendering based on user permissions.
The module includes a dedicated README.md file that:
- Describes the purpose and functionality of the feature.
- Outlines how it works and key implementation details.
- Includes screenshots and practical use cases.
- Credits the original developer, if applicable.
Additional files may be included:
About.php: Provides metadata for the presenter or integration with feature discovery.CHANGELOG.md: Documents changes specific to the feature across versions.
If you run into bugs or want to suggest an improvement:
- Open a GitHub issue
- Clearly describe what’s happening and what you expected
- Include any error messages, reproduction steps, or environment details
We follow the WordPress Community Code of Conduct. Be respectful and inclusive in all your interactions.
Releases are built and published by the Release workflow. Nothing is published by pushing a tag.
- On
dev/main, bumpVersion:inmultisyde.php, plusStable tagand the changelog inreadme.txt, and merge. - Run Release from
dev/mainwith that version asVERSION.DRY_RUNis on by default: the run buildsmain, runs Plugin Check on the built package, tags it, and uploads the would-be SVN trunk as an artifact without committing to WordPress.org. Review it, then run Release again withDRY_RUNoff to publish. The GitHub release is created only by that publishing run.
A failing Plugin Check on the built package stops the release before anything is tagged. VERSION must be MAJOR.MINOR.PATCH. Every run, including a dry run, tags the built main with VERSION. A later run reuses that tag only while dev/main is unchanged; otherwise delete the tag first.
Thanks for helping improve MultiSyde! ❤️ — The Syde Team
