Создание плагина для WordPress на примере антиспам плагина

20 июня 2014 | Автор: | Категория: Плагины wordpress

На прошлой неделе начал понемногу изучать документацию по написанию WordPress плагинов. Чтобы закрепить теорию попробовал сам написать небольшой плагин, который добавляет для формы комментариев дополнительное поле с вопросом для проверки на спам.
Custom Anti Spam Plugin
Плагин я назвал Custom Anti Spam. После его активации, в разделе «Настройки» админ панели WordPress появляется дополнительный раздел, в котором можно указать вопрос, который будет выводиться в форме комментариев и правильный ответ на него.

Custom Anti Spam Plugin Настройки
Таким образом, если кто-то напишет персональную спамилку под Ваш блог с указанием верного ответа на антиспам вопрос, можно просто зайти в админ панель и сменить вопрос.

Весь функционал плагина реализован в одном файле custom_anti_spam.php:

<?php
/*
Plugin Name: Custom Anti Spam
Description: Anti-spam plugin wordpress for blocks spam in comments.
Version: 1.0
Author: SeoGrot
Author URI: http://seogrot.com/
*/
 
add_action('admin_menu','cas_add_menu');      
add_action('comment_post',  'comment_post');     
add_filter('comment_form_default_fields','cas_fields');
 
add_option('user_question', 'Сколько пальцев на руке');
add_option('user_answer', '5');
 
function cas_options_page()
{
		$question = get_option('user_question');
		$answer = get_option('user_answer');
	if (isset($_POST['submit'])) 
	{  
	        $question = $_POST['question'];
		$answer = $_POST['answer'];
 
		update_option('user_question', $question);
		update_option('user_answer', $answer);
 
	} 
?>
<h2>Custom Anti Spam Plugin Options</h2>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>?page=custom_anti_spam.php&amp;updated=true" method="post">
<table>
<tr><td>Enter your question:</td><td><input name="question" type="text" size="50" value="<?php echo $question; ?>" /></td>
</tr>
<tr><td>Enter your answer:</td><td><input name="answer" type="text" size="50" value="<?php echo $answer; ?>" /></td>
</tr>
<tr><td colspan="2"><input type="submit" name="submit" value="SAVE" /></td>
</tr>
</form>
<?php
}
 
function cas_add_menu()
{ 
	add_options_page('Custom Anti Spam','Custom Anti Spam',8,basename(__FILE__),'cas_options_page');
}
 
function cas_fields($fields) {
    $question = get_option('user_question');
    $fields['new'] = '<p class="comment-form-question">' . $question . '<span class="required">*</span></p><p><input id="youranswer" name="youranswer" type="text" value="" ></p>';
    return $fields;
}
 
function comment_post($id)
{ 
	global $user_ID;
	$answer = get_option('user_answer');
	if ($user_ID)
		return $id;
 
	if ($_POST['youranswer'] != $answer)
	{
		wp_delete_comment($id);
		echo '<br /><center>' . 'Wrong captcha!' . '<br /><a href="javascript:history.back()">' . 'Go back' . '</a><br /></center>';
		exit;
	}
}
?>

где:

Функция add_action() — регистрирует хук на действия (admin_menu и comment_post). Действие admin_menu используется для вызова функции добавления нового пункта меню в админ панель. Действие comment_post — срабатывает сразу после добавления комментария и передает его ID.

Функция add_filter() — регистрирует хук на фильтр comment_form_default_fields, позволяющий добавить или удалить поля для формы комментариев. В нашем случае поля будут добавляться.

Функция add_option() — добавляет в таблицу options базы данных опцию с заданным значением. Добавляем две опции: в первой будет храниться вопрос, во второй ответ.

Функция get_option() — считывает значения опций из базы данных.

Функция update_option() — обновляет значения опций в базе данных.

Функция add_options_page() — добавляет страницу и пункт в меню «Настройки» админ-панели WordPress.

Функция wp_delete_comment() — удаляет либо помещает в корзину комментарий с указанным ID. Нам нужно, чтобы комментарий удалялся, так как если в случае неправильного ответа на антиспам вопрос комментарий попадёт в корзину, то повторно этот же комментарий добавить не получится. Система воспримет его как дубликат. Чтобы отключить корзину нужно в файл wp-config.php добавить строку: define(‘EMPTY_TRASH_DAYS’, 0);

Скачать файл плагина Custom_Anti_Spam.zip

Если данная статья попадётся на глаза гуру wordpress, интересно бы было услышать критику в комментариях: какие уязвимости есть у данного плагина, что можно бы было оптимизировать и т.п.

Метки: 

Комментарии к "Создание плагина для WordPress на примере антиспам плагина"

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *