Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Your Code Can be Poetry Too

Your Code Can be Poetry Too

Presented on February 9th 2023 at the WP Lisbon meetup, Lisbon, Portugal and February 16th 2023 at the WP Porto meetup, Porto, Portugal.
https://www.meetup.com/wordpress-lisboa/events/290894838/
https://www.meetup.com/wp-porto/events/291447516/
---------------------------------------------------------------
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

February 09, 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's 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 is it taking so long

    ?????? • Re-architecture • Rules for modern PHP • PHP 7.4 • PHP 8.0 • PHP 8.1 • PHP 8.2
  13. What Will Be 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 PHPCompatibility WP PHPCompatibility PHPCompatibility WP Composer PHPCS Plugin
  14. 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>
  15. 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_supported_wp_version" value="5.2"/> <config name="minimum_wp_version" value="5.2"/><!– WPCS 3.0 --> </ruleset>
  16. 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>
  17. 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>