Developing WordPress Plugins

22,392 views

Published on

A talk on developing WordPress plugins, basically an introduction on how to extend the most popular blogging app today. Used for WordCamp Philippines 2008.

Published in: Technology, Business
1 Comment
11 Likes
Statistics
Notes
No Downloads
Views
Total views
22,392
On SlideShare
0
From Embeds
0
Number of Embeds
15,400
Actions
Shares
0
Downloads
243
Comments
1
Likes
11
Embeds 0
No embeds

No notes for slide

Developing WordPress Plugins

  1. 1. Developing WordPress Plugins Markku Seguerra http://rebelpixel.com
  2. 2. What is a WordPress plugin? <ul><ul><li>Little applications used to enhance functionality or add specific functions tailored to a site's specific needs. </li></ul></ul>
  3. 3. Some plugins: - Akismet - WordPress Database Backup - WordPress.com Stats - wp-recent-links - Comment Hilite
  4. 4. 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.)‏
  5. 5. Structure: Things to remember - A unique descriptive name - Naming: myplugin.php or /myplugin/ folder - Readme.txt format for wordpress.org/extend/plugins - Plugin home page - File headers (very important!)‏
  6. 6. Headers <?php /* Plugin Name: Name Of The Plugin Plugin URI: http://mypage.com/myplugin/ Description: What does it do? Version: 1.0 Author: Name Of The Plugin Author Author URI: http://mypage.com/ */ ?>
  7. 7. Include your license details! <ul><ul><li>The GPL (and compatible licenses) is commonly used for plugins. </li></ul></ul>
  8. 8. Plugin Programming <ul><ul><li>Before WP 1.2, customizations required altering the core files, causing conflicts among hacks (remember my-hacks.php?) and making upgrades very tedious. </li></ul></ul>The solution?
  9. 9. Plugin API - Enabled &quot;hooks&quot; - Extend functionality without editing the core code - Two categories: Actions and Filters
  10. 10. 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] );
  11. 11. Sample action: “wp_login” function notify_on_login()‏ { // your code here // email to admin, etc... } add_action('wp_login', 'notify_on_login');
  12. 12. Filters Functions that modify text, lists and various types of information that are used and produced by WordPress. add_filter('hook_name', 'your_filter_function', [priority], [accepted_args]);
  13. 13. 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');
  14. 14. Template Tags Plugins can also be used to generate special template tags that display custom content. - Recent comments - Top posts - Ad display
  15. 15. Storing Plugin Data - For large amount of data, create your own database table. - For fairly small and/or static data, use built-in WP &quot;Options&quot; capability. add_option($name, $value, $deprecated, $autoload); get_option($option); update_option($option_name, $newvalue);
  16. 16. 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();
  17. 17. 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!
  18. 18. Sample plugin: Strip! <?php /* Plugin Name: Strip! Plugin URI: http://rebelpixel.com/ Description: Removes hyperlink tags from a given comment. Version: 0.1 Author: Markku Seguerra Author URI: http://rebelpixel.com/projects/strip/ */
  19. 19. /* 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 */
  20. 20. 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 }
  21. 21. 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 }
  22. 22. add_action('admin_head', 'strip_comments_head'); function strip_comments_head()‏ { // show the necessary css and ajax // functions used in the admin interface }
  23. 23. <script type=&quot;text/javascript&quot;> //<![CDATA[ function strip_now(cid) { jQuery.post(&quot;<?php echo get_option('siteurl'); ?>/wp-admin/admin-ajax.php&quot;, {action:&quot;strip&quot;, &quot;c&quot;:cid, &quot;cookie&quot;: encodeURIComponent(document.cookie)}, function(str) { pn = '#p-' + cid; jQuery(pn).html(str); }); } function unstrip_now(cid) { jQuery.post(&quot;<?php echo get_option('siteurl'); ?>/wp-admin/admin-ajax.php&quot;, {action:&quot;unstrip&quot;, &quot;c&quot;:cid, &quot;cookie&quot;: encodeURIComponent(document.cookie)}, function(str) { pn = '#p-' + cid; jQuery(pn).html(str); }); } //]]> </script>
  24. 24. Thank you! Markku Seguerra http://rebelpixel.com

×