plugin development wpmeetup010

35
PLUGIN DEVELOPMENT #wpmeetup010

Upload: barry-kooij

Post on 17-May-2015

1.335 views

Category:

Technology


0 download

DESCRIPTION

The presentation I gave at WordPress meetup Rotterdam.

TRANSCRIPT

Page 1: Plugin development wpmeetup010

PLUGIN DEVELOPMENT

#wpmeetup010

Page 2: Plugin development wpmeetup010

BARRY KOOIJ

Twitter : @cageNLLead Developer WordPress @ INDICIAFreelance @ CageworksPlugin developer

What The FileSub PostsContributor EDD & extensies

Core contributorModerator WPNL forum

Page 3: Plugin development wpmeetup010

PLUGIN DEVELOPMENT

Page 4: Plugin development wpmeetup010

MIJN SETUP

Device MacBook AirIDE PhpStormVersiebeheer GIT, GitHub / private server

Commandline

Page 5: Plugin development wpmeetup010

ALTERNATIEVEN

IDE NuSphere PhpEDGIT Bitbucket, GitLab

TowerSVN Versions / Tortoise

Page 6: Plugin development wpmeetup010

DEBUGGINGdefine( 'WP_DEBUG', true );

if ( WP_DEBUG ) {define( 'SCRIPT_DEBUG', true );define( 'WP_DEBUG_LOG', true );define( 'WP_DEBUG_DISPLAY', true );@ini_set( 'display_errors', 0 );

}

display_errors = On;error_reporting = E_ALL | E_STRICT;

Page 7: Plugin development wpmeetup010

CODE TEMPLATES

https://gist.github.com/barrykooij/7632945

Page 8: Plugin development wpmeetup010

WORDPRESS CORE

Open source, maak hier gebruik van!API’s, API’S, API’sFilters & Hooks

Page 9: Plugin development wpmeetup010

API’S

Dashboard Widgets APIDatabase APIHTTP APIFile Header APIFilesystem APIMetadata APIOptions APIPlugin APIQuicktags API

Rewrite APISettings APIShortcode APITheme Modification APITheme Customization APITransients APIWidgets APIXML-RPC WordPress API

Page 10: Plugin development wpmeetup010

FILTERS & HOOKS

add_action( ‘hook_name’, ‘my_function’ );

do_action( ‘hook_name’ );

Page 11: Plugin development wpmeetup010

JS “HOOKS” (EVENTS)

$('body').bind(’event’, function(event, the_value) {});

$('body').trigger(’event', [ value ]);

Page 12: Plugin development wpmeetup010

BACKWARDS COMPATABILITY

Deprecate codePas later geen unit tests aan, maar voeg unit tests toe

Page 13: Plugin development wpmeetup010

CODE STANDARDS

http://codex.wordpress.org/WordPress_Coding_Standards

Page 14: Plugin development wpmeetup010

NAMING CONVENTIONS

function some_name( $some_variable ) { [...] }

class Walker_Category extends Walker { [...] } class WP_HTTP { [...] }

my-plugin-name.phpclass-my-class.php

Page 15: Plugin development wpmeetup010

DATABASES

Gebruik altijd de API!$wpdb->prepare

$wpdb->prepare( "SELECT * FROM {$wpdb->posts}" WHERE `ID` = %d", $special_id );

Page 16: Plugin development wpmeetup010

YODA CONDITIONS

if ( true == $the_force ) { $victorious = you_will( $be );

}

A little bizarre, it is, to read. Get used to it, you will.

Page 17: Plugin development wpmeetup010

UNIT TESTING

PHPUnit/** * @ticket 22212 */function test_get_multiple_roles_by_user_query() {

$this->factory->user->create_many( 2, array( 'role' => 'subscriber’ ) );

$this->factory->user->create_many( 3, array( 'role' => 'editor’ ) );

$wp_user_search = new WP_User_Query( array( 'role' => array( 'subscriber’, 'editor' ) ) );

$users = $wp_user_search->get_results();$this->assertEquals( 5, count( $users ) );

}

Page 18: Plugin development wpmeetup010

CHANGELOG

Hou bij wat je wanneer veranderd hebt

Page 19: Plugin development wpmeetup010

SUPPORT

Als je iets bouwt, support het danGeef op je website je support tijden aanSupport systemen

Page 20: Plugin development wpmeetup010

WORDPRESS.ORG REPO

Header afbeeldingDuidelijk omschrijvingDownloads i.c.m. ratingVraag om ratings!

Page 21: Plugin development wpmeetup010
Page 22: Plugin development wpmeetup010

CONDITIONAL LOADING OF CODE

Laad code enkel waar nodig

is_admin()

Page 23: Plugin development wpmeetup010

DOCUMENTATION

Schrijf je code doc direct

Betere IDE suggesties

Page 24: Plugin development wpmeetup010

CODE

Page 25: Plugin development wpmeetup010

OBJECTGEORIËNTEERD

OOPSingleton pattern

Page 26: Plugin development wpmeetup010

class My_Plugin {

private static $instance = null;

public static function get() {

if( null == self::$instance ) {self::$instance = new self();}

return self::$instance;

}

private function __construct() {}

}

Page 27: Plugin development wpmeetup010

function My_Plugin() {return My_Plugin::get();

}

add_action( 'plugins_loaded', function() {My_Plugin::get(); });

Page 28: Plugin development wpmeetup010

PLUGIN DIR & FILE

if ( ! defined( ’X_PLUGIN_DIR' ) ) {define( 'X_PLUGIN_DIR’, plugin_dir_path( __FILE__ ) );

}

if ( ! defined( ’X_PLUGIN_FILE' ) ) {define( ’X_PLUGIN_FILE', __FILE__ );

}

Page 29: Plugin development wpmeetup010

PREFIXES

WordPress : PHP version 5.2.4 or greater

Namespaces : 5.3.0 or greater

Tot die tijd, prefixen.

class SP_Post_Link_Manager { [...] }

Page 30: Plugin development wpmeetup010

SANITIZE & ESCAPE

sanitize_titleis_emailhttp://codex.wordpress.org/Data_Validation#Input_Validation

esc_urlesc_html

Page 31: Plugin development wpmeetup010

CAPABILITIES

if ( ! current_user_can( SP_Cap_Manager::get_capability( $_GET['sp_post_link'] ) ) ) {

return;}

Page 32: Plugin development wpmeetup010

NONCES

Number used ONCE

wp_nonce_field( plugin_basename( __FILE__ ), 'sp_sortable_nonce' );

if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], plugin_basename( __FILE__ ) ) ) {

return;}

Page 33: Plugin development wpmeetup010

DIRECT ACCESS

if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly

Page 34: Plugin development wpmeetup010

I18N

load_plugin_textdomain( 'sub-posts', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );

_e( ‘my-string’, ‘sub-posts’ );

Page 35: Plugin development wpmeetup010

Q&ATwitter @cageNLWordPress & Github: barrykooij7 januari meetup in Tilburg