SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler 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!

Mais conteúdo relacionado

Mais procurados

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永昇 陳
 

Mais procurados (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
 

Destaque

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
 

Destaque (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
 

Semelhante a 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
 

Semelhante a 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
 

Mais de 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
 

Mais de 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
 

Último

Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 

Último (20)

Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 

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!