SlideShare a Scribd company logo
1 of 16
My Second WordPress
Plugin
강동혁
dongheok@shoplic.kr
2019-02-07
Problems
• 워드프레스 플러그인 개발 방법론 부재
• Naming Conflicts
add_action(‘init’, ‘my_plugin_init’);
if ( !function_exists(‘my_plugin_init’)) {
function my_plugin_init() {
echo ‘This is my plugin init.’;
}
}
add_action(‘my_plugin_action’, ‘my_plugin_action’);
if ( !function_exists(‘my_plugin_action’)) {
function my_plugin_action() {
echo ‘This is my plugin action.’;
}
}
Solutions
• MVC(Model, View, Controller)
• CBD(Component Based Development)
M
V C
Component
M
V C
Component
M
V C
Component
M
V C
Component
M
V C
Component
PLUGIN
Plugin Packaging
plugin-name/
components/
comp1/
views/
models/
controller.php
comp2/
plugin-name.php
Model
• WordPress Models
• Tables
• wp_posts, wp_postmeta, wp_comments, wp_commentmeta,
wp_users, wp_usermeta, …
• Classes
• WP_Post, WP_Comment, WP_User, …
• Functions
• get_posts(), get_comments(), get_users(), …
• Query
• WP_Query
// Show Posts from Several Authors
$query = new WP_Query( array( 'author' => '2,6,17,38' ) );
Simple ORM for Custom Tables
CREATE TABLE `site_domain` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`site_id` bigint(20) DEFAULT NULL,
`domain` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`primary` tinyint(1) DEFAULT NULL,
`https` tinyint(1) DEFAULT NULL,
`created_date` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `IDX_SITE_ID` (`site_id`)
)
class Site_Domain extends SP_Entity
{
static $_database = 'sp_hosting';
static $_primary_key = 'id';
static $_column_formats = [
'id' => '%d',
'site_id' => '%d',
'domain' => '%s',
'primary' => '%d',
'https' => '%d',
'created_date' => '%s',
];
static function get_table() {
return 'site_domain';
}
}
SP_ORM::insert(new Site_Domain([
'site_id' => $site->id,
'domain' => $_POST['domain’],
'https' => $_POST['https’],
'created_date' => current_time('mysql'),
]));
SP_ORM::select(new Site_Domain([
'site_id'=>$site->id
]));
SP_ORM::delete(new Site_Domain([
'site_id' => $site->id,
'domain' => $_POST['domain’]
]));
Controller
• A set of actions, filters, and shortcodes
Abstract_Controller
$id
init()
add_action()
add_filter()
add_shortcode()
view()
My_Controller
login()
class My_Controller extends Absctract_Controller {
$id = ‘shoplic’;
function init() {
$this->add_action(‘login’);
}
function login() {
// 로그인 처리
}
}
=> add_action(‘shoplic_login’, My_Controller::login)
// controller.php
class My_Controller extends
Absctract_Controller {
$id = ‘shoplic’;
function init() {
$this->add_shortcode(‘login_form’);
}
function login_form() {
// 로그인 폼
$this->view(‘login_form’, [
‘message’ => ‘로그인‘
]);
}
}
add_shortcode(‘shoplic_login_form’,
My_Controller::login_form)
// login_form.php
<h1><?php echo $message; ?></h1>
<form>
</form>
// Editor
[shoplic_login_form]
Communication between Components
// comp1/controller.php
class Comp1_Controller extends
Absctract_Controller {
$id = ‘shoplic’;
function init() {
$this->add_action(‘logout’);
}
function logout() { // 로그아웃 처리
}
}
 add_action(‘shoplic_logout’, Comp1_Controller::logout)
// comp2/controller.php
class Comp2_Controller extends
Abstract_Controller {
$id = ‘wordpress’;
function logout() {
do_action(‘shoplic_logout’);
}
}
Prevent Naming Conflicts
• Don’t Do Naming
• Use Anonymous Functions(5.3~) & Anonymous Classes(7~)
new class() extends Abstract_Controller {
$id = ‘shoplic’;
function init() {
$this->add_action(‘login’, function() {
// 로그인 처리
});
}
}
감사합니다.
강동혁
donghyeok@shoplic.kr

More Related Content

What's hot

AngularJS 101 - Everything you need to know to get started
AngularJS 101 - Everything you need to know to get startedAngularJS 101 - Everything you need to know to get started
AngularJS 101 - Everything you need to know to get startedStéphane Bégaudeau
 
AngularJS application architecture
AngularJS application architectureAngularJS application architecture
AngularJS application architectureGabriele Falace
 
Why angular js Framework
Why angular js Framework Why angular js Framework
Why angular js Framework Sakthi Bro
 
Advanced Tips & Tricks for using Angular JS
Advanced Tips & Tricks for using Angular JSAdvanced Tips & Tricks for using Angular JS
Advanced Tips & Tricks for using Angular JSSimon Guest
 
Gettings started with the superheroic JavaScript library AngularJS
Gettings started with the superheroic JavaScript library AngularJSGettings started with the superheroic JavaScript library AngularJS
Gettings started with the superheroic JavaScript library AngularJSArmin Vieweg
 
Angularjs architecture
Angularjs architectureAngularjs architecture
Angularjs architectureMichael He
 
Angularjs - lazy loading techniques
Angularjs - lazy loading techniques Angularjs - lazy loading techniques
Angularjs - lazy loading techniques Nir Kaufman
 

What's hot (8)

AngularJS Best Practices
AngularJS Best PracticesAngularJS Best Practices
AngularJS Best Practices
 
AngularJS 101 - Everything you need to know to get started
AngularJS 101 - Everything you need to know to get startedAngularJS 101 - Everything you need to know to get started
AngularJS 101 - Everything you need to know to get started
 
AngularJS application architecture
AngularJS application architectureAngularJS application architecture
AngularJS application architecture
 
Why angular js Framework
Why angular js Framework Why angular js Framework
Why angular js Framework
 
Advanced Tips & Tricks for using Angular JS
Advanced Tips & Tricks for using Angular JSAdvanced Tips & Tricks for using Angular JS
Advanced Tips & Tricks for using Angular JS
 
Gettings started with the superheroic JavaScript library AngularJS
Gettings started with the superheroic JavaScript library AngularJSGettings started with the superheroic JavaScript library AngularJS
Gettings started with the superheroic JavaScript library AngularJS
 
Angularjs architecture
Angularjs architectureAngularjs architecture
Angularjs architecture
 
Angularjs - lazy loading techniques
Angularjs - lazy loading techniques Angularjs - lazy loading techniques
Angularjs - lazy loading techniques
 

Similar to My second word press plugin

Plugging into plugins
Plugging into pluginsPlugging into plugins
Plugging into pluginsJosh Harrison
 
Write your first WordPress plugin
Write your first WordPress pluginWrite your first WordPress plugin
Write your first WordPress pluginAnthony Montalbano
 
Creating Extensible Plugins for WordPress
Creating Extensible Plugins for WordPressCreating Extensible Plugins for WordPress
Creating Extensible Plugins for WordPressHristo Chakarov
 
Developing WordPress Plugins : For Begineers
Developing WordPress Plugins :  For BegineersDeveloping WordPress Plugins :  For Begineers
Developing WordPress Plugins : For BegineersM A Hossain Tonu
 
gDayX 2013 - Advanced AngularJS - Nicolas Embleton
gDayX 2013 - Advanced AngularJS - Nicolas EmbletongDayX 2013 - Advanced AngularJS - Nicolas Embleton
gDayX 2013 - Advanced AngularJS - Nicolas EmbletonGeorge Nguyen
 
WordPress-like plugins for Next.js - Sanket Sahu
WordPress-like plugins for Next.js - Sanket SahuWordPress-like plugins for Next.js - Sanket Sahu
WordPress-like plugins for Next.js - Sanket SahuKumar Sanket
 
Webinar: Zend framework Getting to grips (ZF1)
Webinar: Zend framework Getting to grips (ZF1)Webinar: Zend framework Getting to grips (ZF1)
Webinar: Zend framework Getting to grips (ZF1)Ryan Mauger
 
Yeoman
YeomanYeoman
Yeomanarybik
 
Useful practices of creation automatic tests by using cucumber jvm
Useful practices of creation automatic tests by using cucumber jvmUseful practices of creation automatic tests by using cucumber jvm
Useful practices of creation automatic tests by using cucumber jvmAnton Shapin
 
Advanced WordPress Optimization - iGaming Supershow 2012
Advanced WordPress Optimization - iGaming Supershow 2012Advanced WordPress Optimization - iGaming Supershow 2012
Advanced WordPress Optimization - iGaming Supershow 2012Bastian Grimm
 
Maven plugin guide using Modello Framework
Maven plugin guide using Modello FrameworkMaven plugin guide using Modello Framework
Maven plugin guide using Modello Frameworkfulvio russo
 
Plugin Development @ WordCamp Norway 2014
Plugin Development @ WordCamp Norway 2014Plugin Development @ WordCamp Norway 2014
Plugin Development @ WordCamp Norway 2014Barry Kooij
 
gDayX - Advanced angularjs
gDayX - Advanced angularjsgDayX - Advanced angularjs
gDayX - Advanced angularjsgdgvietnam
 
Making Magento flying like a rocket! (A set of valuable tips for developers)
Making Magento flying like a rocket! (A set of valuable tips for developers)Making Magento flying like a rocket! (A set of valuable tips for developers)
Making Magento flying like a rocket! (A set of valuable tips for developers)Ivan Chepurnyi
 
Creating Your First WordPress Plugin
Creating Your First WordPress PluginCreating Your First WordPress Plugin
Creating Your First WordPress PluginBrad Williams
 
Zepplin_Pronko_Magento_Festival Hall 1_Final
Zepplin_Pronko_Magento_Festival Hall 1_FinalZepplin_Pronko_Magento_Festival Hall 1_Final
Zepplin_Pronko_Magento_Festival Hall 1_FinalMax Pronko
 
WordPress Plugin development
WordPress Plugin developmentWordPress Plugin development
WordPress Plugin developmentMostafa Soufi
 
Intro to WordPress Plugin Development
Intro to WordPress Plugin DevelopmentIntro to WordPress Plugin Development
Intro to WordPress Plugin DevelopmentBrad Williams
 
Using WordPress for Rapid Prototyping
Using WordPress for Rapid PrototypingUsing WordPress for Rapid Prototyping
Using WordPress for Rapid PrototypingDrew Morris
 

Similar to My second word press plugin (20)

Plugging into plugins
Plugging into pluginsPlugging into plugins
Plugging into plugins
 
Write your first WordPress plugin
Write your first WordPress pluginWrite your first WordPress plugin
Write your first WordPress plugin
 
Creating Extensible Plugins for WordPress
Creating Extensible Plugins for WordPressCreating Extensible Plugins for WordPress
Creating Extensible Plugins for WordPress
 
Developing WordPress Plugins : For Begineers
Developing WordPress Plugins :  For BegineersDeveloping WordPress Plugins :  For Begineers
Developing WordPress Plugins : For Begineers
 
gDayX 2013 - Advanced AngularJS - Nicolas Embleton
gDayX 2013 - Advanced AngularJS - Nicolas EmbletongDayX 2013 - Advanced AngularJS - Nicolas Embleton
gDayX 2013 - Advanced AngularJS - Nicolas Embleton
 
WordPress-like plugins for Next.js - Sanket Sahu
WordPress-like plugins for Next.js - Sanket SahuWordPress-like plugins for Next.js - Sanket Sahu
WordPress-like plugins for Next.js - Sanket Sahu
 
Webinar: Zend framework Getting to grips (ZF1)
Webinar: Zend framework Getting to grips (ZF1)Webinar: Zend framework Getting to grips (ZF1)
Webinar: Zend framework Getting to grips (ZF1)
 
Yeoman
YeomanYeoman
Yeoman
 
Useful practices of creation automatic tests by using cucumber jvm
Useful practices of creation automatic tests by using cucumber jvmUseful practices of creation automatic tests by using cucumber jvm
Useful practices of creation automatic tests by using cucumber jvm
 
Advanced WordPress Optimization - iGaming Supershow 2012
Advanced WordPress Optimization - iGaming Supershow 2012Advanced WordPress Optimization - iGaming Supershow 2012
Advanced WordPress Optimization - iGaming Supershow 2012
 
Maven plugin guide using Modello Framework
Maven plugin guide using Modello FrameworkMaven plugin guide using Modello Framework
Maven plugin guide using Modello Framework
 
CodeIgniter Framework
CodeIgniter FrameworkCodeIgniter Framework
CodeIgniter Framework
 
Plugin Development @ WordCamp Norway 2014
Plugin Development @ WordCamp Norway 2014Plugin Development @ WordCamp Norway 2014
Plugin Development @ WordCamp Norway 2014
 
gDayX - Advanced angularjs
gDayX - Advanced angularjsgDayX - Advanced angularjs
gDayX - Advanced angularjs
 
Making Magento flying like a rocket! (A set of valuable tips for developers)
Making Magento flying like a rocket! (A set of valuable tips for developers)Making Magento flying like a rocket! (A set of valuable tips for developers)
Making Magento flying like a rocket! (A set of valuable tips for developers)
 
Creating Your First WordPress Plugin
Creating Your First WordPress PluginCreating Your First WordPress Plugin
Creating Your First WordPress Plugin
 
Zepplin_Pronko_Magento_Festival Hall 1_Final
Zepplin_Pronko_Magento_Festival Hall 1_FinalZepplin_Pronko_Magento_Festival Hall 1_Final
Zepplin_Pronko_Magento_Festival Hall 1_Final
 
WordPress Plugin development
WordPress Plugin developmentWordPress Plugin development
WordPress Plugin development
 
Intro to WordPress Plugin Development
Intro to WordPress Plugin DevelopmentIntro to WordPress Plugin Development
Intro to WordPress Plugin Development
 
Using WordPress for Rapid Prototyping
Using WordPress for Rapid PrototypingUsing WordPress for Rapid Prototyping
Using WordPress for Rapid Prototyping
 

More from Donghyeok Kang

Divi custom post type template
Divi custom post type templateDivi custom post type template
Divi custom post type templateDonghyeok Kang
 
My first word press plugin
My first word press pluginMy first word press plugin
My first word press pluginDonghyeok Kang
 
Docker based web hosting
Docker based web hostingDocker based web hosting
Docker based web hostingDonghyeok Kang
 
Flutter Beta but Better and Better
Flutter Beta but Better and BetterFlutter Beta but Better and Better
Flutter Beta but Better and BetterDonghyeok Kang
 
Java Annotation과 MyBatis로 나만의 ORM Framework을 만들어보자
Java Annotation과 MyBatis로 나만의 ORM Framework을 만들어보자Java Annotation과 MyBatis로 나만의 ORM Framework을 만들어보자
Java Annotation과 MyBatis로 나만의 ORM Framework을 만들어보자Donghyeok Kang
 
[제1회 루씬 한글분석기 기술세미나] solr로 나만의 검색엔진을 만들어보자
[제1회 루씬 한글분석기 기술세미나] solr로 나만의 검색엔진을 만들어보자[제1회 루씬 한글분석기 기술세미나] solr로 나만의 검색엔진을 만들어보자
[제1회 루씬 한글분석기 기술세미나] solr로 나만의 검색엔진을 만들어보자Donghyeok Kang
 

More from Donghyeok Kang (7)

Divi custom post type template
Divi custom post type templateDivi custom post type template
Divi custom post type template
 
My first word press plugin
My first word press pluginMy first word press plugin
My first word press plugin
 
Docker based web hosting
Docker based web hostingDocker based web hosting
Docker based web hosting
 
Flutter Beta but Better and Better
Flutter Beta but Better and BetterFlutter Beta but Better and Better
Flutter Beta but Better and Better
 
Java Annotation과 MyBatis로 나만의 ORM Framework을 만들어보자
Java Annotation과 MyBatis로 나만의 ORM Framework을 만들어보자Java Annotation과 MyBatis로 나만의 ORM Framework을 만들어보자
Java Annotation과 MyBatis로 나만의 ORM Framework을 만들어보자
 
Curated News Platform
Curated News PlatformCurated News Platform
Curated News Platform
 
[제1회 루씬 한글분석기 기술세미나] solr로 나만의 검색엔진을 만들어보자
[제1회 루씬 한글분석기 기술세미나] solr로 나만의 검색엔진을 만들어보자[제1회 루씬 한글분석기 기술세미나] solr로 나만의 검색엔진을 만들어보자
[제1회 루씬 한글분석기 기술세미나] solr로 나만의 검색엔진을 만들어보자
 

Recently uploaded

OOP concepts -in-Python programming language
OOP concepts -in-Python programming languageOOP concepts -in-Python programming language
OOP concepts -in-Python programming languageSmritiSharma901052
 
KCD Costa Rica 2024 - Nephio para parvulitos
KCD Costa Rica 2024 - Nephio para parvulitosKCD Costa Rica 2024 - Nephio para parvulitos
KCD Costa Rica 2024 - Nephio para parvulitosVictor Morales
 
TEST CASE GENERATION GENERATION BLOCK BOX APPROACH
TEST CASE GENERATION GENERATION BLOCK BOX APPROACHTEST CASE GENERATION GENERATION BLOCK BOX APPROACH
TEST CASE GENERATION GENERATION BLOCK BOX APPROACHSneha Padhiar
 
signals in triangulation .. ...Surveying
signals in triangulation .. ...Surveyingsignals in triangulation .. ...Surveying
signals in triangulation .. ...Surveyingsapna80328
 
Immutable Image-Based Operating Systems - EW2024.pdf
Immutable Image-Based Operating Systems - EW2024.pdfImmutable Image-Based Operating Systems - EW2024.pdf
Immutable Image-Based Operating Systems - EW2024.pdfDrew Moseley
 
Module-1-(Building Acoustics) Noise Control (Unit-3). pdf
Module-1-(Building Acoustics) Noise Control (Unit-3). pdfModule-1-(Building Acoustics) Noise Control (Unit-3). pdf
Module-1-(Building Acoustics) Noise Control (Unit-3). pdfManish Kumar
 
Comparative study of High-rise Building Using ETABS,SAP200 and SAFE., SAFE an...
Comparative study of High-rise Building Using ETABS,SAP200 and SAFE., SAFE an...Comparative study of High-rise Building Using ETABS,SAP200 and SAFE., SAFE an...
Comparative study of High-rise Building Using ETABS,SAP200 and SAFE., SAFE an...Erbil Polytechnic University
 
Artificial Intelligence in Power System overview
Artificial Intelligence in Power System overviewArtificial Intelligence in Power System overview
Artificial Intelligence in Power System overviewsandhya757531
 
System Simulation and Modelling with types and Event Scheduling
System Simulation and Modelling with types and Event SchedulingSystem Simulation and Modelling with types and Event Scheduling
System Simulation and Modelling with types and Event SchedulingBootNeck1
 
Virtual memory management in Operating System
Virtual memory management in Operating SystemVirtual memory management in Operating System
Virtual memory management in Operating SystemRashmi Bhat
 
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor CatchersTechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catcherssdickerson1
 
FUNCTIONAL AND NON FUNCTIONAL REQUIREMENT
FUNCTIONAL AND NON FUNCTIONAL REQUIREMENTFUNCTIONAL AND NON FUNCTIONAL REQUIREMENT
FUNCTIONAL AND NON FUNCTIONAL REQUIREMENTSneha Padhiar
 
ROBOETHICS-CCS345 ETHICS AND ARTIFICIAL INTELLIGENCE.ppt
ROBOETHICS-CCS345 ETHICS AND ARTIFICIAL INTELLIGENCE.pptROBOETHICS-CCS345 ETHICS AND ARTIFICIAL INTELLIGENCE.ppt
ROBOETHICS-CCS345 ETHICS AND ARTIFICIAL INTELLIGENCE.pptJohnWilliam111370
 
SOFTWARE ESTIMATION COCOMO AND FP CALCULATION
SOFTWARE ESTIMATION COCOMO AND FP CALCULATIONSOFTWARE ESTIMATION COCOMO AND FP CALCULATION
SOFTWARE ESTIMATION COCOMO AND FP CALCULATIONSneha Padhiar
 
Prach: A Feature-Rich Platform Empowering the Autism Community
Prach: A Feature-Rich Platform Empowering the Autism CommunityPrach: A Feature-Rich Platform Empowering the Autism Community
Prach: A Feature-Rich Platform Empowering the Autism Communityprachaibot
 
Python Programming for basic beginners.pptx
Python Programming for basic beginners.pptxPython Programming for basic beginners.pptx
Python Programming for basic beginners.pptxmohitesoham12
 
Turn leadership mistakes into a better future.pptx
Turn leadership mistakes into a better future.pptxTurn leadership mistakes into a better future.pptx
Turn leadership mistakes into a better future.pptxStephen Sitton
 
『澳洲文凭』买麦考瑞大学毕业证书成绩单办理澳洲Macquarie文凭学位证书
『澳洲文凭』买麦考瑞大学毕业证书成绩单办理澳洲Macquarie文凭学位证书『澳洲文凭』买麦考瑞大学毕业证书成绩单办理澳洲Macquarie文凭学位证书
『澳洲文凭』买麦考瑞大学毕业证书成绩单办理澳洲Macquarie文凭学位证书rnrncn29
 
Energy Awareness training ppt for manufacturing process.pptx
Energy Awareness training ppt for manufacturing process.pptxEnergy Awareness training ppt for manufacturing process.pptx
Energy Awareness training ppt for manufacturing process.pptxsiddharthjain2303
 
Input Output Management in Operating System
Input Output Management in Operating SystemInput Output Management in Operating System
Input Output Management in Operating SystemRashmi Bhat
 

Recently uploaded (20)

OOP concepts -in-Python programming language
OOP concepts -in-Python programming languageOOP concepts -in-Python programming language
OOP concepts -in-Python programming language
 
KCD Costa Rica 2024 - Nephio para parvulitos
KCD Costa Rica 2024 - Nephio para parvulitosKCD Costa Rica 2024 - Nephio para parvulitos
KCD Costa Rica 2024 - Nephio para parvulitos
 
TEST CASE GENERATION GENERATION BLOCK BOX APPROACH
TEST CASE GENERATION GENERATION BLOCK BOX APPROACHTEST CASE GENERATION GENERATION BLOCK BOX APPROACH
TEST CASE GENERATION GENERATION BLOCK BOX APPROACH
 
signals in triangulation .. ...Surveying
signals in triangulation .. ...Surveyingsignals in triangulation .. ...Surveying
signals in triangulation .. ...Surveying
 
Immutable Image-Based Operating Systems - EW2024.pdf
Immutable Image-Based Operating Systems - EW2024.pdfImmutable Image-Based Operating Systems - EW2024.pdf
Immutable Image-Based Operating Systems - EW2024.pdf
 
Module-1-(Building Acoustics) Noise Control (Unit-3). pdf
Module-1-(Building Acoustics) Noise Control (Unit-3). pdfModule-1-(Building Acoustics) Noise Control (Unit-3). pdf
Module-1-(Building Acoustics) Noise Control (Unit-3). pdf
 
Comparative study of High-rise Building Using ETABS,SAP200 and SAFE., SAFE an...
Comparative study of High-rise Building Using ETABS,SAP200 and SAFE., SAFE an...Comparative study of High-rise Building Using ETABS,SAP200 and SAFE., SAFE an...
Comparative study of High-rise Building Using ETABS,SAP200 and SAFE., SAFE an...
 
Artificial Intelligence in Power System overview
Artificial Intelligence in Power System overviewArtificial Intelligence in Power System overview
Artificial Intelligence in Power System overview
 
System Simulation and Modelling with types and Event Scheduling
System Simulation and Modelling with types and Event SchedulingSystem Simulation and Modelling with types and Event Scheduling
System Simulation and Modelling with types and Event Scheduling
 
Virtual memory management in Operating System
Virtual memory management in Operating SystemVirtual memory management in Operating System
Virtual memory management in Operating System
 
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor CatchersTechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
 
FUNCTIONAL AND NON FUNCTIONAL REQUIREMENT
FUNCTIONAL AND NON FUNCTIONAL REQUIREMENTFUNCTIONAL AND NON FUNCTIONAL REQUIREMENT
FUNCTIONAL AND NON FUNCTIONAL REQUIREMENT
 
ROBOETHICS-CCS345 ETHICS AND ARTIFICIAL INTELLIGENCE.ppt
ROBOETHICS-CCS345 ETHICS AND ARTIFICIAL INTELLIGENCE.pptROBOETHICS-CCS345 ETHICS AND ARTIFICIAL INTELLIGENCE.ppt
ROBOETHICS-CCS345 ETHICS AND ARTIFICIAL INTELLIGENCE.ppt
 
SOFTWARE ESTIMATION COCOMO AND FP CALCULATION
SOFTWARE ESTIMATION COCOMO AND FP CALCULATIONSOFTWARE ESTIMATION COCOMO AND FP CALCULATION
SOFTWARE ESTIMATION COCOMO AND FP CALCULATION
 
Prach: A Feature-Rich Platform Empowering the Autism Community
Prach: A Feature-Rich Platform Empowering the Autism CommunityPrach: A Feature-Rich Platform Empowering the Autism Community
Prach: A Feature-Rich Platform Empowering the Autism Community
 
Python Programming for basic beginners.pptx
Python Programming for basic beginners.pptxPython Programming for basic beginners.pptx
Python Programming for basic beginners.pptx
 
Turn leadership mistakes into a better future.pptx
Turn leadership mistakes into a better future.pptxTurn leadership mistakes into a better future.pptx
Turn leadership mistakes into a better future.pptx
 
『澳洲文凭』买麦考瑞大学毕业证书成绩单办理澳洲Macquarie文凭学位证书
『澳洲文凭』买麦考瑞大学毕业证书成绩单办理澳洲Macquarie文凭学位证书『澳洲文凭』买麦考瑞大学毕业证书成绩单办理澳洲Macquarie文凭学位证书
『澳洲文凭』买麦考瑞大学毕业证书成绩单办理澳洲Macquarie文凭学位证书
 
Energy Awareness training ppt for manufacturing process.pptx
Energy Awareness training ppt for manufacturing process.pptxEnergy Awareness training ppt for manufacturing process.pptx
Energy Awareness training ppt for manufacturing process.pptx
 
Input Output Management in Operating System
Input Output Management in Operating SystemInput Output Management in Operating System
Input Output Management in Operating System
 

My second word press plugin

  • 2. Problems • 워드프레스 플러그인 개발 방법론 부재 • Naming Conflicts
  • 3. add_action(‘init’, ‘my_plugin_init’); if ( !function_exists(‘my_plugin_init’)) { function my_plugin_init() { echo ‘This is my plugin init.’; } }
  • 4. add_action(‘my_plugin_action’, ‘my_plugin_action’); if ( !function_exists(‘my_plugin_action’)) { function my_plugin_action() { echo ‘This is my plugin action.’; } }
  • 5. Solutions • MVC(Model, View, Controller) • CBD(Component Based Development)
  • 6. M V C Component M V C Component M V C Component M V C Component M V C Component PLUGIN
  • 8. Model • WordPress Models • Tables • wp_posts, wp_postmeta, wp_comments, wp_commentmeta, wp_users, wp_usermeta, … • Classes • WP_Post, WP_Comment, WP_User, … • Functions • get_posts(), get_comments(), get_users(), … • Query • WP_Query // Show Posts from Several Authors $query = new WP_Query( array( 'author' => '2,6,17,38' ) );
  • 9. Simple ORM for Custom Tables CREATE TABLE `site_domain` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `site_id` bigint(20) DEFAULT NULL, `domain` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, `primary` tinyint(1) DEFAULT NULL, `https` tinyint(1) DEFAULT NULL, `created_date` datetime DEFAULT NULL, PRIMARY KEY (`id`), KEY `IDX_SITE_ID` (`site_id`) )
  • 10. class Site_Domain extends SP_Entity { static $_database = 'sp_hosting'; static $_primary_key = 'id'; static $_column_formats = [ 'id' => '%d', 'site_id' => '%d', 'domain' => '%s', 'primary' => '%d', 'https' => '%d', 'created_date' => '%s', ]; static function get_table() { return 'site_domain'; } } SP_ORM::insert(new Site_Domain([ 'site_id' => $site->id, 'domain' => $_POST['domain’], 'https' => $_POST['https’], 'created_date' => current_time('mysql'), ])); SP_ORM::select(new Site_Domain([ 'site_id'=>$site->id ])); SP_ORM::delete(new Site_Domain([ 'site_id' => $site->id, 'domain' => $_POST['domain’] ]));
  • 11. Controller • A set of actions, filters, and shortcodes Abstract_Controller $id init() add_action() add_filter() add_shortcode() view() My_Controller login() class My_Controller extends Absctract_Controller { $id = ‘shoplic’; function init() { $this->add_action(‘login’); } function login() { // 로그인 처리 } } => add_action(‘shoplic_login’, My_Controller::login)
  • 12. // controller.php class My_Controller extends Absctract_Controller { $id = ‘shoplic’; function init() { $this->add_shortcode(‘login_form’); } function login_form() { // 로그인 폼 $this->view(‘login_form’, [ ‘message’ => ‘로그인‘ ]); } } add_shortcode(‘shoplic_login_form’, My_Controller::login_form) // login_form.php <h1><?php echo $message; ?></h1> <form> </form> // Editor [shoplic_login_form]
  • 13. Communication between Components // comp1/controller.php class Comp1_Controller extends Absctract_Controller { $id = ‘shoplic’; function init() { $this->add_action(‘logout’); } function logout() { // 로그아웃 처리 } }  add_action(‘shoplic_logout’, Comp1_Controller::logout) // comp2/controller.php class Comp2_Controller extends Abstract_Controller { $id = ‘wordpress’; function logout() { do_action(‘shoplic_logout’); } }
  • 14. Prevent Naming Conflicts • Don’t Do Naming • Use Anonymous Functions(5.3~) & Anonymous Classes(7~)
  • 15. new class() extends Abstract_Controller { $id = ‘shoplic’; function init() { $this->add_action(‘login’, function() { // 로그인 처리 }); } }