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

10 Useful WordPress functions (and maybe more)

10 Useful WordPress functions (and maybe more)

You can't touch the WordPress core, but you can read it! (Slides for my talk at WordPress Meetup Milano)

Giustino Borzacchiello

May 05, 2015
Tweet

More Decks by Giustino Borzacchiello

Other Decks in Programming

Transcript

  1. wptexturize _wptexturize_pushpop_element wpautop shortcode_unautop seems_utf8
    _wp_specialchars wp_specialchars_decode wp_check_invalid_utf8 utf8_uri_encode
    remove_accents sanitize_file_name sanitize_user sanitize_key sanitize_title
    sanitize_title_for_query sanitize_title_with_dashes sanitize_sql_orderby sanitize_html_class
    convert_chars balanceTags force_balance_tags format_to_edit zeroise backslashit
    trailingslashit untrailingslashit addslashes_gpc stripslashes_deep urlencode_deep
    rawurlencode_deep antispambot _make_url_clickable_cb _make_web_ftp_clickable_cb
    _make_email_clickable_cb make_clickable _split_str_by_whitespace wp_rel_nofollow
    wp_rel_nofollow_callback translate_smiley convert_smilies is_email wp_iso_descrambler
    _wp_iso_convert get_gmt_from_date get_date_from_gmt iso8601_timezone_to_offset
    iso8601_to_datetime popuplinks sanitize_email human_time_diff wp_trim_excerpt
    wp_trim_words ent2ncr wp_richedit_pre wp_htmledit_pre _deep_replace esc_sql esc_url
    esc_url_raw htmlentities2 esc_js esc_html esc_attr esc_textarea tag_escape
    wp_make_link_relative sanitize_option wp_parse_str wp_pre_kses_less_than
    wp_pre_kses_less_than_callback wp_sprintf wp_sprintf_l wp_html_excerpt
    links_add_base_url _links_add_base links_add_target _links_add_target
    normalize_whitespace wp_strip_all_tags sanitize_text_field wp_basename capital_P_dangit
    sanitize_mime_type sanitize_trackback_urls wp_slash wp_unslash get_url_in_content
    10* useful
    WordPress
    functions
    *maybe more
    WordPress Meetup Milano - 5 May 2015

    View Slide

  2. Giustino Borzacchiello
    @jubstuff

    View Slide

  3. The #1 rule of
    WordPress
    development

    View Slide

  4. View Slide

  5. DON’T TOUCH THE CORE

    View Slide

  6. The core

    View Slide

  7. The core
    too hot!

    View Slide

  8. The core

    View Slide

  9. The core

    View Slide

  10. /wp-admin
    Functions and templates to bootstrap the
    WordPress admin.
    /wp-includes
    Most WordPress functionality is here.

    View Slide

  11. DON’T TOUCH THE CORE
    ... but you can read it!

    View Slide

  12. checked()
    Compares the first two arguments and if identical
    marks as checked.

    View Slide

  13. wp-includes/general-template.php
    >
    checked()

    View Slide

  14. wp-includes/general-template.php
    >
    checked()

    View Slide

  15. selected()
    Compares the first two arguments and if identical
    marks as selected.
    wp-includes/general-template.php
    disabled()
    Compares the first two arguments and if identical
    marks as disabled.

    View Slide

  16. Escaping functions.
    esc_*

    View Slide

  17. ?

    View Slide

  18. Escaping functions. < becomes <
    esc_*()

    View Slide

  19. ➢ esc_sql
    ➢ esc_url
    ➢ esc_url_raw
    ➢ esc_js
    ➢ esc_html
    ➢ esc_attr
    ➢ esc_textarea
    esc_*()
    wp-includes/formatting.php

    View Slide

  20. echo "Hello WordPress Meetup; alert('Ciao!');";
    // Hello WordPress Meetup;
    esc_attr()
    wp-includes/formatting.php

    View Slide

  21. echo esc_attr("Hello WordPress Meetup; alert('Ciao’)<br/>");
    // Hello WordPress Meetup;
    // <script>alert('Ciao!');</script>
    esc_attr()
    wp-includes/formatting.php

    View Slide

  22. // Retrieving data from user input...
    $name = ( isset( $_POST['name'] ) ) ? $_POST['name'] : '';
    // ...and displaying it

    Example: esc_attr()
    wp-includes/formatting.php

    View Slide

  23. Test if the current browser runs on a mobile device
    (smart phone, tablet, etc.).
    wp_is_mobile()

    View Slide

  24. function add_my_cool_js_effect_on_desktop() {
    if ( wp_is_mobile() ) {
    return;
    }
    wp_enqueue_script('cool-js-effect', PATH_TO_MY_JS);
    }
    wp_is_mobile()
    wp-includes/vars.php

    View Slide

  25. Utility functions for filters.
    __return_*()

    View Slide

  26. ➢ __return_empty_array
    ➢ __return_null
    ➢ __return_empty_string
    ➢ __return_zero
    ➢ __return_false
    ➢ __return_true
    __return_*()
    wp-includes/functions.php

    View Slide

  27. add_filter( 'show_admin_bar', function(){
    return false;
    } );
    Example: __return_false()
    wp-includes/functions.php

    View Slide

  28. add_filter( 'show_admin_bar', '__return_false' );
    Example: __return_false()
    wp-includes/functions.php

    View Slide

  29. Display a noindex meta tag.
    wp_no_robots()

    View Slide

  30. /**
    * Display a noindex meta tag.
    * @since 3.3.0
    */
    function wp_no_robots() {
    echo "\n";
    }
    wp_no_robots()
    wp-includes/general-template.php

    View Slide

  31. // Add this to block search engines on page named 'no-search'
    add_action('init', function() {
    if(is_page('no-search')) {
    add_action( 'wp_head', 'wp_no_robots' );
    }
    });
    wp_no_robots()
    wp-includes/general-template.php

    View Slide

  32. Merge user defined arguments into defaults array.
    wp_parse_args()

    View Slide

  33. $defaults = ['count' => 5, 'orderby' => 'date', 'order' => 'asc',];
    $params = ['orderby' => 'title', 'order' => 'desc',];
    $options = wp_parse_args($params, $defaults);
    // $options = [
    // 'count' => 5,
    // 'orderby' => 'title',
    // 'order' => 'desc',
    // ]
    wp_parse_args()
    wp-includes/functions.php

    View Slide

  34. // MyWidget.php
    public function form( $instance ) {
    $defaults = array(
    'num_entries' => 10,
    'widget_title' => __( 'My title', 'ten-func' ),
    'scale' => 10,
    );
    $instance = wp_parse_args( (array) $instance, $defaults );
    // display the form
    }
    wp_parse_args()
    wp-includes/functions.php

    View Slide

  35. Extract a slice of an array, given a list of keys.
    wp_array_slice_assoc()

    View Slide

  36. $arr = ['one'=> 1, 'two'=> 2, 'three'=> 3, 'four'=> 4, 'five'=> 5 ];
    $odd = wp_array_slice_assoc($arr, ['one', 'three', 'five']);
    ------------------
    array (size=3)
    'one' => int 1
    'three' => int 3
    'five' => int 5
    wp_array_slice_assoc()
    wp-includes/functions.php

    View Slide

  37. Send a JSON response back to an Ajax request,
    indicating success.
    wp_send_json_success()

    View Slide

  38. jQuery(document).ready(function($) {
    var data = { 'action': 'my_action', 'post_id': 4 };
    jQuery.post(my_ajax_url, data, function(response) {
    alert('This is from PHP: ' + response);
    });
    });
    wp_send_json_success()
    wp-includes/functions.php

    View Slide

  39. add_action('wp_ajax_nopriv_my_action', 'my_ajax_handler');
    function my_ajax_handler() {
    $post_id = intval($_POST['post_id']);
    // Retrieve some $output_data related to that post
    wp_send_json_success($output_data);
    }
    wp_send_json_success()
    wp-includes/functions.php

    View Slide

  40. jQuery(document).ready(function($) {
    var data = { 'action': 'my_action' };
    jQuery.post(my_ajax_url, data, function(response) {
    alert('This is from PHP: ' + response);
    });
    });
    wp_send_json_success()
    wp-includes/functions.php
    {
    success: true,
    data: $output_data
    }

    View Slide

  41. wp_send_json_error()
    Send a JSON response back to an Ajax request,
    indicating failure.
    wp-includes/functions.php
    wp_send_json()
    Send a JSON response back to an Ajax request.

    View Slide

  42. Where do I start?

    View Slide

  43. /wp-includes/general-template.php
    Mostly template tags.
    /wp-includes/functions.php
    Functions, functions everywhere.

    View Slide

  44. /wp-includes/formatting.php
    Strings, dates, and general formatting functions.
    /wp-includes/pluggable.php
    Overwritable functions. You can be creative, here
    (if you know what you are doing).

    View Slide

  45. Developer reference
    https://developer.wordpress.org/reference/

    View Slide

  46. PHP xref
    http://phpxref.ftwr.co.uk/wordpress/

    View Slide

  47. wpseek
    http://wpseek.com/

    View Slide

  48. Try to find these functions:
    wp_list_pluck()
    wp_list_filter()
    wp_extract_urls()
    make_clickable()
    add_query_arg()
    _split_str_by_whitespace()
    wp_remote_get()
    wp_parse_id_list()

    View Slide

  49. View Slide

  50. grazie.

    View Slide

  51. grazie.
    Domande?

    View Slide

  52. Earth image
    http://www.desy.de/information__services/press/press_releases/2013/pr_071113/index_eng.html

    View Slide