# wordpress/wordpress-coding-standards architecture

> Architecture diagram of the GitHub repository wordpress/wordpress-coding-standards, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/wordpress/wordpress-coding-standards
- Repository: https://github.com/wordpress/wordpress-coding-standards

## Overview

WordPress Coding Standards is a PHP_CodeSniffer ruleset for checking WordPress PHP conventions and practices. The main workflow is that a developer asks PHP_CodeSniffer to scan PHP files with a selected WordPress standard; PHPCS dispatches token processing to the applicable sniffs, which report violations or, for fixable rules, offer corrections. The repository also includes broad style, security, database, naming, WordPress API, and internationalization checks. The tree and excerpts show representative sniff and helper implementations, not the wiring for every sniff, so the graph omits uncertain internal calls.

Main entry points: [`WordPress/AbstractFunctionRestrictionsSniff.php`](https://github.com/wordpress/wordpress-coding-standards/blob/develop/WordPress/AbstractFunctionRestrictionsSniff.php) (Function restrictions), [`WordPress/Sniffs/DB/DirectDatabaseQuerySniff.php`](https://github.com/wordpress/wordpress-coding-standards/blob/develop/WordPress/Sniffs/DB/DirectDatabaseQuerySniff.php) (Direct query sniff), [`WordPress/Sniffs/PHP/DiscouragedPHPFunctionsSniff.php`](https://github.com/wordpress/wordpress-coding-standards/blob/develop/WordPress/Sniffs/PHP/DiscouragedPHPFunctionsSniff.php) (Discouraged PHP calls), [`WordPress/Sniffs/Security/EscapeOutputSniff.php`](https://github.com/wordpress/wordpress-coding-standards/blob/develop/WordPress/Sniffs/Security/EscapeOutputSniff.php) (Output escaping)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_engine["Scan interface"]
  node_phpcs["PHP_CodeSniffer"]
end

subgraph group_style["Style checks"]
  node_arrays["Array formatting"]
  node_whitespace["Whitespace rules"]
end

subgraph group_quality["Code practices"]
  node_php["PHP usage rules"]
  node_db["Database rules"]
  node_analysis["Code analysis"]
  node_directdb["Direct query sniff"]
  node_discphp["Discouraged PHP calls"]
end

subgraph group_security["Security checks"]
  node_securityrules["Security rules"]
  node_escape["Output escaping"]
end

subgraph group_wp["WordPress conventions"]
  node_naming["Naming rules"]
  node_wprules["WordPress API rules"]
  node_i18n["Internationalization"]
  node_discwp["Discouraged WP calls"]
end

subgraph group_shared["Shared sniff logic"]
  node_base["Sniff base<br/>[Sniff.php]"]
  node_functionbase["Function restrictions"]
  node_arraybase["Array restrictions"]
  node_helpers["Token helpers"]
  node_context["Context helper<br/>[ContextHelper.php]"]
end

node_developer(("Developer"))
node_phpfiles["PHP source files"]
node_findings["Findings and fixes"]

node_developer -->|"runs scan"| node_phpcs
node_phpfiles -->|"scans"| node_phpcs
node_phpcs -->|"dispatches"| node_arrays
node_phpcs -->|"dispatches"| node_whitespace
node_phpcs -->|"dispatches"| node_php
node_phpcs -->|"dispatches"| node_db
node_phpcs -->|"dispatches"| node_analysis
node_phpcs -->|"dispatches"| node_securityrules
node_phpcs -->|"dispatches"| node_naming
node_phpcs -->|"dispatches"| node_wprules
node_phpcs -->|"dispatches"| node_i18n
node_arrays -->|"reports"| node_findings
node_whitespace -->|"reports"| node_findings
node_php -->|"reports"| node_findings
node_db -->|"reports"| node_findings
node_analysis -->|"reports"| node_findings
node_securityrules -->|"reports"| node_findings
node_naming -->|"reports"| node_findings
node_wprules -->|"reports"| node_findings
node_i18n -->|"reports"| node_findings
node_findings -->|"presents"| node_developer
node_directdb -->|"extends"| node_arraybase
node_discphp -->|"extends"| node_functionbase
node_discwp -->|"extends"| node_functionbase
node_functionbase -->|"uses"| node_base
node_arraybase -->|"uses"| node_base
node_directdb -->|"reports"| node_findings
node_discphp -->|"reports"| node_findings
node_discwp -->|"reports"| node_findings
node_escape -->|"extends"| node_functionbase
node_escape -->|"reports"| node_findings
node_functionbase -->|"calls"| node_context
node_directdb -->|"uses"| node_helpers

click node_arrays "https://github.com/wordpress/wordpress-coding-standards/tree/develop/WordPress/Sniffs/Arrays"
click node_whitespace "https://github.com/wordpress/wordpress-coding-standards/tree/develop/WordPress/Sniffs/WhiteSpace"
click node_php "https://github.com/wordpress/wordpress-coding-standards/tree/develop/WordPress/Sniffs/PHP"
click node_db "https://github.com/wordpress/wordpress-coding-standards/tree/develop/WordPress/Sniffs/DB"
click node_analysis "https://github.com/wordpress/wordpress-coding-standards/tree/develop/WordPress/Sniffs/CodeAnalysis"
click node_securityrules "https://github.com/wordpress/wordpress-coding-standards/tree/develop/WordPress/Sniffs/Security"
click node_naming "https://github.com/wordpress/wordpress-coding-standards/tree/develop/WordPress/Sniffs/NamingConventions"
click node_wprules "https://github.com/wordpress/wordpress-coding-standards/tree/develop/WordPress/Sniffs/WP"
click node_i18n "https://github.com/wordpress/wordpress-coding-standards/blob/develop/WordPress/Sniffs/Utils/I18nTextDomainFixerSniff.php"
click node_base "https://github.com/wordpress/wordpress-coding-standards/blob/develop/WordPress/Sniff.php"
click node_functionbase "https://github.com/wordpress/wordpress-coding-standards/blob/develop/WordPress/AbstractFunctionRestrictionsSniff.php"
click node_arraybase "https://github.com/wordpress/wordpress-coding-standards/blob/develop/WordPress/AbstractArrayAssignmentRestrictionsSniff.php"
click node_helpers "https://github.com/wordpress/wordpress-coding-standards/tree/develop/WordPress/Helpers"
click node_context "https://github.com/wordpress/wordpress-coding-standards/blob/develop/WordPress/Helpers/ContextHelper.php"
click node_directdb "https://github.com/wordpress/wordpress-coding-standards/blob/develop/WordPress/Sniffs/DB/DirectDatabaseQuerySniff.php"
click node_discphp "https://github.com/wordpress/wordpress-coding-standards/blob/develop/WordPress/Sniffs/PHP/DiscouragedPHPFunctionsSniff.php"
click node_discwp "https://github.com/wordpress/wordpress-coding-standards/blob/develop/WordPress/Sniffs/WP/DiscouragedFunctionsSniff.php"
click node_escape "https://github.com/wordpress/wordpress-coding-standards/blob/develop/WordPress/Sniffs/Security/EscapeOutputSniff.php"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_phpcs toneBlue
class node_arrays,node_whitespace toneAmber
class node_php,node_db,node_analysis,node_directdb,node_discphp toneMint
class node_securityrules,node_escape toneRose
class node_naming,node_wprules,node_i18n,node_discwp,node_developer,node_phpfiles,node_findings toneIndigo
class node_base,node_functionbase,node_arraybase,node_helpers,node_context toneTeal
```

## Components

### Scan interface

- **PHP_CodeSniffer**

### Style checks

- [Array formatting](https://github.com/wordpress/wordpress-coding-standards/tree/develop/WordPress/Sniffs/Arrays): `WordPress/Sniffs/Arrays`
- [Whitespace rules](https://github.com/wordpress/wordpress-coding-standards/tree/develop/WordPress/Sniffs/WhiteSpace): `WordPress/Sniffs/WhiteSpace`

### Code practices

- [PHP usage rules](https://github.com/wordpress/wordpress-coding-standards/tree/develop/WordPress/Sniffs/PHP): `WordPress/Sniffs/PHP`
- [Database rules](https://github.com/wordpress/wordpress-coding-standards/tree/develop/WordPress/Sniffs/DB): `WordPress/Sniffs/DB`
- [Code analysis](https://github.com/wordpress/wordpress-coding-standards/tree/develop/WordPress/Sniffs/CodeAnalysis): `WordPress/Sniffs/CodeAnalysis`
- [Direct query sniff](https://github.com/wordpress/wordpress-coding-standards/blob/develop/WordPress/Sniffs/DB/DirectDatabaseQuerySniff.php): `WordPress/Sniffs/DB/DirectDatabaseQuerySniff.php`
- [Discouraged PHP calls](https://github.com/wordpress/wordpress-coding-standards/blob/develop/WordPress/Sniffs/PHP/DiscouragedPHPFunctionsSniff.php): `WordPress/Sniffs/PHP/DiscouragedPHPFunctionsSniff.php`

### Security checks

- [Security rules](https://github.com/wordpress/wordpress-coding-standards/tree/develop/WordPress/Sniffs/Security): `WordPress/Sniffs/Security`
- [Output escaping](https://github.com/wordpress/wordpress-coding-standards/blob/develop/WordPress/Sniffs/Security/EscapeOutputSniff.php): `WordPress/Sniffs/Security/EscapeOutputSniff.php`

### WordPress conventions

- [Naming rules](https://github.com/wordpress/wordpress-coding-standards/tree/develop/WordPress/Sniffs/NamingConventions): `WordPress/Sniffs/NamingConventions`
- [WordPress API rules](https://github.com/wordpress/wordpress-coding-standards/tree/develop/WordPress/Sniffs/WP): `WordPress/Sniffs/WP`
- [Internationalization](https://github.com/wordpress/wordpress-coding-standards/blob/develop/WordPress/Sniffs/Utils/I18nTextDomainFixerSniff.php): `WordPress/Sniffs/Utils/I18nTextDomainFixerSniff.php`
- [Discouraged WP calls](https://github.com/wordpress/wordpress-coding-standards/blob/develop/WordPress/Sniffs/WP/DiscouragedFunctionsSniff.php): `WordPress/Sniffs/WP/DiscouragedFunctionsSniff.php`

### Shared sniff logic

- [Sniff base](https://github.com/wordpress/wordpress-coding-standards/blob/develop/WordPress/Sniff.php): `WordPress/Sniff.php`
- [Function restrictions](https://github.com/wordpress/wordpress-coding-standards/blob/develop/WordPress/AbstractFunctionRestrictionsSniff.php): `WordPress/AbstractFunctionRestrictionsSniff.php`
- [Array restrictions](https://github.com/wordpress/wordpress-coding-standards/blob/develop/WordPress/AbstractArrayAssignmentRestrictionsSniff.php): `WordPress/AbstractArrayAssignmentRestrictionsSniff.php`
- [Token helpers](https://github.com/wordpress/wordpress-coding-standards/tree/develop/WordPress/Helpers): `WordPress/Helpers`
- [Context helper](https://github.com/wordpress/wordpress-coding-standards/blob/develop/WordPress/Helpers/ContextHelper.php): `WordPress/Helpers/ContextHelper.php`

### Other components

- **Developer**
- **PHP source files**
- **Findings and fixes**

## Connections

- Developer → PHP_CodeSniffer: runs scan
- PHP source files → PHP_CodeSniffer: scans
- PHP_CodeSniffer → Array formatting: dispatches
- PHP_CodeSniffer → Whitespace rules: dispatches
- PHP_CodeSniffer → PHP usage rules: dispatches
- PHP_CodeSniffer → Database rules: dispatches
- PHP_CodeSniffer → Code analysis: dispatches
- PHP_CodeSniffer → Security rules: dispatches
- PHP_CodeSniffer → Naming rules: dispatches
- PHP_CodeSniffer → WordPress API rules: dispatches
- PHP_CodeSniffer → Internationalization: dispatches
- Array formatting → Findings and fixes: reports
- Whitespace rules → Findings and fixes: reports
- PHP usage rules → Findings and fixes: reports
- Database rules → Findings and fixes: reports
- Code analysis → Findings and fixes: reports
- Security rules → Findings and fixes: reports
- Naming rules → Findings and fixes: reports
- WordPress API rules → Findings and fixes: reports
- Internationalization → Findings and fixes: reports
- Findings and fixes → Developer: presents
- Direct query sniff → Array restrictions: extends
- Discouraged PHP calls → Function restrictions: extends
- Discouraged WP calls → Function restrictions: extends
- Function restrictions → Sniff base: uses
- Array restrictions → Sniff base: uses
- Direct query sniff → Findings and fixes: reports
- Discouraged PHP calls → Findings and fixes: reports
- Discouraged WP calls → Findings and fixes: reports
- Output escaping → Function restrictions: extends
- Output escaping → Findings and fixes: reports
- Function restrictions → Context helper: calls
- Direct query sniff → Token helpers: uses
