PHP_CodeSniffer + WPCS
WordPress kódolási szabványok betartása PHP_CodeSniffer és WordPress Coding Standards segítségével.
A PHP_CodeSniffer (PHPCS) egy kódelemző eszköz, amely ellenőrzi a PHP kód megfelelőségét különböző kódolási szabványoknak. A WordPress Coding Standards (WPCS) a hivatalos WordPress kódolási szabványokat tartalmazza.
Miért fontos?
Szekció neve “Miért fontos?”- Konzisztens kód - Egységes kódstílus a teljes projektben
- Hibamegelőzés - Potenciális problémák korai felismerése
- WordPress kompatibilitás - Hivatalos WP szabványok betartása
- Automatikus javítás - PHPCBF automatikusan javítja a hibákat
- CI/CD integráció - Automatikus ellenőrzés a build folyamatban
Telepítés
Szekció neve “Telepítés”Composer-rel (ajánlott)
Szekció neve “Composer-rel (ajánlott)”# Projekt szintű telepítéscomposer require --dev squizlabs/php_codesniffercomposer require --dev wp-coding-standards/wpcscomposer require --dev phpcompatibility/phpcompatibility-wp
# WPCS regisztrálása./vendor/bin/phpcs --config-set installed_paths vendor/wp-coding-standards/wpcs,vendor/phpcompatibility/phpcompatibility-wpGlobális telepítés
Szekció neve “Globális telepítés”composer global require squizlabs/php_codesniffercomposer global require wp-coding-standards/wpcscomposer global require phpcompatibility/phpcompatibility-wp
# Globális Composer bin hozzáadása a PATH-hozexport PATH="$HOME/.composer/vendor/bin:$PATH"
# WPCS regisztrálásaphpcs --config-set installed_paths ~/.composer/vendor/wp-coding-standards/wpcs,~/.composer/vendor/phpcompatibility/phpcompatibility-wpElérhető szabványok ellenőrzése
Szekció neve “Elérhető szabványok ellenőrzése”phpcs -iKimenet:
The installed coding standards are: MySource, PEAR, PSR1, PSR2, PSR12,Squiz, Zend, PHPCompatibility, PHPCompatibilityWP, WordPress,WordPress-Core, WordPress-Docs, WordPress-ExtraWordPress szabványok
Szekció neve “WordPress szabványok”| Szabvány | Leírás |
|---|---|
| WordPress | Teljes szabványkészlet (Core + Docs + Extra) |
| WordPress-Core | Alapvető kódolási szabványok |
| WordPress-Docs | Dokumentációs szabványok (PHPDoc) |
| WordPress-Extra | További best practice szabályok |
Alapvető használat
Szekció neve “Alapvető használat”Kód ellenőrzése
Szekció neve “Kód ellenőrzése”# Egy fájl ellenőrzésephpcs --standard=WordPress path/to/file.php
# Mappa ellenőrzésephpcs --standard=WordPress path/to/plugin/
# Csak hibák megjelenítése (figyelmeztetések nélkül)phpcs --standard=WordPress --error-severity=1 --warning-severity=8 path/to/plugin/Automatikus javítás (PHPCBF)
Szekció neve “Automatikus javítás (PHPCBF)”# Egy fájl javításaphpcbf --standard=WordPress path/to/file.php
# Mappa javításaphpcbf --standard=WordPress path/to/plugin/Kimenet formátumok
Szekció neve “Kimenet formátumok”# Alapértelmezett (full)phpcs --standard=WordPress --report=full file.php
# Összefoglalóphpcs --standard=WordPress --report=summary path/to/plugin/
# JSON kimenetphpcs --standard=WordPress --report=json file.php
# Diff formátumphpcs --standard=WordPress --report=diff file.phpKonfiguráció
Szekció neve “Konfiguráció”phpcs.xml.dist
Szekció neve “phpcs.xml.dist”Hozz létre egy phpcs.xml.dist fájlt a projekt gyökerében:
<?xml version="1.0"?><ruleset name="My WordPress Project"> <description>Custom ruleset for WordPress development.</description>
<!-- Ellenőrizendő fájlok/mappák --> <file>./</file>
<!-- Kizárt mappák --> <exclude-pattern>/vendor/*</exclude-pattern> <exclude-pattern>/node_modules/*</exclude-pattern> <exclude-pattern>/tests/*</exclude-pattern> <exclude-pattern>/assets/*</exclude-pattern> <exclude-pattern>*.min.js</exclude-pattern> <exclude-pattern>*.min.css</exclude-pattern>
<!-- Csak PHP fájlok --> <arg name="extensions" value="php"/>
<!-- Színes kimenet --> <arg name="colors"/>
<!-- Párhuzamos feldolgozás --> <arg name="parallel" value="8"/>
<!-- Progress megjelenítése --> <arg value="ps"/>
<!-- WordPress szabvány használata --> <rule ref="WordPress"> <!-- Opcionális: szabályok kizárása --> <exclude name="WordPress.Files.FileName.InvalidClassFileName"/> <exclude name="WordPress.Files.FileName.NotHyphenatedLowercase"/> </rule>
<!-- PHP kompatibilitás ellenőrzése --> <rule ref="PHPCompatibilityWP"/>
<!-- Minimum PHP verzió --> <config name="testVersion" value="7.4-"/>
<!-- Text domain a fordításokhoz --> <config name="text_domain" value="my-plugin"/>
<!-- Minimum WordPress verzió --> <config name="minimum_wp_version" value="6.0"/>
<!-- Prefix az egyedi függvényekhez --> <rule ref="WordPress.NamingConventions.PrefixAllGlobals"> <properties> <property name="prefixes" type="array"> <element value="my_plugin"/> <element value="MY_PLUGIN"/> </property> </properties> </rule></ruleset>Gyakori szabály konfigurációk
Szekció neve “Gyakori szabály konfigurációk”Fájlnév szabályok lazítása
Szekció neve “Fájlnév szabályok lazítása”<!-- PSR-4 autoload kompatibilitás --><rule ref="WordPress.Files.FileName"> <properties> <property name="strict_class_file_names" value="false"/> </properties></rule>Escape szabályok testreszabása
Szekció neve “Escape szabályok testreszabása”<!-- Saját escape függvények engedélyezése --><rule ref="WordPress.Security.EscapeOutput"> <properties> <property name="customEscapingFunctions" type="array"> <element value="my_custom_escape"/> </property> </properties></rule>Nonce ellenőrzés kihagyása
Szekció neve “Nonce ellenőrzés kihagyása”<!-- AJAX kezelőknél, ahol már ellenőriztük --><rule ref="WordPress.Security.NonceVerification"> <exclude-pattern>*/ajax-handlers/*</exclude-pattern></rule>composer.json scripts
Szekció neve “composer.json scripts”{ "scripts": { "phpcs": "phpcs", "phpcbf": "phpcbf", "lint": "phpcs --standard=WordPress .", "lint:fix": "phpcbf --standard=WordPress .", "lint:summary": "phpcs --standard=WordPress --report=summary ." }}Használat:
composer lintcomposer lint:fixcomposer lint:summaryIDE integráció
Szekció neve “IDE integráció”VS Code
Szekció neve “VS Code”-
Telepítsd a PHP Sniffer & Beautifier bővítményt
-
.vscode/settings.json:
{ "phpsab.executablePathCS": "./vendor/bin/phpcs", "phpsab.executablePathCBF": "./vendor/bin/phpcbf", "phpsab.standard": "WordPress", "phpsab.autoRulesetSearch": true, "phpsab.fixerEnable": true, "phpsab.snifferEnable": true, "phpsab.snifferShowSources": true, "editor.formatOnSave": false, "[php]": { "editor.defaultFormatter": "ValeryanM.vscode-phpsab" }}PhpStorm
Szekció neve “PhpStorm”- Settings > PHP > Quality Tools > PHP_CodeSniffer
- Configuration: válaszd a
Localopciót - PHP_CodeSniffer path:
./vendor/bin/phpcs - Settings > Editor > Inspections > PHP > Quality Tools
- Engedélyezd a
PHP_CodeSniffer validation-t - Coding standard:
WordPressvagyCustom(phpcs.xml.dist)
Sublime Text
Szekció neve “Sublime Text”-
Telepítsd a SublimeLinter és SublimeLinter-phpcs csomagokat
-
User settings:
{ "linters": { "phpcs": { "args": ["--standard=WordPress"] } }}CI/CD integráció
Szekció neve “CI/CD integráció”GitHub Actions
Szekció neve “GitHub Actions”.github/workflows/phpcs.yml:
name: PHP CodeSniffer
on: push: branches: [main, develop] pull_request: branches: [main]
jobs: phpcs: runs-on: ubuntu-latest
steps: - uses: actions/checkout@v4
- name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.2' tools: composer, cs2pr
- name: Install dependencies run: composer install --prefer-dist --no-progress
- name: Run PHPCS run: ./vendor/bin/phpcs --report=checkstyle | cs2prGitLab CI
Szekció neve “GitLab CI”.gitlab-ci.yml:
phpcs: image: php:8.2-cli before_script: - apt-get update && apt-get install -y git unzip - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer - composer install script: - ./vendor/bin/phpcs only: - merge_requests - mainPre-commit hook
Szekció neve “Pre-commit hook”Husky + lint-staged (npm)
Szekció neve “Husky + lint-staged (npm)”package.json:
{ "husky": { "hooks": { "pre-commit": "lint-staged" } }, "lint-staged": { "*.php": [ "phpcs --standard=WordPress", "phpcbf --standard=WordPress" ] }}Natív Git hook
Szekció neve “Natív Git hook”.git/hooks/pre-commit:
#!/bin/bash
# Módosított PHP fájlok ellenőrzéseFILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.php$')
if [ -n "$FILES" ]; then echo "Running PHPCS..." ./vendor/bin/phpcs --standard=WordPress $FILES
if [ $? -ne 0 ]; then echo "PHPCS found errors. Please fix them before committing." exit 1 fifi
exit 0chmod +x .git/hooks/pre-commitGyakori hibák és megoldások
Szekció neve “Gyakori hibák és megoldások”Missing text domain
Szekció neve “Missing text domain”// Hibás_e( 'Hello World' );
// Helyes_e( 'Hello World', 'my-plugin' );Missing nonce verification
Szekció neve “Missing nonce verification”// Hibásif ( isset( $_POST['action'] ) ) { // Process form}
// Helyesif ( isset( $_POST['action'] ) && wp_verify_nonce( $_POST['_wpnonce'], 'my_action' ) ) { // Process form}Direct database query
Szekció neve “Direct database query”// Hibás$wpdb->query( "DELETE FROM {$wpdb->posts} WHERE ID = 1" );
// Helyes - cache törlés$wpdb->query( "DELETE FROM {$wpdb->posts} WHERE ID = 1" ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCachingclean_post_cache( 1 );Escaping output
Szekció neve “Escaping output”// Hibásecho $user_input;echo '<a href="' . $url . '">';
// Helyesecho esc_html( $user_input );echo '<a href="' . esc_url( $url ) . '">';Late escaping
Szekció neve “Late escaping”// Hibás$output = esc_html( $text );// ... sok kód ...echo $output;
// Helyes - késői escapeecho esc_html( $output );Szabályok figyelmen kívül hagyása
Szekció neve “Szabályok figyelmen kívül hagyása”Egy sor
Szekció neve “Egy sor”// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscapedecho $trusted_html;Kódrészlet
Szekció neve “Kódrészlet”// phpcs:disable WordPress.Security.NonceVerification.Recommendedif ( isset( $_GET['page'] ) ) { // ...}// phpcs:enableEgész fájl
Szekció neve “Egész fájl”<?php// phpcs:ignoreFile
// Ez a fájl nem lesz ellenőrizvePHPCompatibility használata
Szekció neve “PHPCompatibility használata”A PHPCompatibility segít ellenőrizni, hogy a kódod kompatibilis-e adott PHP verziókkal:
# PHP 7.4+ kompatibilitás ellenőrzésephpcs --standard=PHPCompatibilityWP --runtime-set testVersion 7.4- path/to/plugin/
# PHP 8.0-8.2 közötti kompatibilitásphpcs --standard=PHPCompatibilityWP --runtime-set testVersion 8.0-8.2 path/to/plugin/