$30 off During Our Annual Pro Sale. View Details »

Extensible Plugins - A Case Study of Edupress

Extensible Plugins - A Case Study of Edupress

How plugins used in the Edupress project were made extensible.

Mark Wilkinson

July 12, 2014
Tweet

More Decks by Mark Wilkinson

Other Decks in Technology

Transcript

  1. EXTENSIBLE
    A Case Study of Edupress
    PLUGINS
    Mark Wilkinson Ÿ @wpmark

    View Slide

  2. Professional, affordable websites for schools and
    the education sector

    View Slide

  3. 31,491 PLUGINS
    *as of 05/06/2014

    View Slide

  4. WHAT?
    WHY?
    TOOLS/FUNCTIONS
    EXAMPLES

    View Slide

  5. PLUGIN and or THEME

    View Slide

  6. One that can be modified or extended
    without changing the plugin code itself
    AN EXTENSIBLE
    PLUGIN

    View Slide

  7. WHY?

    View Slide

  8. SAFE
    MODIFICATION
    FUNCTIONALITY Ÿ FRONT END OUTPUT

    View Slide

  9. https://www.flickr.com/photos/damndirty/10166197684

    View Slide

  10. View Slide

  11. TOOLS
    FUNCTIONS

    View Slide

  12. ACTIONS & FILTERS

    View Slide

  13. do_action();

    View Slide

  14. View Slide

  15. function wpmark_notice() {
    echo 'Site by Mark Wilkinson';
    }
    add_action( 'twentyfourteen_credits', 'wpmark_notice' );  

    View Slide

  16. apply_filters();

    View Slide

  17. Lorem ipsum dolor sit amet,
    consectetur adipiscing elit. Phasellus
    malesuada sem at sapien rutrum,
    eu…
     
    Lorem ipsum dolor sit amet,
    consectetur adipiscing elit. Phasellus
    malesuada sem at sapien rutrum,
    eu…
     

    View Slide

  18. ''.
    apply_filters( 'latest_tweets_render_before', '' ).
    $list.
    apply_filters( 'latest_tweets_render_after', '' ).
    '';  

    View Slide

  19. function wpmark_twitter( $content ) {
    /* get the twitter url from site options */
    $url = get_option( ‘twitter_url' );
    $content = '@' .
    basename( $url ) . '';
    return $content;
    }
    add_filter( 'latest_tweets_render_before', ’wpmark_twitter' );  

    View Slide

  20. IMPEMENTATION
    INTO YOUR OWN PLUGINS

    View Slide

  21. SETTING UP ARRAYS
    BEFORE/AFTER HTML OUTPUT
    BEFORE/AFTER SETUP

    View Slide

  22. $query_args = array(
    'post_type' => ’post',
    'cat' => 1
    );

    View Slide

  23. $query_args = apply_filters(
    'wpmark_query_args',
    array(
    'post_type' => ’post',
    'cat' => 1
    )
    );

    View Slide

  24. $query = new WP_Query( $query_args );
    while( $query->have_posts() ) : $query->the_post();
    ?>

    endwhile;

    View Slide

  25. $query = new WP_Query( $query_args );
    while( $query->have_posts() ) : $query->the_post();
    do_action( ‘wpmark_before_post’, get_the_ID() );
    ?>

    endwhile;

    View Slide

  26. $query = new WP_Query( $query_args );
    while( $query->have_posts() ) : $query->the_post();
    do_action( ‘wpmark_before_post’, get_the_ID() );
    ?>

    do_action( ‘wpmark_after_post’, get_the_ID() );
    endwhile;

    View Slide

  27. EXAMPLES

    View Slide

  28. View Slide

  29. $cew_feature_controls = apply_filters(
    'cew_feature_control_output',
    array() // plugins will fill this array
    );
    if( ! empty( $cew_feature_controls ) ) {
    foreach( $cew_feature_controls as $cew_feature_control ) {
    /* output feature controls here */
    }
    }

    View Slide

  30. function cew_usefulinfo_register_feature_control_setting() {
    /* register the settings */
    register_setting( 'cew_feature_control_settings',
    'useful_info_control' );
    }
    add_action( 'admin_init',
    'cew_usefulinfo_register_feature_control_setting' );

    View Slide

  31. function cew_featurecontrol_output( $controls ) {
    /* add our control to the controls array */
    $controls[] = array(
    'setting_name' => 'useful_info_control',
    'setting_label' => 'Useful Info'
    );
    return $controls;
    }
    add_filter( 'cew_feature_control_output',
    'cew_featurecontrol_output' );

    View Slide

  32. TEMPLATE
    OVERIDES

    View Slide

  33. add_menu_page(
    'Site Administration',
    'Dashboard',
    'edit_posts',
    'cew_dashboard',
    'cew_dashboard',
    ‘div’,
    1
    );

    View Slide

  34. function cew_dashboard() {
    if( file_exists( STYLESHEETPATH . 'cew/dashboard-home.php' ) ) {
    require_once STYLESHEETPATH . 'cew/dashboard-home.php';
    } else {
    /* plugin dashboard output here */
    }
    }

    View Slide

  35. View Slide

  36. do_action( 'cew_admin_before_content_blocks' );

    View Slide

  37. do_action( 'cew_admin_after_content_blocks' );

    View Slide

  38. $cew_add_content_blocks = apply_filters(
    'cew_add_content_blocks',
    array() // plugins filter this array
    );
    /* loop through each section outputting its content to the page */
    foreach( $cew_add_content_blocks as $cew_add_content_block ) {
    ?>
    esc_html( strtolower( $cew_add_content_block[ 'class' ] ) ); ?>">


    } // end loop through each block

    View Slide

  39. function cew_add_media_block( $array ) {
    /* add to our filtered array */
    $array[] = array(
    'title' => 'Media',
    'description' => 'Description here.',
    'view_all_link' => admin_url( 'upload.php'),
    'add_new_link' => admin_url( 'media-new.php' ),
    'class' => 'media-block'
    );
    return $array;
    }
    add_filter( 'cew_add_content_blocks', 'cew_add_media_block' );

    View Slide

  40. do_action();
    add_action();
    apply_filters();
    add_filter();
    OUR FRIENDS

    View Slide

  41. THANK YOU
    QUESTIONS?
    Mark Wilkinson | @wpmark

    View Slide