Using PHPCS and WordPress standards

WordPress Standards

It is very important that when we write code for ourselves or for our clients, we use standards.

This alone does not guarantee good code or even correct code, but at least it makes our code more readable for us in the future or for any other programmer who has to modify it. I already talked about this about three years ago in the post Why we shouldn’t use spaghetti code in WordPress.

A couple of days ago, in the entry My tools for daily work 2020 I told you how to install PHPCS, but I am going to remind you the process with some modifications and more complete.

Installing PHPCS and standards

The first thing to do is to download PHP locally, which is required for some tools.

In my case I use Windows, which is what I will indicate, but the process for iOS and Linux is similar.

I download version 7.4.7 and unzip it to the C drive in the c:\php directory.

I add PHP to the system environment variables from Configuration → About → System Information → Advanced System Settings → Environment Variables and there under System Variables I add c:\php to the path.

I check that everything is correct by running a console and from any directory I see that php -v returns the correct version information.

I continue to install Composer for PHP package management. From any directory I check that Composer is running correctly by looking at its version with composer --version (we update composer with composer self-update)

I install globally PHP Code Sniffer (phpcs) directly from composer with the command:

# composer global require "squizlabs/php_codesniffer=*"

and again I check that it works from any directory by returning its version with phpcs --version

I perform these command checks from the cmd console, the PowerShell console and from the Git Bash console. Obviously from WSL it will not work unless we install it in our Ubuntu, since it is a different subsystem.

Now we install the WordPress standards for phpcs, for which I first check the standards installed with phpcs -i and I see that the WordPress ones are not there.

In my profile folder (or in another folder of your choice) I create a new folder for my new phpcs standards and I call it phpcs_standards, so it will be C:\Users_standards\wpcs

I go into this folder and clone the repo for example in the wpcs folder with the command:

# git clone wpcs

and then add the path to phpcs with the command:

# phpcs --config-set installed_paths C:\\Users\\carlos\\phpcs_standards\\wpcs

It is important in Windows to use the double slash, otherwise we will be escaping the character after the backslash.

And I check again with phpcs -i

Now that I have the WordPress standards configured, I go with the compatibility for PHP versions, for which I perform the same procedure as when installing the WordPress compatibility rules.

php error

I clone the repo for example in the phpc folder with the command:

# git clone phpc

I check the phpcs configuration, especially to see the path (added previously), since the parameter --config-set installed_pathsoverwrites any previous value:

# phpcs --config-show

and then add the path to phpcs with the command:

# phpcs --config-set installed_paths C:\\Users\\carlos\\phpcs_standards\\wpcs,C:\\Users\\carlos\\phpcs_standards\\phpc

this time I pass the previous path and after the comma the new path. I check again with phpcs -i

But we also have the PHPCompatibilityWP project that not only checks PHP compatibility, but also makes it specific for WordPress, excluding the back-fills and poly-fills provided by WordPress.

We are going to install it as before, cloning the repo, but first we see that among its requirements are PHP_CodeSniffer that we already have installed, PHPCompatibility that we also have installed and PHPCompatibilityParagonie that we are going to install together with this repo.

We execute the following:

# git clone phpcp
# git clone phpcwp
# phpcs --config-set installed_paths C:\\Users\\carlos\\phpcs_standards\\wpcs,C:\\Users\\carlos\\phpcs_standards\\phpc,C:\\Users\\carlos\\phpcs_standards\\phpcp,C:\\Users\\carlos\\phpcs_standards\\phpcwp

And we check again that the standards are already installed with phpcs -i

We can for example check from command line the compatibility of our files with php extension with the following command:

# phpcs -p *.php --standard=PHPCompatibilityWP
PHP console error

Although the ideal is to check directly on the fly from the editor itself.

Updating PHPCS and standards

To update phpcs we execute:

# composer global require squizlabs/php_codesniffer

To update the WordPress standards we go into the directory where we cloned the standards and get the latest version:

# cd C:\Users\carlos\phpcs_standards\wpcs
# git pull

To update PHP Compatibility we perform the same process in the directory we cloned over:

# cd C:\Users\carlos\phpcs_standards\phpc
# git pull

The same with PHPCompatibilityWP and PHPCompatibilityParagonie:

# cd C:\Users\carlos\phpcs_standards\phpcp
# git pull
# cd C:\Users\carlos\phpcs_standards\phpcwp
# git pull

If you get the following error when checking PHP version compatibility phpcs: Referenced sniff “PHPCS23Utils” does not exist change the PHPCompatibility repo branch to master and it should fix the problem (we change to master in both wpcs and phpc with git switch master).

PHPCompatibility error

Rule exceptions

If we do not want to be warned of an error, such as not using a version in our scripts or stylesheets to avoid the query string with the version number in our file, we can first see which rule we should ignore, by running pcpcs for our file with the WordPress standard:

# phpcs -s --standard=WordPress-Extra nuestro-archivo.php

And it will show us at the end and in brackets the rule to ignore, in our case WordPress.WP.EnqueuedResourceParameters.MissingVersion that we will put in our phpcs.ruleset.xml file of our project:

<rule ref="WordPress-Extra">
	<exclude name="WordPress.WP.EnqueuedResourceParameters.MissingVersion" />

To show us the errors of the standards as we are writing in our editor (in my case Visual Studio Code), if we have everything well configured, we only have to install the extension in the editor, in this case the one called phpcs.

We have several configuration options, which, remember, can be applied globally for all our projects or for a specific project.

And finally, I leave you an example of a configuration file of rules of phpcs for a WordPress plugin that checks that the text_domain always be cl-menu-cache, I also ignore the missing version when queuing CSS and JS files (better for caching and something that many WPO testers ask us to do) and I test the compatibility of PHP versions from 7.4 onwards:

<?xml version="1.0"?>
<ruleset name="CL Menu Cache WordPress Plugin Coding Standards">

	<description>A custom set of code standard rules to check for WordPress plugin CL Menu Cache.</description>

	<rule ref="WordPress-Core" />
	<rule ref="WordPress-Docs" />
	<rule ref="WordPress-Extra" />

	<rule ref="WordPress.WP.I18n">
			<property name="text_domain" type="array" value="cl-menu-cache" />

	<rule ref="WordPress-Extra">
		<exclude name="WordPress.WP.EnqueuedResourceParameters.MissingVersion" />

	<!-- Run against the PHPCompatibilityWP ruleset -->
	<rule ref="PHPCompatibilityWP"/>

	<!-- Check for cross-version support for PHP 7.4 and higher -->
	<config name="testVersion" value="7.4-"/>


Updated 12/07/2023

If phpcs gives us an error ERROR: Referenced sniff "Universal.WhiteSpace.DisallowInlineTabs" does not exist we must go to the directory where we have installed the WordPress standards (wpcs if we follow the above instructions) and switch to the main branch (master in this case with git switch master) and we should work without error:

phpcs error
Changing git branch to main

Update 07/21/2023: WooCommerce

We install the WooCommerce standards, although the ideal would be through composer as indicated in the repo, we will continue as above:

# git clone woocs
# phpcs --config-set installed_paths C:\\Users\\carlos\\phpcs_standards\\wpcs,C:\\Users\\carlos\\phpcs_standards\\phpc,C:\\Users\\carlos\\phpcs_standards\\phpcp,C:\\Users\\carlos\\phpcs_standards\\phpcwp,C:\\Users\\carlos\\phpcs_standards\\woocs\\src

In this case the path to be added has src at the end of it.

Join my superlist ;)

I won't share your details with anyone or bombard you with emails, only when I publish a new post or when I have something interesting to share with you.

Leave a Comment