SlideShare a Scribd company logo
1 of 26
Download to read offline
Creating Extensible
Plugins for WordPress
Hristo Chakarov
WordUp! Conference, Sofia, 2013
Who am I?
● I'm in the web since 2002
○ professionally since 2007
● Currently working as a Senior JavaScript
developer @ Netclime Inc.
○ one product - SiteKreator (website builder)
http://sitekreator.com
● Love WordPress
○ 2 plugins on the official plugins page
○ several commercial projects on top of the platform
○ co-founder of WordPress Bulgarian User Group
(WPBGUG)
http://wpbgug.org/
Why WordPress?
● Which is the best CMS in the World?
○ In fact, there's no such
● However, WordPress is much, much better
than its most famous competitors
○ Great Admin UI
○ Rich & well documented API
○ Easy to extend
■ you don't have to be very experienced
programmer in order to create a plugin
○ Huge community
■ tons of free & paid Themes & Plugins
○ But last 2 might be problematic
Today:
1. Why do we need to make plugins extensible
2. Anatomy of WordPress hooks
3. Differences between actions & filters
+ examples
4. Overwriting OOP-style plugins
5. Tips
6. Demo, plugin examples, good to read
Quick Questions
● How many of you have contributed at least 1
plugin in WordPress' Plugin Directory?
● How often do you feel the need to tweak a
3rd party plugin in order to fit 100% in your
project(s)?
● When you start coding new plugin, have you
ever felt the need to reuse functionality from
another your plugin?
Consider the following scenario:
1. You need extra functionality for your WP
project
2. You enjoy a plugin and you download it
3. There's that very tiny thing that this plugin
does not bring to you
4. You modify plugin's source code
5. You forget about modifying the source
6. A new version of the plugin is available. You
update your copy and after the update you
look at your site and...
...Damn! My changes got lost!
Shooting at the developer won't solve the problem
What can be done?
Nothing.
But at least we can start making our own
plugins extensible and make the World better :)
Benefits of extensible plugin
● other developers can easily extend your
plugins so they serve their needs
● code reuse - we may have a base plugin
(core) and a lot of extensions (other plugins)
built on top of it
OK, but how do we make our WP
plugin extensible?
How do you extend WordPress?
● by using the platform's hooks
add_action
remove_action
add_filter
remove_filter
It's the same if you want to make your plugin
extensible - just register your own hooks!
● do_action
● apply_filters
How actions & filters work
(Minimum Theory)
● add_action & add_filter register handlers
(functions) to be executed on certain event
( hook_id, fn_name, priority, num_args )
● do_action & apply_filters execute all
handlers when called
Difference between Actions & Filters
● filters accept, modify & return data
○ strings
○ arrays
○ objects
● actions just execute
○ actions are just like events - they "trigger"
● to modify strings (can be HTML or any other)
// in your core plugin
echo apply_filters(
'my_plugin_html',
'<strong>Hello, world!</strong>'
);
// in extending plugin
add_filter( 'my_plugin_html',
'custom_html_filter' );
function custom_html_filter( $html ) {
return '<div>' . $html . '</div>';
}
Use filters:
Use filters:
● for HTML its better to work on DOM level
○ Simple HTML DOM library is good for that
$dom = str_get_html('<b>Hello, world!</b>');
apply_filters( 'my_plugin_dom', $dom );
echo $dom->save();
add_filter( 'my_plugin_dom',
'custom_dom_filter' );
function custom_dom_filter( $dom ) {
// replace the <b> with <strong>
foreach ( $b as $dom->find('b') )
$b->outerhtml = '<strong>'.$b-
>innertext.'</strong>';
return $dom;
Use filters:
● to modify WP Query
// define initial set of query params
$query_args = array(
'post_type' => 'books',
'author' => 3
);
$books = new WP_Query( apply_filters(
'myplugin_query', $query_args
) );
add_filter('myplugin_query', 'modify_query');
function modify_query( $query_args ) {
$query_args['posts_per_page'] = 5;
return $query_args;
Use actions:
● to spice HTML markup
Use actions:
● to print resources
// in the core plugin
do_action( 'myplugin_print_resources' );
// in the extending plugin
add_action(
'myplugin_print_resources',
'myplugin_print_scripts'
);
function myplugin_print_scripts() {
echo '<script src=".."></script>
}
Lets make our plugin more OOP!
● define a main class for your plugin
● instantiate the class on WordPress <init>
class MyPlugin {
function myMethod() {
// ...
}
}
add_action( 'init', 'myplugin_init' );
function myplugin_init() {
global $plugin_instance;
$plugin_instance = new MyPlugin();
}
Overwrite
● define extending class & overwrite base
● instantiate the class on WordPress <init>
class ExtendingPlugin extends MyPlugin {
function myMethod() {
$this->parent(); // not necessary
// .. extra functionality here
}
}
remove_action( 'init', 'myplugin_init' );
add_action( 'init', 'extending_init' );
function extending_init() {
global $plugin_instance;
$plugin_instance = new ExtendingPlugin();
}
Tips
● plan your actions & filters carefully
○ think where you will need to provide a hook
○ try to use descriptive & easy to remember names
filter_html (too generic)
wpplg_tpl_html (what?)
a_really_awesome_filter_html (too long)
myplugin_filter_html (almost perfect)
○ don't overhook
● its good to create a documentation page
● comment, comment, comment!
○ comments can be your best friend
● Image Widget
http://wordpress.org/extend/plugins/image-widget/
● NextGEN Gallery
http://wordpress.org/extend/plugins/nextgen-gallery/
● bbPress
http://wordpress.org/extend/plugins/bbpress/
● WPML
http://wpml.org/
● WooCommerce
http://www.woothemes.com/woocommerce/
Extensible plugins for inspiration
Extending NextGEN Gallery plugin
with custom template
Demo
I recommend you to read
● Anatomy of a WordPress Plugin
http://www.packtpub.com/article/anatomy-wordpress-plugin
● Inside WordPress Actions And Filters
http://wp.smashingmagazine.com/2012/02/16/inside-wordpress-
actions-filters/
● Writing Extensible Plugins With Actions and
Filters
http://wp.tutsplus.com/tutorials/plugins/writing-extensible-
plugins-with-actions-and-filters/
● 5 Things I’ve Learned About Writing Flexible
Plugins
http://www.kungfugrep.com/5-learned-writing-flexible-
plugins/
Time for questions
Your turn - word up!
mail (at) ickata.net
blog.ickata.net
facebook.com/ickatanet
github.com/ickata
Thank You!

More Related Content

What's hot

Making Django and NoSQL Play Nice
Making Django and NoSQL Play NiceMaking Django and NoSQL Play Nice
Making Django and NoSQL Play NiceAlex Gaynor
 
第1回名古屋Grails/Groogy勉強会「Grailsを始めてみよう!」
第1回名古屋Grails/Groogy勉強会「Grailsを始めてみよう!」第1回名古屋Grails/Groogy勉強会「Grailsを始めてみよう!」
第1回名古屋Grails/Groogy勉強会「Grailsを始めてみよう!」Tsuyoshi Yamamoto
 
Django and Mongoengine
Django and MongoengineDjango and Mongoengine
Django and Mongoengineaustinpublic
 
WordPress Realtime - WordCamp São Paulo 2015
WordPress Realtime - WordCamp São Paulo 2015WordPress Realtime - WordCamp São Paulo 2015
WordPress Realtime - WordCamp São Paulo 2015Fernando Daciuk
 
How to build a Dart and Firebase app in 30 mins
How to build a Dart and Firebase app in 30 minsHow to build a Dart and Firebase app in 30 mins
How to build a Dart and Firebase app in 30 minsJana Moudrá
 
A Gentle Introduction to Drupal's Views API
A Gentle Introduction to Drupal's Views APIA Gentle Introduction to Drupal's Views API
A Gentle Introduction to Drupal's Views APIDan Muzyka
 
Views Style Plugins
Views Style PluginsViews Style Plugins
Views Style Pluginsmwrather
 
Transakcyjność w django
Transakcyjność w djangoTransakcyjność w django
Transakcyjność w djangoMarcin Baran
 
webpack 101 slides
webpack 101 slideswebpack 101 slides
webpack 101 slidesmattysmith
 
Future of Web Development
Future of Web DevelopmentFuture of Web Development
Future of Web DevelopmentZeno Rocha
 
Webpack Tutorial, Uppsala JS
Webpack Tutorial, Uppsala JSWebpack Tutorial, Uppsala JS
Webpack Tutorial, Uppsala JSEmil Öberg
 
Passo a Passo para criar uma aplicação Móvel Híbrida
Passo a Passo para criar uma aplicação Móvel HíbridaPasso a Passo para criar uma aplicação Móvel Híbrida
Passo a Passo para criar uma aplicação Móvel HíbridaJuliano Martins
 
Packing for the Web with Webpack
Packing for the Web with WebpackPacking for the Web with Webpack
Packing for the Web with WebpackThiago Temple
 
Learning django step 1
Learning django step 1Learning django step 1
Learning django step 1永昇 陳
 

What's hot (20)

Making Django and NoSQL Play Nice
Making Django and NoSQL Play NiceMaking Django and NoSQL Play Nice
Making Django and NoSQL Play Nice
 
Django cms best practices
Django cms best practicesDjango cms best practices
Django cms best practices
 
第1回名古屋Grails/Groogy勉強会「Grailsを始めてみよう!」
第1回名古屋Grails/Groogy勉強会「Grailsを始めてみよう!」第1回名古屋Grails/Groogy勉強会「Grailsを始めてみよう!」
第1回名古屋Grails/Groogy勉強会「Grailsを始めてみよう!」
 
Django and Mongoengine
Django and MongoengineDjango and Mongoengine
Django and Mongoengine
 
WordPress Realtime - WordCamp São Paulo 2015
WordPress Realtime - WordCamp São Paulo 2015WordPress Realtime - WordCamp São Paulo 2015
WordPress Realtime - WordCamp São Paulo 2015
 
Django Mongodb Engine
Django Mongodb EngineDjango Mongodb Engine
Django Mongodb Engine
 
How to build a Dart and Firebase app in 30 mins
How to build a Dart and Firebase app in 30 minsHow to build a Dart and Firebase app in 30 mins
How to build a Dart and Firebase app in 30 mins
 
A Gentle Introduction to Drupal's Views API
A Gentle Introduction to Drupal's Views APIA Gentle Introduction to Drupal's Views API
A Gentle Introduction to Drupal's Views API
 
Views Style Plugins
Views Style PluginsViews Style Plugins
Views Style Plugins
 
Transakcyjność w django
Transakcyjność w djangoTransakcyjność w django
Transakcyjność w django
 
webpack 101 slides
webpack 101 slideswebpack 101 slides
webpack 101 slides
 
Future of Web Development
Future of Web DevelopmentFuture of Web Development
Future of Web Development
 
Webpack DevTalk
Webpack DevTalkWebpack DevTalk
Webpack DevTalk
 
An Intro into webpack
An Intro into webpackAn Intro into webpack
An Intro into webpack
 
Webpack Tutorial, Uppsala JS
Webpack Tutorial, Uppsala JSWebpack Tutorial, Uppsala JS
Webpack Tutorial, Uppsala JS
 
Webpack: from 0 to 2
Webpack: from 0 to 2Webpack: from 0 to 2
Webpack: from 0 to 2
 
Passo a Passo para criar uma aplicação Móvel Híbrida
Passo a Passo para criar uma aplicação Móvel HíbridaPasso a Passo para criar uma aplicação Móvel Híbrida
Passo a Passo para criar uma aplicação Móvel Híbrida
 
Packing for the Web with Webpack
Packing for the Web with WebpackPacking for the Web with Webpack
Packing for the Web with Webpack
 
Learning django step 1
Learning django step 1Learning django step 1
Learning django step 1
 
Automation Like A Pro
Automation Like A ProAutomation Like A Pro
Automation Like A Pro
 

Viewers also liked

Node workShop Basic
Node workShop BasicNode workShop Basic
Node workShop BasicCaesar Chi
 
Engaging Teens: taking health class out of the classroom
Engaging Teens: taking health class out of the classroomEngaging Teens: taking health class out of the classroom
Engaging Teens: taking health class out of the classroomJessica Ken
 
20120722 word press
20120722 word press20120722 word press
20120722 word pressSeungmin Sun
 
Hiring trends 2012
Hiring trends 2012Hiring trends 2012
Hiring trends 2012Lynn Hazan
 
6. Identyfikowanie i charakteryzowanie jednostki centralnej komputera
6. Identyfikowanie i charakteryzowanie jednostki centralnej komputera6. Identyfikowanie i charakteryzowanie jednostki centralnej komputera
6. Identyfikowanie i charakteryzowanie jednostki centralnej komputerakalaxq
 
Without Singing The World Would Be Barren
Without Singing The World Would Be BarrenWithout Singing The World Would Be Barren
Without Singing The World Would Be BarrenRenny
 
Exploratory Analysis
Exploratory AnalysisExploratory Analysis
Exploratory AnalysisAn Wang
 
包小強的真心告白
包小強的真心告白包小強的真心告白
包小強的真心告白lu13589
 
Content Marketing Strategic Workshop Presentation
Content Marketing Strategic Workshop PresentationContent Marketing Strategic Workshop Presentation
Content Marketing Strategic Workshop PresentationLinkedIn Canada
 
09NTC: Your Website as an Experience of Your Brand (PETA)
09NTC: Your Website as an Experience of Your Brand (PETA)09NTC: Your Website as an Experience of Your Brand (PETA)
09NTC: Your Website as an Experience of Your Brand (PETA)Farra Trompeter, Big Duck
 
Recruitment 2016: Playing the Long Game with Your Lead Pool
Recruitment 2016: Playing the Long Game with Your Lead PoolRecruitment 2016: Playing the Long Game with Your Lead Pool
Recruitment 2016: Playing the Long Game with Your Lead PoolConverge Consulting
 
Dr Chris Stout Outcomes Management
Dr Chris Stout Outcomes ManagementDr Chris Stout Outcomes Management
Dr Chris Stout Outcomes ManagementDr. Chris Stout
 
鄧宗業 菸商行銷策略
鄧宗業 菸商行銷策略鄧宗業 菸商行銷策略
鄧宗業 菸商行銷策略None
 
Analisis foda
Analisis fodaAnalisis foda
Analisis fodaleodeg
 
Big Data Malaysia - A Primer on Deep Learning
Big Data Malaysia - A Primer on Deep LearningBig Data Malaysia - A Primer on Deep Learning
Big Data Malaysia - A Primer on Deep LearningPoo Kuan Hoong
 

Viewers also liked (18)

Channel strip (mixer)
Channel strip (mixer)Channel strip (mixer)
Channel strip (mixer)
 
Node workShop Basic
Node workShop BasicNode workShop Basic
Node workShop Basic
 
Engaging Teens: taking health class out of the classroom
Engaging Teens: taking health class out of the classroomEngaging Teens: taking health class out of the classroom
Engaging Teens: taking health class out of the classroom
 
20120722 word press
20120722 word press20120722 word press
20120722 word press
 
Hiring trends 2012
Hiring trends 2012Hiring trends 2012
Hiring trends 2012
 
6. Identyfikowanie i charakteryzowanie jednostki centralnej komputera
6. Identyfikowanie i charakteryzowanie jednostki centralnej komputera6. Identyfikowanie i charakteryzowanie jednostki centralnej komputera
6. Identyfikowanie i charakteryzowanie jednostki centralnej komputera
 
Without Singing The World Would Be Barren
Without Singing The World Would Be BarrenWithout Singing The World Would Be Barren
Without Singing The World Would Be Barren
 
Exploratory Analysis
Exploratory AnalysisExploratory Analysis
Exploratory Analysis
 
包小強的真心告白
包小強的真心告白包小強的真心告白
包小強的真心告白
 
Content Marketing Strategic Workshop Presentation
Content Marketing Strategic Workshop PresentationContent Marketing Strategic Workshop Presentation
Content Marketing Strategic Workshop Presentation
 
09NTC: Your Website as an Experience of Your Brand (PETA)
09NTC: Your Website as an Experience of Your Brand (PETA)09NTC: Your Website as an Experience of Your Brand (PETA)
09NTC: Your Website as an Experience of Your Brand (PETA)
 
Recruitment 2016: Playing the Long Game with Your Lead Pool
Recruitment 2016: Playing the Long Game with Your Lead PoolRecruitment 2016: Playing the Long Game with Your Lead Pool
Recruitment 2016: Playing the Long Game with Your Lead Pool
 
Dr Chris Stout Outcomes Management
Dr Chris Stout Outcomes ManagementDr Chris Stout Outcomes Management
Dr Chris Stout Outcomes Management
 
Banned Books
Banned BooksBanned Books
Banned Books
 
鄧宗業 菸商行銷策略
鄧宗業 菸商行銷策略鄧宗業 菸商行銷策略
鄧宗業 菸商行銷策略
 
Problemas ambientales
Problemas ambientalesProblemas ambientales
Problemas ambientales
 
Analisis foda
Analisis fodaAnalisis foda
Analisis foda
 
Big Data Malaysia - A Primer on Deep Learning
Big Data Malaysia - A Primer on Deep LearningBig Data Malaysia - A Primer on Deep Learning
Big Data Malaysia - A Primer on Deep Learning
 

Similar to Creating Extensible Plugins for WordPress

Plugin development demystified 2017
Plugin development demystified 2017Plugin development demystified 2017
Plugin development demystified 2017ylefebvre
 
Write your first WordPress plugin
Write your first WordPress pluginWrite your first WordPress plugin
Write your first WordPress pluginAnthony Montalbano
 
EuroPython 2013 - Python3 TurboGears Training
EuroPython 2013 - Python3 TurboGears TrainingEuroPython 2013 - Python3 TurboGears Training
EuroPython 2013 - Python3 TurboGears TrainingAlessandro Molina
 
WordPress Beirut 16th meetup September
WordPress Beirut 16th meetup   SeptemberWordPress Beirut 16th meetup   September
WordPress Beirut 16th meetup SeptemberFadi Nicolas Zahhar
 
Top 10 WordPress Plugins
Top 10 WordPress PluginsTop 10 WordPress Plugins
Top 10 WordPress PluginsManny Sarmiento
 
WordPress Plugin Development- Rich Media Institute Workshop
WordPress Plugin Development- Rich Media Institute WorkshopWordPress Plugin Development- Rich Media Institute Workshop
WordPress Plugin Development- Rich Media Institute WorkshopBrendan Sera-Shriar
 
Plugin Development for Beginners v.2019
Plugin Development for Beginners v.2019Plugin Development for Beginners v.2019
Plugin Development for Beginners v.2019Joe Cartonia
 
WordPress Plugin Development 201
WordPress Plugin Development 201WordPress Plugin Development 201
WordPress Plugin Development 201ylefebvre
 
Developing WordPress Plugins : For Begineers
Developing WordPress Plugins :  For BegineersDeveloping WordPress Plugins :  For Begineers
Developing WordPress Plugins : For BegineersM A Hossain Tonu
 
WordPress basic fundamental of plugin development and creating shortcode
WordPress basic fundamental of plugin development and creating shortcodeWordPress basic fundamental of plugin development and creating shortcode
WordPress basic fundamental of plugin development and creating shortcodeRakesh Kushwaha
 
Advanced WordPress Optimization - iGaming Supershow 2012
Advanced WordPress Optimization - iGaming Supershow 2012Advanced WordPress Optimization - iGaming Supershow 2012
Advanced WordPress Optimization - iGaming Supershow 2012Bastian Grimm
 
Making the Most of Plug-ins - WordCamp Toronto 2008
Making the Most of Plug-ins - WordCamp Toronto 2008Making the Most of Plug-ins - WordCamp Toronto 2008
Making the Most of Plug-ins - WordCamp Toronto 2008Brendan Sera-Shriar
 
Google Apps Script for Beginners- Amazing Things with Code
Google Apps Script for Beginners- Amazing Things with CodeGoogle Apps Script for Beginners- Amazing Things with Code
Google Apps Script for Beginners- Amazing Things with CodeLaurence Svekis ✔
 
Angular.js for beginners
Angular.js for beginners Angular.js for beginners
Angular.js for beginners Basia Madej
 
Google App Engine for PHP
Google App Engine for PHP Google App Engine for PHP
Google App Engine for PHP Eric Johnson
 
Extending WordPress' TinyMCE
Extending WordPress' TinyMCEExtending WordPress' TinyMCE
Extending WordPress' TinyMCEHristo Chakarov
 

Similar to Creating Extensible Plugins for WordPress (20)

Plugin development demystified 2017
Plugin development demystified 2017Plugin development demystified 2017
Plugin development demystified 2017
 
Write your first WordPress plugin
Write your first WordPress pluginWrite your first WordPress plugin
Write your first WordPress plugin
 
EuroPython 2013 - Python3 TurboGears Training
EuroPython 2013 - Python3 TurboGears TrainingEuroPython 2013 - Python3 TurboGears Training
EuroPython 2013 - Python3 TurboGears Training
 
Wordpress as a framework
Wordpress as a frameworkWordpress as a framework
Wordpress as a framework
 
WordPress Beirut 16th meetup September
WordPress Beirut 16th meetup   SeptemberWordPress Beirut 16th meetup   September
WordPress Beirut 16th meetup September
 
Top 10 WordPress Plugins
Top 10 WordPress PluginsTop 10 WordPress Plugins
Top 10 WordPress Plugins
 
WordPress Plugin Development- Rich Media Institute Workshop
WordPress Plugin Development- Rich Media Institute WorkshopWordPress Plugin Development- Rich Media Institute Workshop
WordPress Plugin Development- Rich Media Institute Workshop
 
Plugin Development for Beginners v.2019
Plugin Development for Beginners v.2019Plugin Development for Beginners v.2019
Plugin Development for Beginners v.2019
 
WordPress Plugin Development 201
WordPress Plugin Development 201WordPress Plugin Development 201
WordPress Plugin Development 201
 
Developing WordPress Plugins : For Begineers
Developing WordPress Plugins :  For BegineersDeveloping WordPress Plugins :  For Begineers
Developing WordPress Plugins : For Begineers
 
WordPress basic fundamental of plugin development and creating shortcode
WordPress basic fundamental of plugin development and creating shortcodeWordPress basic fundamental of plugin development and creating shortcode
WordPress basic fundamental of plugin development and creating shortcode
 
Google App Engine tutorial
Google App Engine tutorialGoogle App Engine tutorial
Google App Engine tutorial
 
Advanced WordPress Optimization - iGaming Supershow 2012
Advanced WordPress Optimization - iGaming Supershow 2012Advanced WordPress Optimization - iGaming Supershow 2012
Advanced WordPress Optimization - iGaming Supershow 2012
 
Django Girls Tutorial
Django Girls TutorialDjango Girls Tutorial
Django Girls Tutorial
 
Making the Most of Plug-ins - WordCamp Toronto 2008
Making the Most of Plug-ins - WordCamp Toronto 2008Making the Most of Plug-ins - WordCamp Toronto 2008
Making the Most of Plug-ins - WordCamp Toronto 2008
 
Google Apps Script for Beginners- Amazing Things with Code
Google Apps Script for Beginners- Amazing Things with CodeGoogle Apps Script for Beginners- Amazing Things with Code
Google Apps Script for Beginners- Amazing Things with Code
 
Write Your First WordPress Plugin
Write Your First WordPress PluginWrite Your First WordPress Plugin
Write Your First WordPress Plugin
 
Angular.js for beginners
Angular.js for beginners Angular.js for beginners
Angular.js for beginners
 
Google App Engine for PHP
Google App Engine for PHP Google App Engine for PHP
Google App Engine for PHP
 
Extending WordPress' TinyMCE
Extending WordPress' TinyMCEExtending WordPress' TinyMCE
Extending WordPress' TinyMCE
 

More from Hristo Chakarov

Cross-platform JavaScript
Cross-platform JavaScriptCross-platform JavaScript
Cross-platform JavaScriptHristo Chakarov
 
DOM Performance (JSNext Bulgaria)
DOM Performance (JSNext Bulgaria)DOM Performance (JSNext Bulgaria)
DOM Performance (JSNext Bulgaria)Hristo Chakarov
 
Атоматизация с Grunt
Атоматизация с GruntАтоматизация с Grunt
Атоматизация с GruntHristo Chakarov
 
Choosing the best JavaScript framework/library/toolkit
Choosing the best JavaScript framework/library/toolkitChoosing the best JavaScript framework/library/toolkit
Choosing the best JavaScript framework/library/toolkitHristo Chakarov
 
Choosing the right JavaScript library/framework/toolkit for our project
Choosing the right JavaScript library/framework/toolkit for our projectChoosing the right JavaScript library/framework/toolkit for our project
Choosing the right JavaScript library/framework/toolkit for our projectHristo Chakarov
 
Creating a simple Custom Post Type sort UI
Creating a simple Custom Post Type sort UICreating a simple Custom Post Type sort UI
Creating a simple Custom Post Type sort UIHristo Chakarov
 

More from Hristo Chakarov (8)

Cross-platform JavaScript
Cross-platform JavaScriptCross-platform JavaScript
Cross-platform JavaScript
 
DOM Performance (JSNext Bulgaria)
DOM Performance (JSNext Bulgaria)DOM Performance (JSNext Bulgaria)
DOM Performance (JSNext Bulgaria)
 
Атоматизация с Grunt
Атоматизация с GruntАтоматизация с Grunt
Атоматизация с Grunt
 
Choosing the best JavaScript framework/library/toolkit
Choosing the best JavaScript framework/library/toolkitChoosing the best JavaScript framework/library/toolkit
Choosing the best JavaScript framework/library/toolkit
 
WP-Boot
WP-BootWP-Boot
WP-Boot
 
Choosing the right JavaScript library/framework/toolkit for our project
Choosing the right JavaScript library/framework/toolkit for our projectChoosing the right JavaScript library/framework/toolkit for our project
Choosing the right JavaScript library/framework/toolkit for our project
 
Dom manipulation
Dom manipulationDom manipulation
Dom manipulation
 
Creating a simple Custom Post Type sort UI
Creating a simple Custom Post Type sort UICreating a simple Custom Post Type sort UI
Creating a simple Custom Post Type sort UI
 

Recently uploaded

Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbuapidays
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfOverkill Security
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 

Recently uploaded (20)

Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 

Creating Extensible Plugins for WordPress

  • 1. Creating Extensible Plugins for WordPress Hristo Chakarov WordUp! Conference, Sofia, 2013
  • 2. Who am I? ● I'm in the web since 2002 ○ professionally since 2007 ● Currently working as a Senior JavaScript developer @ Netclime Inc. ○ one product - SiteKreator (website builder) http://sitekreator.com ● Love WordPress ○ 2 plugins on the official plugins page ○ several commercial projects on top of the platform ○ co-founder of WordPress Bulgarian User Group (WPBGUG) http://wpbgug.org/
  • 3. Why WordPress? ● Which is the best CMS in the World? ○ In fact, there's no such ● However, WordPress is much, much better than its most famous competitors ○ Great Admin UI ○ Rich & well documented API ○ Easy to extend ■ you don't have to be very experienced programmer in order to create a plugin ○ Huge community ■ tons of free & paid Themes & Plugins ○ But last 2 might be problematic
  • 4. Today: 1. Why do we need to make plugins extensible 2. Anatomy of WordPress hooks 3. Differences between actions & filters + examples 4. Overwriting OOP-style plugins 5. Tips 6. Demo, plugin examples, good to read
  • 5. Quick Questions ● How many of you have contributed at least 1 plugin in WordPress' Plugin Directory? ● How often do you feel the need to tweak a 3rd party plugin in order to fit 100% in your project(s)? ● When you start coding new plugin, have you ever felt the need to reuse functionality from another your plugin?
  • 6. Consider the following scenario: 1. You need extra functionality for your WP project 2. You enjoy a plugin and you download it 3. There's that very tiny thing that this plugin does not bring to you 4. You modify plugin's source code 5. You forget about modifying the source 6. A new version of the plugin is available. You update your copy and after the update you look at your site and...
  • 7.
  • 8. ...Damn! My changes got lost! Shooting at the developer won't solve the problem
  • 9. What can be done? Nothing. But at least we can start making our own plugins extensible and make the World better :)
  • 10. Benefits of extensible plugin ● other developers can easily extend your plugins so they serve their needs ● code reuse - we may have a base plugin (core) and a lot of extensions (other plugins) built on top of it
  • 11. OK, but how do we make our WP plugin extensible? How do you extend WordPress? ● by using the platform's hooks add_action remove_action add_filter remove_filter It's the same if you want to make your plugin extensible - just register your own hooks! ● do_action ● apply_filters
  • 12. How actions & filters work (Minimum Theory) ● add_action & add_filter register handlers (functions) to be executed on certain event ( hook_id, fn_name, priority, num_args ) ● do_action & apply_filters execute all handlers when called
  • 13. Difference between Actions & Filters ● filters accept, modify & return data ○ strings ○ arrays ○ objects ● actions just execute ○ actions are just like events - they "trigger"
  • 14. ● to modify strings (can be HTML or any other) // in your core plugin echo apply_filters( 'my_plugin_html', '<strong>Hello, world!</strong>' ); // in extending plugin add_filter( 'my_plugin_html', 'custom_html_filter' ); function custom_html_filter( $html ) { return '<div>' . $html . '</div>'; } Use filters:
  • 15. Use filters: ● for HTML its better to work on DOM level ○ Simple HTML DOM library is good for that $dom = str_get_html('<b>Hello, world!</b>'); apply_filters( 'my_plugin_dom', $dom ); echo $dom->save(); add_filter( 'my_plugin_dom', 'custom_dom_filter' ); function custom_dom_filter( $dom ) { // replace the <b> with <strong> foreach ( $b as $dom->find('b') ) $b->outerhtml = '<strong>'.$b- >innertext.'</strong>'; return $dom;
  • 16. Use filters: ● to modify WP Query // define initial set of query params $query_args = array( 'post_type' => 'books', 'author' => 3 ); $books = new WP_Query( apply_filters( 'myplugin_query', $query_args ) ); add_filter('myplugin_query', 'modify_query'); function modify_query( $query_args ) { $query_args['posts_per_page'] = 5; return $query_args;
  • 17. Use actions: ● to spice HTML markup
  • 18. Use actions: ● to print resources // in the core plugin do_action( 'myplugin_print_resources' ); // in the extending plugin add_action( 'myplugin_print_resources', 'myplugin_print_scripts' ); function myplugin_print_scripts() { echo '<script src=".."></script> }
  • 19. Lets make our plugin more OOP! ● define a main class for your plugin ● instantiate the class on WordPress <init> class MyPlugin { function myMethod() { // ... } } add_action( 'init', 'myplugin_init' ); function myplugin_init() { global $plugin_instance; $plugin_instance = new MyPlugin(); }
  • 20. Overwrite ● define extending class & overwrite base ● instantiate the class on WordPress <init> class ExtendingPlugin extends MyPlugin { function myMethod() { $this->parent(); // not necessary // .. extra functionality here } } remove_action( 'init', 'myplugin_init' ); add_action( 'init', 'extending_init' ); function extending_init() { global $plugin_instance; $plugin_instance = new ExtendingPlugin(); }
  • 21. Tips ● plan your actions & filters carefully ○ think where you will need to provide a hook ○ try to use descriptive & easy to remember names filter_html (too generic) wpplg_tpl_html (what?) a_really_awesome_filter_html (too long) myplugin_filter_html (almost perfect) ○ don't overhook ● its good to create a documentation page ● comment, comment, comment! ○ comments can be your best friend
  • 22. ● Image Widget http://wordpress.org/extend/plugins/image-widget/ ● NextGEN Gallery http://wordpress.org/extend/plugins/nextgen-gallery/ ● bbPress http://wordpress.org/extend/plugins/bbpress/ ● WPML http://wpml.org/ ● WooCommerce http://www.woothemes.com/woocommerce/ Extensible plugins for inspiration
  • 23. Extending NextGEN Gallery plugin with custom template Demo
  • 24. I recommend you to read ● Anatomy of a WordPress Plugin http://www.packtpub.com/article/anatomy-wordpress-plugin ● Inside WordPress Actions And Filters http://wp.smashingmagazine.com/2012/02/16/inside-wordpress- actions-filters/ ● Writing Extensible Plugins With Actions and Filters http://wp.tutsplus.com/tutorials/plugins/writing-extensible- plugins-with-actions-and-filters/ ● 5 Things I’ve Learned About Writing Flexible Plugins http://www.kungfugrep.com/5-learned-writing-flexible- plugins/
  • 25. Time for questions Your turn - word up!