1. Что делает плагин.
Удаляет ненужные мета-теги:
Удаляет ненужные фильтры:
SEO:
2. C чего начать
<?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
.
*/
?>
Этот текст является необходимым для плагина WordPress. Каждую строчку каждый заполняет по своему усмотрению.
3. Добавление компонентов
По умолчанию WordPress добавляет несколько мета-тегов в разделе
, но факт в том, что эти теги не играют никакой роли. Поэтому мы собираемся приостановить создание этих тегов. WordPress выполняет действия — filter, либо action и мы можем удалить или манипулировать этими фильтрами и действиями (вы можете найти список всех фильтров здесь , и список всех действий здесь ). В нашем случае нужно удалить действия, которые добавляют мета-теги в .Для этого используется очень простая функция “remove_action(‘action’,’function’)”.
// 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');
4. SEO
Теперь сделаем так, чтобы ключевые слова в мета-тегах совпадали с содержимым страницы, и описание(description) соответствовало содержанию статьи. Для ключевых слов мы будем использовать теги текущей страницы или поста. Это делается супер просто функцией “wp_get_post_tags()”. wp_get_post_tags вернет массив тегов из текущего поста. Мы можем затем легко форматировать этот массив в строку и поместить ее в наш заголовок (внутри функции «wp_head ()».
Давайте начнем с создания новой функции, tags_to_keywords (), внутри этой функции пишем if statement, которое проверяет, является ли текущая страница отдельной записью или страницей (с помощью функций WP is_single () и is_page () ). Затем, мы создадим переменную внутри if statement, с именем $tags, для функции wp_get_post_tags (), однако для того, чтобы эта функция работала, мы должны передать в параметре «post_id».
// 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";
}
}
}
Последнее что нужно сделать, это придать функции wp_head действия.
add_action('wp_head','tags_to_keywords');
Используя тот же метод добавляем description meta-data в заголовок
// 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');
5. Оптимизация базы данных
Окончательная особенность нашего плагина — оптимизация таблицы базы данных.
//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]);
}
}
Применяем cron для оптимизации базы данных
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');
6. Заполнение ReadMe
Последнее, что нам нужно сделать для нашего нового плагина, это заполнить файл readme.txt.
=== 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
Вот и все!
Окончательный код:
<?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
?>