Post on 08-May-2015
description
transcript
Developing WordPress Plugins
Markku Seguerrahttp://rebelpixel.com
What is a WordPress plugin?
Little applications used to enhance functionality or add specific functions tailored to a site's specific needs.
Some plugins:
- Akismet- WordPress Database Backup- WordPress.com Stats- wp-recent-links- Comment Hilite
What do you need to make a plugin?
- a problem to solve- some PHP knowledge- some spare time- a test server with your test WordPress (XAMPP is good.)
Structure: Things to remember
- A unique descriptive name- Naming: myplugin.php or /myplugin/ folder- Readme.txt format forwordpress.org/extend/plugins- Plugin home page- File headers (very important!)
Headers<?php/*Plugin Name: Name Of The PluginPlugin URI: http://mypage.com/myplugin/Description: What does it do?Version: 1.0Author: Name Of The Plugin AuthorAuthor URI: http://mypage.com/*/?>
Include your license details!
The GPL (and compatible licenses) is commonly used for plugins.
Plugin ProgrammingBefore WP 1.2, customizations required
altering the core files, causing conflicts among hacks (remember my-hacks.php?) and making upgrades very tedious.
The solution?
Plugin API
- Enabled "hooks"- Extend functionality withoutediting the core code- Two categories:Actions and Filters
Actions
Specific points in the WordPress code that can be used to trigger plugin-specified events and functions.
add_action( 'hook_name', 'your_function_name', [priority], [accepted_args] );
Sample action: “wp_login”
function notify_on_login() { // your code here // email to admin, etc... } add_action('wp_login', 'notify_on_login');
Filters
Functions that modify text, lists andvarious types of information that areused and produced by WordPress.
add_filter('hook_name', 'your_filter_function', [priority], [accepted_args]);
Sample filter: “the_content”
function add_rss_invite(){ // output to screen the link to RSS feed // if 1st time visitor}
add_filter('the_content', 'add_rss_invite');
Template Tags
Plugins can also be used to generatespecial template tags that displaycustom content.- Recent comments- Top posts- Ad display
Storing Plugin Data
- For large amount of data, create your own database table.
- For fairly small and/or static data, use built-in WP "Options" capability.
add_option($name, $value, $deprecated, $autoload);get_option($option);update_option($option_name, $newvalue);
Administration Menus & Pages
- There are specific functions to add pages and menu items.
add_menu_page(page_title, menu_title, access_level/capability, file, [function]);
add_submenu_page(); add_options_page();add_management_page();add_theme_page();
Other things to consider- Internationalization- WordPress Coding Standards & inline documentation- Function prefixes to avoid name collision- When creating tables, use $wpdb->prefix- Minimize database writes.- Write secure code! (Use nonces, sanitize, etc.)- Be aware of user roles and capabilities.- Stick to the WordPress API to avoid problems!
Sample plugin: Strip!<?php/*Plugin Name: Strip!Plugin URI: http://rebelpixel.com/Description: Removes hyperlink tags from a given comment.Version: 0.1Author: Markku SeguerraAuthor URI: http://rebelpixel.com/projects/strip/*/
/* Copyright 2008 Markku Seguerra (email : markku@gmail.com)
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA*/
add_filter('comment_text', 'strip_comments_add_admin');function strip_comments_add_admin($text){ // add the strip button to the comment}
add_filter('comment_text', 'strip_comments_add');add_filter('get_comment_author_link', 'strip_comments_add');function strip_comments_add($text){ // mark the comment as stripped and displays // it without links}
add_action('wp_ajax_strip', 'do_strip');function do_strip(){ // function to mark comment as stripped // triggered via ajax}
add_action('wp_ajax_unstrip', 'do_unstrip');function do_unstrip(){ // function to mark comment as stripped}
function strip_selected_tags($text, $tags = array()){ // our filter function that removes links}
add_action('admin_head', 'strip_comments_head');function strip_comments_head(){ // show the necessary css and ajax // functions used in the admin interface}
<script type="text/javascript">//<![CDATA[function strip_now(cid) { jQuery.post("<?php echo get_option('siteurl'); ?>/wp-admin/admin-ajax.php", {action:"strip", "c":cid, "cookie": encodeURIComponent(document.cookie)}, function(str) { pn = '#p-' + cid; jQuery(pn).html(str); });}
function unstrip_now(cid) { jQuery.post("<?php echo get_option('siteurl'); ?>/wp-admin/admin-ajax.php", {action:"unstrip", "c":cid, "cookie": encodeURIComponent(document.cookie)}, function(str) { pn = '#p-' + cid; jQuery(pn).html(str); });}
//]]></script>
Thank you!
Markku Seguerrahttp://rebelpixel.com