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. Your Code Can be Poetry Too
    Introduction to WordPressCS

    View full-size slide

  2. Hello!
    Juliette
    Reinders Folmer
    @jrf_nl @jrfnl @jrf
    @[email protected]

    View full-size slide

  3. WordPressCS !== Code Style

    View full-size slide

  4. WordPressCS === Coding Standards

    View full-size slide

  5. WordPressCS === Quality Control

    View full-size slide

  6. “ Only half of
    programming is coding.
    The other 90% is
    debugging.

    View full-size slide

  7. Marnhe du Plooy

    View full-size slide

  8. Reviewing Code [1]
    function my_prefix_print_link( $url, $link_text ) {
    printf(
    '%2$s',
    $url,
    esc_html( $link_text ),
    );
    }

    View full-size slide

  9. Reviewing Code [1]
    function my_prefix_print_link( $url, $link_text ) {
    printf(
    '%2$s',
    $url,
    esc_html( $link_text ),
    );
    }

    View full-size slide

  10. 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']
    );
    }
    }

    View full-size slide

  11. 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']
    );
    }
    }

    View full-size slide

  12. Reviewing Code [3]
    function admin_page_header() {
    ?>


    My Admin Page
    = _e( 'Don\'t forget to save after changing the
    settings', TEXT_DOMAIN ); ?>
    }

    View full-size slide

  13. Reviewing Code [3]
    function admin_page_header() {
    ?>


    My Admin Page
    = _e( 'Don\'t forget to save after changing the
    settings', TEXT_DOMAIN ); ?>
    }

    View full-size slide

  14. 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.
    }
    }

    View full-size slide

  15. 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.
    }
    }

    View full-size slide

  16. How WordPressCS Can Help
    ✓ Security
    ✓ Interoperability
    ✓ WP Compatibility
    ✓ Internationalization
    ✓ Best Practices
    ✓ Documentation
    ✓ Consistency
    ✓ Readability
    ✓ PHP Compatibility

    View full-size slide

  17. 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

    View full-size slide

  18. 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

    View full-size slide

  19. 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

    View full-size slide

  20. 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

    View full-size slide

  21. Minimal Ruleset – phpcs.xml.dist


    Settings for Project X
    .
    /vendor/





    View full-size slide

  22. Adding Configuration [1]

    ...







    View full-size slide

  23. Adding Configuration [2]

    ...









    View full-size slide

  24. Adding Configuration [3]

    ...









    View full-size slide

  25. elvis santana
    PHPCS Pro-tips

    View full-size slide

  26. phpcs --standard=WordPress --generator=Text (Markdown|HTML)

    View full-size slide

  27. --filter=GitModified
    --filter=GitStaged

    View full-size slide

  28. Thanks!
    Any
    questions ?
    Slides: https://speakerdeck.com/jrf
    @jrf_nl @jrfnl @jrf
    @[email protected]

    View full-size slide