Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

Your Code Can be Poetry Too

Your Code Can be Poetry Too

Presented on September 8th 2023 at WordCamp The Netherlands, Arnhem, The Netherlands.
https://netherlands.wordcamp.org/2023/session/your-code-can-be-poetry-too/
---------------------------------------------------------------
Ever heard of the WordPress Coding standards ? Ever wondered why you – and your development team – should use them ?

In contrast to most coding standards, using the WordPress Coding Standards is about so much more than just code style. It is about best practices, modern code, preventing conflicts with other themes and plugins and can even help safeguard you against some common security vulnerabilities.

No matter whether you are a developer or you can’t tell divs from eval’s, the WordPress Coding Standards can help you. Let me tell you how…

Juliette Reinders Folmer

September 08, 2023
Tweet

More Decks by Juliette Reinders Folmer

Other Decks in Programming

Transcript

  1. Reviewing Code [1] function my_prefix_print_link( $url, $link_text ) { printf(

    '<a href="%1$s">%2$s</a>', $url, esc_html( $link_text ), ); }
  2. Reviewing Code [1] function my_prefix_print_link( $url, $link_text ) { printf(

    '<a href="%1$s">%2$s</a>', $url, esc_html( $link_text ), ); }
  3. Reviewing Code [2] function my_prefix_verify_answer() { if ( strpos( $_POST['phrase'],

    "It's a brand new day" ) != false ) { echo esc_html( 'Congratulations, you got it right!', 'domain' ); } else { printf( esc_html( 'Sorry, %s was the wrong answer', 'domain' ), $_POST['phrase'] ); } }
  4. Reviewing Code [2] function my_prefix_verify_answer() { if ( strpos( $_POST['phrase'],

    "It's a brand new day" ) != false ) { echo esc_html( 'Congratulations, you got it right!', 'domain' ); } else { printf( esc_html( 'Sorry, %s was the wrong answer', 'domain' ), $_POST['phrase'] ); } }
  5. Reviewing Code [3] function admin_page_header() { ?> <div class="wrap"> <?php

    screen_icon(); ?> <h2>My Admin Page</h2> <p><?= _e( 'Don\'t forget to save after changing the settings', TEXT_DOMAIN ); ?></p> <?php }
  6. Reviewing Code [3] function admin_page_header() { ?> <div class="wrap"> <?php

    screen_icon(); ?> <h2>My Admin Page</h2> <p><?= _e( 'Don\'t forget to save after changing the settings', TEXT_DOMAIN ); ?></p> <?php }
  7. Reviewing Code [4] function my_prefix_find_post( $search ) { global $wpdb,

    $id; $result = $wpdb->get_col( "SELECT post_id FROM $wpdb->posts WHERE post_title LIKE '$search';" ); foreach ( $result as $id ) { // Do something. } }
  8. Reviewing Code [4] function my_prefix_find_post( $search ) { global $wpdb,

    $id; $result = $wpdb->get_col( "SELECT post_id FROM $wpdb->posts WHERE post_title LIKE '$search';" ); foreach ( $result as $id ) { // Do something. } }
  9. How WordPressCS Can Help ✓ Security ✓ Interoperability ✓ WP

    Compatibility ✓ Internationalization ✓ Best Practices ✓ Documentation ✓ Consistency ✓ Readability ✓ PHP Compatibility
  10. PHP • http://php.net/download Comp oser • https://getcomposer.org/download/ Install • Install

    via Composer: composer global require –dev wp-coding-standards/wpcs phpcompatibility/phpcompatibility-wp Update • Update via Composer: composer global update wp-coding-standards/wpcs --with-dependencies Run • vendor/bin/phpcs -ps . --standard=WordPress,PHPCompatibilityWP Install / Update
  11. What Was Included in WordPressCS 2.x ? PHP_CodeSniffer Generic PEAR

    PSR1, PSR2, PSR12 Squiz Zend WordPress WordPress WordPress-Core WordPress-Docs WordPress-Extra PHPCompatibilityWP PHPCompatibility PHPCompatibilityWP Composer PHPCS Plugin
  12. WordPressCS 2.x vs 3.x Why did it take so long

    ?????? • Re-architecture • Rules for modern PHP • PHP 7.4 • PHP 8.0 • PHP 8.1 • PHP 8.2
  13. What Is Included in WordPressCS 3.x ? PHP_CodeSniffer Generic PEAR

    PSR1, PSR2, PSR12 Squiz Zend PHPCSUtils WordPress WordPress WordPress-Core WordPress-Docs WordPress-Extra PHPCSExtra Universal NormalizedArrays Modernizer PHPCompatibility WP PHPCompatibility PHPCompatibility WP Composer PHPCS Plugin
  14. Recommended Reading for Upgrading: • Changelog • Upgrade Guide for

    end-users/ruleset maintainers • Upgrade Guide for devs of external standards
  15. Minimal Ruleset – phpcs.xml.dist <?xml version="1.0"?> <ruleset name="My Project Ruleset">

    <description>Settings for Project X</description> <file>.</file> <exclude-pattern>/vendor/</exclude-pattern> <arg value="ps"/><!-- Show progress and error codes. --> <arg name="extensions" value="php"/> <arg name="basepath" value="./"/> <rule ref="WordPress"/> </ruleset>
  16. Adding Configuration [1] <ruleset> ... <!-- Also check for PHP

    cross-version compatibility. --> <config name="testVersion" value="5.6-"/> <rule ref="PHPCompatibilityWP"/> <!-- Set the minimum supported WP version. This is used by several sniffs. --> <config name="minimum_wp_version" value="5.2"/> </ruleset>
  17. Adding Configuration [2] <ruleset> ... <!-- Verify that the correct

    text domain is used. --> <rule ref="WordPress.WP.I18n"> <properties> <property name="text_domain" type="array"> <element value="my-textdomain"/> </property> </properties> </rule> </ruleset>
  18. Adding Configuration [3] <ruleset> ... <!-- Verify that everything in

    the global namespace is prefixed with a plugin specific prefix. --> <rule ref="WordPress.NamingConventions.PrefixAllGlobals"> <properties> <property name="prefixes" type="array"> <element value="my_prefix"/> </property> </properties> </rule> </ruleset>
  19. “ Open Source Software is not Free. There is a

    HUGE cost. You are generally just not the one paying the price…