Step 0 Before we Begin
This tutorial is going to assume that you have at least a beginner’s understanding of PHP and the WordPress syntax. Though we’ll be covering everything, some knowledge beforehand will help you grasp the concepts much more easily. I’ll also assumes that you have a WP blog setup and ready to go.Step 1. What our Plugin Does
The very first step, when writing a WP plugin, is to determine everything you want it to do. Since this is our first plugin, we won’t do anything too drastic. Let’s create something which will speed up our blog; our pages will render faster, and we’ll also do a little SEO to improve our search rank and findability.“Always create a list of what you want your plugin to actually do before you write any code!”
Remove useless meta tags:
- “rsd_link” – Really Simple Discovery Link
- “wlwmanifest_link” – Windows Live Writer link
- “wp_generator” – WordPress version number
Remove unnecessary filters:
- “wptexturize” – Curly quotes
- “wp_filter_kses” – HTML in user profiles
SEO:
- Insert post tags into <head> as keywords
- Insert post excerpt into <head> as description
Step 2. Laying the Groundwork
To start, navigate to your plugins folder (“/wp-content/plugins/”), and create a new folder. We’ll call ours “simple-optimization.” Next, inside of this folder we’re going to need to create two files. The first will be the actual plugin file (named “main.php”), and the second will be the mandatory README (“readme.txt”). We’re going to leave readme.txt empty for the time being; so open main.php in your preferred text-editor and copy in the code below.- <?php
- /*
- Plugin Name: Name Of The Plugin
- Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates
- Description: A brief description of the Plugin.
- Version: The Plugin's Version Number, e.g.: 1.0
- Author: Name Of The Plugin Author
- Author URI: http://URI_Of_The_Plugin_Author
- License: A "Slug" license name e.g. GPL2
- .
- Any other notes about the plugin go here
- .
- */
- ?>
Step 3. Adding Features
The first two features we’re going to implement will also be the simplest. By default, WordPress adds several meta-tags to the <head> section of your blog, but the simple fact of the matter is that these meta-tags have absolutely no value at all; so we’re simply going to stop WordPress from adding them. Anytime WordPress performs an action, it’s either called a filter or an action, and we can either remove or manipulate these filters and actions (you can find a list of all the filters here, and all the actions here). In this case, we want to remove the various actions that add those meta-tags.To do so, we use a very simple function called “remove_action(‘action’,'function’)”. This function will remove the function declared in the second parameter from the action, the first parameter.
- // Clean up wp_head
- // Remove Really simple discovery link
- remove_action('wp_head', 'rsd_link');
- // Remove Windows Live Writer link
- remove_action('wp_head', 'wlwmanifest_link');
- // Remove the version number
- remove_action('wp_head', 'wp_generator');
- // Remove curly quotes
- remove_filter('the_content', 'wptexturize');
- remove_filter('comment_text', 'wptexturize');
- // Allow HTML in user profiles
- remove_filter('pre_user_description', 'wp_filter_kses');
Step 4. SEO
Now that we’ve cut out that bloat, let’s ensure our blog has some basic SEO; meaning, let’s make sure we have keywords per-page, which correspond to that page and change the description to match more with the article. For our keywords, we’re going to grab the tags of the current page/post. This is made super simple by the function “wp_get_post_tags()”. wp_get_post_tags will return an array of tags from the current post. We can then easily format this array into a string and place it within our header (inside the function “wp_head()”, that every theme should have in it already) by attaching our function to the wp_head action.Let’s start out by creating a new function, tags_to_keywords(), and, inside of this function, we’ll write a simple if statement, which checks to see if the current page is a single post or page (using the WP functions: is_single() and is_page()). Next, we’ll create a variable inside this if statement, named $tags, and set its content to the function wp_get_post_tags(); however, in order for this function to work, we need to pass in a parameter of “post_id”. The easiest way for us to obtain that is to globalize the WP variable $post which contains the post ID ($post->ID, $post is an object which is why we’re calling its values like so).
- // SEO
- // add tags as keywords
- function tags_to_keywords(){
- global $post;
- if(is_single() || is_page()){
- $tags = wp_get_post_tags($post->ID);
- }
- }
- function tags_to_keywords(){
- global $post;
- if(is_single() || is_page()){
- $tags = wp_get_post_tags($post->ID);
- foreach($tags as $tag){
- $tag_array[] = $tag->name;
- }
- $tag_string = implode(', ',$tag_array);
- if($tag_string !== ''){
- echo "<meta name='keywords' content='".$tag_string."' />\r\n";
- }
- }
- }
- add_action('wp_head','tags_to_keywords');
- // add except as description
- function excerpt_to_description(){
- global $post;
- if(is_single() || is_page()){
- $all_post_content = wp_get_single_post($post->ID);
- $excerpt = substr($all_post_content->post_content, 0, 100).' [...]';
- echo "<meta name='description' content='".$excerpt."' />\r\n";
- }
- else{
- echo "<meta name='description' content='".get_bloginfo('description')."' />\r\n";
- }
- }
- add_action('wp_head','excerpt_to_description');
Step 5. Optimizing the Database
The final feature for our plugin is going to optimize our database tables by removing overhead (useless/excess data in a SQL table created by manipulating the database). To begin, we’ll create a new function (optimize_database), and inside of it, we’re going to call the global WPDB variable ($wpdb). That way, we can interact with the database, without having to re-enter our authentication details. $wpdb has several methods you can use to interact with and retrieve information from the database (Full list here), but we’re only going to be using one, get_results. Using get_results with the parameters of “SHOW TABLES” and “ARRAY_A” will return to us an associative array of all the table names in the database. At that point, we can use a foreach to loop through each of the array values (using array_values to get the table name, because of how it’s layered by the function) and use another $wpdb method, query to run the optimize command (“OPTIMIZE TABLE _____”).- //Optimize Database
- function optimize_database(){
- global $wpdb;
- $all_tables = $wpdb->get_results('SHOW TABLES',ARRAY_A);
- foreach ($all_tables as $tables){
- $table = array_values($tables);
- $wpdb->query("OPTIMIZE TABLE ".$table[0]);
- }
- }
- function simple_optimization_cron_on(){
- wp_schedule_event(time(), 'daily', 'optimize_database');
- }
- function simple_optimization_cron_off(){
- wp_clear_scheduled_hook('optimize_database');
- }
- register_activation_hook(__FILE__,'simple_optimization_cron_on');
- register_deactivation_hook(__FILE__,'simple_optimization_cron_off');
Step 6. Filling out the ReadMe
The last thing we need to do for our new plugin is fill in the readme.txt file. The readme.txt file is used by the WordPress Plugin directory to display all the information you provide it about your plugin. The best way to learn how to write an effective readme.txt file is to download the default from WP, and alter it accordingly to fit your plugin. Since ours was so simplistic, this is what I personally ended up with:- === Simple Optimization ===
- Contributors: Jonathan Wolfe
- Plugin link: http://net.tutsplus.com/
- Tags: simple, optimization, keywords, tags, description, SEO, optimize, database
- Requires at least: 2.5.1
- Tested up to: 2.9.2
- Stable tag: trunk
- Silently adds several optimizing functions to the WordPress back-end to make your blog
- or site run faster.
- == Description ==
- Simple Optimization adds several functions to WordPress that help trim the fat from
- the system and also clean
- up after itself a little bit all leading to a faster loading time for your blog or website.
- **Features**
- _Remove useless meta tags:_
- * "rsd_link" - Really Simple Discovery Link
- * "wlwmanifest_link" - Windows Live Writer link
- * "wp_generator" - WordPress version number
- _Remove useless filters:_
- * "wptexturize" - currly quotes
- * "wp_filter_kses" - HTML in user profiles
- _SEO:_
- * Insert post tags into <head> as keywords
- _Routinely optimize the database_
- == Installation ==
- 1. Download, unzip and upload to your WordPress plugins directory
- 2. activate the plugin within you WordPress Administration
That’s it!
You just successfully wrote your first WordPress plugin, which is working and ready for the WP Plugins Directory. Along the way, you learned about filters and actions, using WP global objects, a lot about the WordPress nomencalture, how to interact with the database, cron events, and activation/deactivation hooks. If you have any questions, please leave a comment and I’ll respond as soon as I can.The final code:
- <?php
- /*
- Plugin Name: Simple Optimization
- Plugin URI: http://net.tutsplus.com
- Description: A super-simple plugin to improve your blog
- Version: 1.0
- Author: Jonathan Wolfe
- Author URI: http://fire-studios.com
- License: GPL2
- .
- This plugin written for NETTUTS at http://net.tutsplus.com
- .
- */
- // Clean up wp_head
- // Remove Really simple discovery link
- remove_action('wp_head', 'rsd_link');
- // Remove Windows Live Writer link
- remove_action('wp_head', 'wlwmanifest_link');
- // Remove the version number
- remove_action('wp_head', 'wp_generator');
- // Remove curly quotes
- remove_filter('the_content', 'wptexturize');
- remove_filter('comment_text', 'wptexturize');
- // Allow HTML in user profiles
- remove_filter('pre_user_description', 'wp_filter_kses');
- // SEO
- // add tags as keywords
- function tags_to_keywords(){
- global $post; // Get access to the $post object
- if(is_single() || is_page()){ // only run on posts or pages
- $tags = wp_get_post_tags($post->ID); // get post tags
- foreach($tags as $tag){ // loop through each tag
- $tag_array[] = $tag->name; // create new array with only tag names
- }
- $tag_string = implode(', ',$tag_array); // convert array into comma seperated string
- if($tag_string !== ''){ // it we have tags
- echo "<meta name='keywords' content='".$tag_string."' />\r\n"; // add meta tag to <head>
- }
- }
- }
- add_action('wp_head','tags_to_keywords'); // Add tags_to_keywords to wp_head function
- // add except as description
- function excerpt_to_description(){
- global $post; // get access to the $post object
- if(is_single() || is_page()){ // only run on posts or pages
- $all_post_content = wp_get_single_post($post->ID); // get all content from the post/page
- $excerpt = substr($all_post_content->post_content, 0, 100).' [...]'; // get first 100 characters
- and append "[...]" to the end
- echo "<meta name='description' content='".$excerpt."' />\r\n"; // add meta tag to <head>
- }
- else{ // only run if not a post or page
- echo "<meta name='description' content='".get_bloginfo('description')."' />\r\n"; // add
- meta tag to <head>
- }
- }
- add_action('wp_head','excerpt_to_description'); // add excerpt_to_description to wp_head
- function
- //Optimize Database
- function optimize_database(){
- global $wpdb; // get access to $wpdb object
- $all_tables = $wpdb->get_results('SHOW TABLES',ARRAY_A); // get all table names
- foreach ($all_tables as $tables){ // loop through every table name
- $table = array_values($tables); // get table name out of array
- $wpdb->query("OPTIMIZE TABLE ".$table[0]); // run the optimize SQL command
- on the table
- }
- }
- function simple_optimization_cron_on(){
- wp_schedule_event(time(), 'daily', 'optimize_database'); // rdd optimize_database to wp cron
- events
- }
- function simple_optimization_cron_off(){
- wp_clear_scheduled_hook('optimize_database'); // remove optimize_database from wp cron
- events
- }
- register_activation_hook(__FILE__,'simple_optimization_cron_on'); //
- run simple_optimization_cron_on at plugin activation
- register_deactivation_hook(__FILE__,'simple_optimization_cron_off'); //
- run simple_optimization_cron_off at plugin deactivation
- ?>
This site and this post very help full for all visitor any can get help by read this content and site.
ReplyDeleteOr any body can get more help this wp web design site.