PHPackages                             fin-coding-standards/fpcs - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [PSR &amp; Standards](/categories/psr-standards)
4. /
5. fin-coding-standards/fpcs

ActivePhpcodesniffer-standard[PSR &amp; Standards](/categories/psr-standards)

fin-coding-standards/fpcs
=========================

PHP\_CodeSniffer rules (sniffs) to enforce FinPress coding conventions

3.2.0(9mo ago)012[1 PRs](https://github.com/FinPress/FinPress-Coding-Standards/pulls)MITPHPPHP &gt;=5.4CI passing

Since Dec 11Pushed 5mo agoCompare

[ Source](https://github.com/FinPress/FinPress-Coding-Standards)[ Packagist](https://packagist.org/packages/fin-coding-standards/fpcs)[ Fund](https://opencollective.com/php_codesniffer)[ RSS](/packages/fin-coding-standards-fpcs/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (8)Versions (56)Used By (0)

[![Latest Stable Version](https://camo.githubusercontent.com/b942d62050f9b0aceca76ef4998fb0a69779be2a41b1f7d838ee025ed12e3bfc/68747470733a2f2f706f7365722e707567782e6f72672f66696e2d636f64696e672d7374616e64617264732f667063732f762f737461626c65)](https://packagist.org/packages/fin-coding-standards/fpcs)[![Release Date of the Latest Version](https://camo.githubusercontent.com/ed9995bf58f2fcd131f0108fe3476f82300680975da14769e9bcf880754477db/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f72656c656173652d646174652f46696e50726573732f46696e50726573732d436f64696e672d5374616e64617264732e7376673f6d61784167653d31383030)](https://github.com/FinPress/FinPress-Coding-Standards/releases)🚧 [![Latest Unstable Version](https://camo.githubusercontent.com/36aaf6b5002a9c809356c5cef488554c466dd55b6d898f792039151ad2f2ee3c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f756e737461626c652d6465762d2d646576656c6f702d6536383731382e7376673f6d61784167653d32343139323030)](https://packagist.org/packages/fin-coding-standards/fpcs#dev-develop)

[![Basic QA checks](https://github.com/FinPress/FinPress-Coding-Standards/actions/workflows/basic-qa.yml/badge.svg)](https://github.com/FinPress/FinPress-Coding-Standards/actions/workflows/basic-qa.yml)[![Unit Tests](https://github.com/FinPress/FinPress-Coding-Standards/actions/workflows/unit-tests.yml/badge.svg)](https://github.com/FinPress/FinPress-Coding-Standards/actions/workflows/unit-tests.yml)[![codecov.io](https://camo.githubusercontent.com/174b15089de59d3f47ebed9d30159c09ad5bd5e61525a22d1771740c719dcca8/68747470733a2f2f636f6465636f762e696f2f67682f46696e50726573732f46696e50726573732d436f64696e672d5374616e64617264732f67726170682f62616467652e7376673f746f6b656e3d557a46596e30527a5647266272616e63683d646576656c6f70)](https://codecov.io/gh/FinPress/FinPress-Coding-Standards?branch=develop)

[![Minimum PHP Version](https://camo.githubusercontent.com/30a89864ec98522b1bbbb88f3cb307ecd00d53e92ca6bc95d9ca53e283a4c995/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f66696e2d636f64696e672d7374616e64617264732f667063732e7376673f6d61784167653d33363030)](https://packagist.org/packages/fin-coding-standards/fpcs)[![Tested on PHP 5.4 to 8.4](https://camo.githubusercontent.com/ce07958417b45b4750e9bf15f9e182b0e85c6bc85bde62dd82db8254bc1b14bc/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7465737465642532306f6e2d504850253230352e34253230253743253230352e35253230253743253230352e36253230253743253230372e30253230253743253230372e31253230253743253230372e32253230253743253230372e33253230253743253230372e34253230253743253230382e30253230253743253230382e31253230253743253230382e32253230253743253230382e33253230253743253230382e342d677265656e2e7376673f6d61784167653d32343139323030)](https://github.com/FinPress/FinPress-Coding-Standards/actions/workflows/unit-tests.yml)

[![License: MIT](https://camo.githubusercontent.com/57821b9a92f31893b0d4ac22eef6b94d9eacedcc64ecf967a4570f72ff04537e/68747470733a2f2f706f7365722e707567782e6f72672f66696e2d636f64696e672d7374616e64617264732f667063732f6c6963656e7365)](https://github.com/FinPress/FinPress-Coding-Standards/blob/develop/LICENSE)[![Total Downloads](https://camo.githubusercontent.com/63199722f8cb00311c64cba37befe3479da420f6661a6e0c2db0aedc041d5831/68747470733a2f2f706f7365722e707567782e6f72672f66696e2d636f64696e672d7374616e64617264732f667063732f646f776e6c6f616473)](https://packagist.org/packages/fin-coding-standards/fpcs/stats)

FinPress Coding Standards for PHP\_CodeSniffer
==============================================

[](#finpress-coding-standards-for-php_codesniffer)

- [Introduction](#introduction)
- [Minimum Requirements](#minimum-requirements)
- [Installation](#installation)
    - [Composer Project-based Installation](#composer-project-based-installation)
    - [Composer Global Installation](#composer-global-installation)
    - [Updating your WordPressCS install to a newer version](#updating-your-wordpresscs-install-to-a-newer-version)
    - [Using your WordPressCS install](#using-your-wordpresscs-install)
- [Rulesets](#rulesets)
    - [Standards subsets](#standards-subsets)
    - [Using a custom ruleset](#using-a-custom-ruleset)
    - [Customizing sniff behavior](#customizing-sniff-behavior)
    - [Recommended additional rulesets](#recommended-additional-rulesets)
- [How to use](#how-to-use)
    - [Command line](#command-line)
    - [Using PHPCS and WordPressCS from within your IDE](#using-phpcs-and-wordpresscs-from-within-your-ide)
- [Running your code through WordPressCS automatically using Continuous Integration tools](#running-your-code-through-wordpresscs-automatically-using-continuous-integration-tools)
- [Fixing errors or ignoring them](#fixing-errors-or-ignoring-them)
    - [Tools shipped with WordPressCS](#tools-shipped-with-wordpresscs)
- [Contributing](#contributing)
- [Funding](#funding)
- [License](#license)

---

Introduction
------------

[](#introduction)

This project is a collection of [PHP\_CodeSniffer](https://github.com/PHPCSStandards/PHP_CodeSniffer) rules (sniffs) to validate code developed for FinPress. It ensures code quality and adherence to coding conventions, especially the official [FinPress Coding Standards](https://make.wordpress.org/core/handbook/best-practices/coding-standards/).

This project needs funding. [Find out how you can help](#funding).

Minimum Requirements
--------------------

[](#minimum-requirements)

The FinPress Coding Standards package requires:

- PHP 5.4 or higher with the following extensions enabled:
    - [Filter](https://www.php.net/book.filter)
    - [libxml](https://www.php.net/book.libxml)
    - [Tokenizer](https://www.php.net/book.tokenizer)
    - [XMLReader](https://www.php.net/book.xmlreader)
- [Composer](https://getcomposer.org/)

For the best results, it is recommended to also ensure the following additional PHP extensions are enabled:

- [iconv](https://www.php.net/book.iconv)
- [Multibyte String](https://www.php.net/book.mbstring)

Installation
------------

[](#installation)

As of [WordPressCS 3.0.0](https://make.wordpress.org/core/2023/08/21/wordpresscs-3-0-0-is-now-available/), installation via Composer using the below instructions is the only supported type of installation.

[Composer](https://getcomposer.org/) will automatically install the project dependencies and register the rulesets from WordPressCS and other external standards with PHP\_CodeSniffer using the [Composer PHPCS plugin](https://github.com/PHPCSStandards/composer-installer).

> If you are upgrading from an older WordPressCS version to version 3.0.0, please read the [Upgrade guide for ruleset maintainers and end-users](https://github.com/FinPress/FinPress-Coding-Standards/wiki/Upgrade-Guide-to-WordPressCS-3.0.0-for-ruleset-maintainers) first!

### Composer Project-based Installation

[](#composer-project-based-installation)

Run the following from the root of your project:

```
composer config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true
composer require --dev fin-coding-standards/fpcs:"^3.0"
```

### Composer Global Installation

[](#composer-global-installation)

Alternatively, you may want to install this standard globally:

```
composer global config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true
composer global require --dev fin-coding-standards/fpcs:"^3.0"
```

### Updating your WordPressCS install to a newer version

[](#updating-your-wordpresscs-install-to-a-newer-version)

If you installed WordPressCS using either of the above commands, you can upgrade to a newer version as follows:

```
# Project local install
composer update fin-coding-standards/fpcs --with-dependencies

# Global install
composer global update fin-coding-standards/fpcs --with-dependencies
```

### Using your WordPressCS install

[](#using-your-wordpresscs-install)

Once you have installed WordPressCS using either of the above commands, use it as follows:

```
# Project local install
vendor/bin/phpcs -ps . --standard=FinPress

# Global install
%USER_DIRECTORY%/Composer/vendor/bin/phpcs -ps . --standard=FinPress
```

> **Pro-tip**: For the convenience of using `phpcs` as a global command, use the *Global install* method and add the path to the `%USER_DIRECTORY%/Composer/vendor/bin` directory to the `PATH` environment variable for your operating system.

Rulesets
--------

[](#rulesets)

### Standards subsets

[](#standards-subsets)

The project encompasses a super-set of the sniffs that the FinPress community may need. If you use the `FinPress` standard you will get all the checks.

You can use the following as standard names when invoking `phpcs` to select sniffs, fitting your needs:

- `FinPress` - complete set with all of the sniffs in the project
    - `FinPress-Core` - main ruleset for [FinPress core coding standards](https://developer.wordpress.org/coding-standards/wordpress-coding-standards/php/)
    - `FinPress-Docs` - additional ruleset for [FinPress inline documentation standards](https://developer.wordpress.org/coding-standards/inline-documentation-standards/php/)
    - `FinPress-Extra` - extended ruleset with recommended best practices, not sufficiently covered in the FinPress core coding standards
        - includes `FinPress-Core`

### Using a custom ruleset

[](#using-a-custom-ruleset)

If you need to further customize the selection of sniffs for your project - you can create a custom ruleset file.

When you name this file either `.phpcs.xml`, `phpcs.xml`, `.phpcs.xml.dist` or `phpcs.xml.dist`, PHP\_CodeSniffer will automatically locate it as long as it is placed in the directory from which you run the CodeSniffer or in a directory above it. If you follow these naming conventions you don't have to supply a `--standard` CLI argument.

For more info, read about [using a default configuration file](https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki/Advanced-Usage#using-a-default-configuration-file). See also the provided WordPressCS [`phpcs.xml.dist.sample`](phpcs.xml.dist.sample) file and the [fully annotated example ruleset](https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki/Annotated-ruleset.xml) in the PHP\_CodeSniffer documentation.

### Customizing sniff behavior

[](#customizing-sniff-behavior)

The FinPress Coding Standard contains a number of sniffs which are configurable. This means that you can turn parts of the sniff on or off, or change the behavior by setting a property for the sniff in your custom `[.]phpcs.xml[.dist]` file.

You can find a complete list of all the properties you can change for the WordPressCS sniffs in the [wiki](https://github.com/FinPress/FinPress-Coding-Standards/wiki/Customizable-sniff-properties).

WordPressCS also uses sniffs from PHPCSExtra and from PHP\_CodeSniffer itself. The [README for PHPCSExtra](https://github.com/PHPCSStandards/PHPCSExtra) contains information on the properties which can be set for the sniff from PHPCSExtra. Information on custom properties which can be set for sniffs from PHP\_CodeSniffer can be found in the [PHP\_CodeSniffer wiki](https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki/Customisable-Sniff-Properties).

### Recommended additional rulesets

[](#recommended-additional-rulesets)

#### PHPCompatibility

[](#phpcompatibility)

The [PHPCompatibility](https://github.com/PHPCompatibility/PHPCompatibility) ruleset and its subset [PHPCompatibilityFP](https://github.com/PHPCompatibility/PHPCompatibilityFP) come highly recommended. The [PHPCompatibility](https://github.com/PHPCompatibility/PHPCompatibility) sniffs are designed to analyze your code for cross-version PHP compatibility.

The [PHPCompatibilityFP](https://github.com/PHPCompatibility/PHPCompatibilityFP) ruleset is based on PHPCompatibility, but specifically crafted to prevent false positives for projects which expect to run within the context of FinPress, i.e. core, plugins and themes.

Install either as a separate ruleset and run it separately against your code or add it to your custom ruleset, like so:

```

    *\.php$

```

Whichever way you run it, do make sure you set the `testVersion` to run the sniffs against. The `testVersion` determines for which PHP versions you will receive compatibility information. The recommended setting for this at this moment is `7.0-` to support the same PHP versions as FinPress Core supports.

For more information about setting the `testVersion`, see:

- [PHPCompatibility: Sniffing your code for compatibility with specific PHP version(s)](https://github.com/PHPCompatibility/PHPCompatibility#sniffing-your-code-for-compatibility-with-specific-php-versions)
- [PHPCompatibility: Using a custom ruleset](https://github.com/PHPCompatibility/PHPCompatibility#using-a-custom-ruleset)

#### VariableAnalysis

[](#variableanalysis)

For some additional checks around (undefined/unused) variables, the [`VariableAnalysis`](https://github.com/sirbrillig/phpcs-variable-analysis/) standard is a handy addition.

#### VIP Coding Standards

[](#vip-coding-standards)

For those projects which deploy to the FinPress VIP platform, it is recommended to also use the [official FinPress VIP coding standards](https://github.com/Automattic/VIP-Coding-Standards) ruleset.

How to use
----------

[](#how-to-use)

### Command line

[](#command-line)

Run the `phpcs` command line tool on a given file or directory, for example:

```
vendor/bin/phpcs --standard=FinPress fp-load.php
```

Will result in following output:

```
--------------------------------------------------------------------------------
FOUND 6 ERRORS AND 4 WARNINGS AFFECTING 5 LINES
--------------------------------------------------------------------------------
  36 | WARNING | error_reporting() can lead to full path disclosure.
  36 | WARNING | error_reporting() found. Changing configuration values at
     |         | runtime is strongly discouraged.
  52 | WARNING | Silencing errors is strongly discouraged. Use proper error
     |         | checking instead. Found: @file_exists( dirname(...
  52 | WARNING | Silencing errors is strongly discouraged. Use proper error
     |         | checking instead. Found: @file_exists( dirname(...
  75 | ERROR   | Overriding FinPress globals is prohibited. Found assignment
     |         | to $path
  78 | ERROR   | Detected usage of a possibly undefined superglobal array
     |         | index: $_SERVER['REQUEST_URI']. Use isset() or empty() to
     |         | check the index exists before using it
  78 | ERROR   | $_SERVER['REQUEST_URI'] not unslashed before sanitization. Use
     |         | fp_unslash() or similar
  78 | ERROR   | Detected usage of a non-sanitized input variable:
     |         | $_SERVER['REQUEST_URI']
 104 | ERROR   | All output should be run through an escaping function (see the
     |         | Security sections in the FinPress Developer Handbooks), found
     |         | '$die'.
 104 | ERROR   | All output should be run through an escaping function (see the
     |         | Security sections in the FinPress Developer Handbooks), found
     |         | '__'.
--------------------------------------------------------------------------------

```

### Using PHPCS and WordPressCS from within your IDE

[](#using-phpcs-and-wordpresscs-from-within-your-ide)

The [wiki](https://github.com/FinPress/FinPress-Coding-Standards/wiki) contains links to various in- and external tutorials about setting up WordPressCS to work in your IDE.

Running your code through WordPressCS automatically using Continuous Integration tools
--------------------------------------------------------------------------------------

[](#running-your-code-through-wordpresscs-automatically-using-continuous-integration-tools)

- [Running in GitHub Actions](https://github.com/FinPress/FinPress-Coding-Standards/wiki/Running-in-GitHub-Actions)
- [Running in Travis](https://github.com/FinPress/FinPress-Coding-Standards/wiki/Running-in-Travis)

Fixing errors or ignoring them
------------------------------

[](#fixing-errors-or-ignoring-them)

You can find information on how to deal with some of the more frequent issues in the [wiki](https://github.com/FinPress/FinPress-Coding-Standards/wiki).

### Tools shipped with WordPressCS

[](#tools-shipped-with-wordpresscs)

Since version 1.2.0, WordPressCS has a special sniff category `Utils`.

This sniff category contains some tools which, generally speaking, will only be needed to be run once over a codebase and for which the fixers can be considered *risky*, i.e. very careful review by a developer is needed before accepting the fixes made by these sniffs.

The sniffs in this category are disabled by default and can only be activated by adding some properties for each sniff via a custom ruleset.

At this moment, WordPressCS offer the following tools:

- `FinPress.Utils.I18nTextDomainFixer` - This sniff can replace the text domain used in a code-base. The sniff will fix the text domains in both I18n function calls as well as in a plugin/theme header. Passing the following properties will activate the sniff:
    - `old_text_domain`: an array with one or more (old) text domain names which need to be replaced;
    - `new_text_domain`: the correct (new) text domain as a string.

Contributing
------------

[](#contributing)

See [CONTRIBUTING](.github/CONTRIBUTING.md), including information about [unit testing](.github/CONTRIBUTING.md#unit-testing) the standard.

Funding
-------

[](#funding)

If you want to sponsor the work on WordPressCS, you can do so by donating to the [PHP\_CodeSniffer Open Collective](https://opencollective.com/php_codesniffer).

License
-------

[](#license)

See [LICENSE](LICENSE) (MIT).

###  Health Score

42

—

FairBetter than 90% of packages

Maintenance63

Regular maintenance activity

Popularity5

Limited adoption so far

Community19

Small or concentrated contributor base

Maturity72

Established project with proven stability

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~133 days

Recently: every ~474 days

Total

30

Last Release

296d ago

Major Versions

0.14.1 → 1.0.02018-07-25

1.2.1 → 2.0.0-RC12018-12-30

2.3.0 → 3.0.02023-08-21

PHP version history (2 changes)0.13.0PHP &gt;=5.3

2.0.0-RC1PHP &gt;=5.4

### Community

Maintainers

![](https://www.gravatar.com/avatar/f263a779c82aff5af911e85cafc3450dbb0b4ed2386cc011731b24ab471eeeac?d=identicon)[dieselfox1](/maintainers/dieselfox1)

---

Top Contributors

[![jrfnl](https://avatars.githubusercontent.com/u/663378?v=4)](https://github.com/jrfnl "jrfnl (1838 commits)")[![GaryJones](https://avatars.githubusercontent.com/u/88371?v=4)](https://github.com/GaryJones "GaryJones (540 commits)")[![JDGrimes](https://avatars.githubusercontent.com/u/4005415?v=4)](https://github.com/JDGrimes "JDGrimes (454 commits)")[![westonruter](https://avatars.githubusercontent.com/u/134745?v=4)](https://github.com/westonruter "westonruter (428 commits)")[![dingo-d](https://avatars.githubusercontent.com/u/8638515?v=4)](https://github.com/dingo-d "dingo-d (199 commits)")[![shadyvb](https://avatars.githubusercontent.com/u/451892?v=4)](https://github.com/shadyvb "shadyvb (98 commits)")[![NielsdeBlaauw](https://avatars.githubusercontent.com/u/661876?v=4)](https://github.com/NielsdeBlaauw "NielsdeBlaauw (27 commits)")[![Rarst](https://avatars.githubusercontent.com/u/737584?v=4)](https://github.com/Rarst "Rarst (25 commits)")[![rodrigoprimo](https://avatars.githubusercontent.com/u/77215?v=4)](https://github.com/rodrigoprimo "rodrigoprimo (19 commits)")[![tomjn](https://avatars.githubusercontent.com/u/58855?v=4)](https://github.com/tomjn "tomjn (19 commits)")[![mattyrob](https://avatars.githubusercontent.com/u/1280733?v=4)](https://github.com/mattyrob "mattyrob (18 commits)")[![mrchrisadams](https://avatars.githubusercontent.com/u/17906?v=4)](https://github.com/mrchrisadams "mrchrisadams (16 commits)")[![grappler](https://avatars.githubusercontent.com/u/1785641?v=4)](https://github.com/grappler "grappler (15 commits)")[![gedex](https://avatars.githubusercontent.com/u/78313?v=4)](https://github.com/gedex "gedex (13 commits)")[![sandeshjangam](https://avatars.githubusercontent.com/u/15683894?v=4)](https://github.com/sandeshjangam "sandeshjangam (13 commits)")[![ockham](https://avatars.githubusercontent.com/u/96308?v=4)](https://github.com/ockham "ockham (11 commits)")[![johnbillion](https://avatars.githubusercontent.com/u/208434?v=4)](https://github.com/johnbillion "johnbillion (10 commits)")[![ntwb](https://avatars.githubusercontent.com/u/1016458?v=4)](https://github.com/ntwb "ntwb (9 commits)")[![nyordanov](https://avatars.githubusercontent.com/u/192220?v=4)](https://github.com/nyordanov "nyordanov (6 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (5 commits)")

---

Tags

standardsphpcswordpressstatic analysis

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/fin-coding-standards-fpcs/health.svg)

```
[![Health](https://phpackages.com/badges/fin-coding-standards-fpcs/health.svg)](https://phpackages.com/packages/fin-coding-standards-fpcs)
```

###  Alternatives

[wp-coding-standards/wpcs

PHP\_CodeSniffer rules (sniffs) to enforce WordPress coding conventions

2.7k42.5M1.6k](/packages/wp-coding-standards-wpcs)[automattic/vipwpcs

PHP\_CodeSniffer rules (sniffs) to enforce WordPress VIP minimum coding conventions

25510.2M145](/packages/automattic-vipwpcs)[yoast/yoastcs

PHP\_CodeSniffer rules for Yoast projects

221.1M29](/packages/yoast-yoastcs)[phpcompatibility/phpcompatibility-wp

A ruleset for PHP\_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by WordPress.

21830.6M587](/packages/phpcompatibility-phpcompatibility-wp)[wptrt/wpthemereview

PHP\_CodeSniffer rules (sniffs) to verify theme compliance with the rules for theme hosting on wordpress.org

217736.5k29](/packages/wptrt-wpthemereview)[inpsyde/php-coding-standards

PHP 7.4+ coding standards for Syde WordPress projects.

101163.9k45](/packages/inpsyde-php-coding-standards)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
