plugin development wpmeetup010
DESCRIPTION
The presentation I gave at WordPress meetup Rotterdam.TRANSCRIPT
PLUGIN DEVELOPMENT
#wpmeetup010
BARRY KOOIJ
Twitter : @cageNLLead Developer WordPress @ INDICIAFreelance @ CageworksPlugin developer
What The FileSub PostsContributor EDD & extensies
Core contributorModerator WPNL forum
PLUGIN DEVELOPMENT
MIJN SETUP
Device MacBook AirIDE PhpStormVersiebeheer GIT, GitHub / private server
Commandline
ALTERNATIEVEN
IDE NuSphere PhpEDGIT Bitbucket, GitLab
TowerSVN Versions / Tortoise
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;
CODE TEMPLATES
https://gist.github.com/barrykooij/7632945
WORDPRESS CORE
Open source, maak hier gebruik van!API’s, API’S, API’sFilters & Hooks
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
FILTERS & HOOKS
add_action( ‘hook_name’, ‘my_function’ );
do_action( ‘hook_name’ );
JS “HOOKS” (EVENTS)
$('body').bind(’event’, function(event, the_value) {});
$('body').trigger(’event', [ value ]);
BACKWARDS COMPATABILITY
Deprecate codePas later geen unit tests aan, maar voeg unit tests toe
CODE STANDARDS
http://codex.wordpress.org/WordPress_Coding_Standards
NAMING CONVENTIONS
function some_name( $some_variable ) { [...] }
class Walker_Category extends Walker { [...] } class WP_HTTP { [...] }
my-plugin-name.phpclass-my-class.php
DATABASES
Gebruik altijd de API!$wpdb->prepare
$wpdb->prepare( "SELECT * FROM {$wpdb->posts}" WHERE `ID` = %d", $special_id );
YODA CONDITIONS
if ( true == $the_force ) { $victorious = you_will( $be );
}
A little bizarre, it is, to read. Get used to it, you will.
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 ) );
}
CHANGELOG
Hou bij wat je wanneer veranderd hebt
SUPPORT
Als je iets bouwt, support het danGeef op je website je support tijden aanSupport systemen
WORDPRESS.ORG REPO
Header afbeeldingDuidelijk omschrijvingDownloads i.c.m. ratingVraag om ratings!
CONDITIONAL LOADING OF CODE
Laad code enkel waar nodig
is_admin()
DOCUMENTATION
Schrijf je code doc direct
Betere IDE suggesties
CODE
OBJECTGEORIËNTEERD
OOPSingleton pattern
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() {}
}
function My_Plugin() {return My_Plugin::get();
}
add_action( 'plugins_loaded', function() {My_Plugin::get(); });
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__ );
}
PREFIXES
WordPress : PHP version 5.2.4 or greater
Namespaces : 5.3.0 or greater
Tot die tijd, prefixen.
class SP_Post_Link_Manager { [...] }
SANITIZE & ESCAPE
sanitize_titleis_emailhttp://codex.wordpress.org/Data_Validation#Input_Validation
esc_urlesc_html
CAPABILITIES
if ( ! current_user_can( SP_Cap_Manager::get_capability( $_GET['sp_post_link'] ) ) ) {
return;}
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;}
DIRECT ACCESS
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
I18N
load_plugin_textdomain( 'sub-posts', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
_e( ‘my-string’, ‘sub-posts’ );
Q&ATwitter @cageNLWordPress & Github: barrykooij7 januari meetup in Tilburg