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 December 3rd 2019 at the Leiden WP meetup, Leiden, The Netherlands.
https://www.meetup.com/Leiden-WordPress-Meetup/events/266101021/
---------------------------------------------------------------
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...

Relevant link: https://github.com/jrfnl/QA-WP-Projects

Juliette Reinders Folmer

December 03, 2019
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  PHP

    Compatibility  WP Compatibility  Internationalization  Best Practices  Consistency  Readability
  10. PHP • http://php.net/download Compo ser • https://getcomposer.org/download/ Install • Install

    via Composer: composer global require --dev jrfnl/qawpprojects Update • Update via Composer: composer global update jrfnl/qawpprojects --with-dependencies Install / Update
  11. What's Included in QA WP Projects ? PHP_CodeSniffer PEAR, PSR1,

    PSR2, PSR12, Squiz, Zend WordPress, WordPress-Core, WordPress-Docs, WordPress-Extra PHPCompatibilityWP PHPCompatibility PHPCompatibilityParagonie WP-QA-Basic WP-QA-Strict
  12. 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="sp"/> <arg name="extensions" value="php"/> <arg name="basepath" value="./"/> <rule ref="WordPress"/> </ruleset>
  13. 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"/> </ruleset>
  14. 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>
  15. 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>