A talk on developing WordPress plugins, basically an introduction on how to extend the most popular blogging app today. Used for WordCamp Philippines 2008.
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. 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. 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.
8.
9. Plugin API - Enabled "hooks" - Extend functionality without editing the core code - Two categories: Actions and Filters
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. Sample action: “wp_login” function notify_on_login() { // your code here // email to admin, etc... } add_action('wp_login', 'notify_on_login');
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. 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. Template Tags Plugins can also be used to generate special template tags that display custom content. - Recent comments - Top posts - Ad display
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 "Options" capability. add_option($name, $value, $deprecated, $autoload); get_option($option); update_option($option_name, $newvalue);
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. 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. 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. /* 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. 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. 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 }