Делаем плагин на WordPress для Envato Marketplace
Недавно я писал об моём скромном плагине, который отображает в WordPress Dashboard информацию о вашем балансе аккаунта и транзакцмй на стоках от Envato. Плагин был залит на этот же сток, но увы он не оправдал себя (всего одна продажа), в связи с этим я хочу рассказать вам, как создать простенький плагин под wordpress на примере моего плагина EnvatoStat.
Перед тем как начать, нам необходимо посмотреть какое API предоставляет Envato Marketplace, найти его можно по этой ссылке . API возвращает данные в JSON формате, поэтому нам будет необходима функция json_decode (поддерживается начиная с PHP 5.2).
Шаг первый. Создаём заготовку
Прежде чем мы начнем писать код для парсинга данных из API и отображения их в плагине, давайте создадим заготовку для плагина. Первое что мы сделаем, это обьявим мета-данные плагина, создадим основную функцию, и повешаем хук на нашу функцию, что бы она вызывалась когда инициализируються плагины для dashboard.
<?php
/*
Plugin Name: EnvatoStat
Plugin URI: http://wordpress.org/
Description: Plugin for Envato Marketplace users.
Author: Ваше имя
Version: 1.0
Author URI: http://wordpress.org/
*/
// Создаем хук
add_action('wp_dashboard_setup', 'envatostat_setup');
function envatostat_setup()
{
wp_add_dashboard_widget('envatostat_widget', 'EnvatoStat', 'envatostat_widget');
}
// Функция самого виджета
function envatostat_widget()
{
// ...
}
На событие wp_dashboard_setup мы вешаем вызов нашей функции envatostat_setup , в которое проделывается аналогичное только для добавление виджета в dashboard.
Шаг второй. Делаем страницу настроек
Страница с настройками необходимо для заполнения данных пользователем, а именно имя аккаунта и API ключ от Envato Marketplace. В конец файла добавляем вот такой код:
// Добавляем пункт меню
add_action('admin_menu', 'envatostat_create_menuitem');
function envatostat_create_menuitem()
{
add_options_page('EnvatoStat Settings', 'EnvatoStat Settings', 'manage_options', 'envatostat_menuitem', 'envatostat_settings_page');
}
// Страница настроек
function envatostat_settings_page()
{
echo '<div class="wrap">
<div id="icon-options-general" class="icon32"><br /></div>
<h2>EnvatoStat Settings</h2>';
if($_REQUEST['do'] == 'save')
{
update_option('envato_username', $_REQUEST['envato_username']);
update_option('envato_apikey', $_REQUEST['envato_apikey']);
echo '<div id="message" class="updated"><p><strong>Changes saved</strong></p></div>';
}
echo '<form action="" method="post">
<table class="form-table">
<tr>
<td width="160">You username on Envato:</td>
<td><input type="text" name="envato_username" size="20" value="' . get_option('envato_username', '') . '" /></td>
</tr>
<tr>
<td>You API key of Envato:</td>
<td><input type="text" name="envato_apikey" size="45" value="' . get_option('envato_apikey', '') . '" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="submit" value="Save changes" class="button-primary" /></td>
</tr>
</table>
<input type="hidden" name="do" value="save" />
</form>';
}
Тут мы создаем простую форму с двумя полями (имя аккаунта и api ключ), когда пользователь клацает на сабмит, мы сохраняем данные в таблицу WordPress настроек.
Шаг третий. Сердце плагина
Ну вот и подошли мы к основному, помните функцию envatostat_widget , в неё мы будем писать код, который ниже. Но для начала поговорим о том, что будет происходить. Выдераем данные о аккаунта из WordPress и проверяем, если они не пустые, тогда посылаем запрос к апи на получение состоянии баланса пользователя. Когда получим данные, распарсиваем их и если они вылидны, тогда посылаем второй запрос на последние продажи пользователя, их мы аналогично распарсиваем и если они валидны выводим.
$username = get_option('envato_username', '');
$apikey = get_option('envato_apikey', '');
if($username != '' && $apikey != '')
{
$json_url = "http://marketplace.envato.com/api/v1/" . $username . "/" . $apikey . "/account.json";
$api = @file_get_contents($json_url);
$data = json_decode($api);
if($data == null)
{
echo "Error response data :(";
}
else
{
echo '<img src="' . $data->account->image . '" style="float: left;" />
<div style="float: left; margin-left: 10px;">
<table width="100%" cellspacing="6">
<tr>
<td width="150">Your balance:</td>
<td>$' . $data->account->balance . '</td>
</tr>
<tr>
<td>Commision rate:</td>
<td>' . $data->account->current_commission_rate * 100 . '%</td>
</tr>
<tr>
<td>Total deposits:</td>
<td>$' . $data->account->total_deposits. '</td>
</tr>
<tr>
<td>Total earnings:</td>
<td>$' . $data->account->available_earnings;. '</td>
</tr>
</table>
</div>
<div class="clear"></div>
<hr size="1" color="#dcdcdc" />';
$json_url = "http://marketplace.envato.com/api/v1/" . $username . "/" . $apikey . "/statement.json";
$api = @file_get_contents($json_url);
$data = json_decode($api);
if($data == null)
{
echo "Error response data :(";
}
else
{
echo '<table width="100%" cellspacing="6">';
foreach($data->statement as $stat)
{
$stat->description = str_replace('sold ', '', $stat->description);
$stat->description = str_replace('w/ rate of ', '(rate of ', $stat->description) . ')';
$datetime = new DateTime($stat->occured_at);
echo '<tr>';
echo '<td width="30"><span style="font-size:10px;color:' . ($stat->kind == "sale" ? "green" : "red") . '">' . $stat->kind . '</span></td>';
echo '<td width="60" align="center"><span style="font-size:10px;"><strong>$' . $stat->amount . '</strong></span></td>';
echo '<td><span style="font-size:10px;">' . $stat->description . '</span></td>';
echo '<td width="65" align="right"><span style="font-size:10px;">' . $datetime->format("d.m.Y") . '</span></td>';
echo '</tr>';
}
echo '</table>';
}
}
}
else
{
echo "Please enter your username and API key of Envato, on widget settings page.";
}
?>
Теперь наш плагин, готов осталось его лишь установить, заливаем наш файл с плагином в вордпресс, в папку /wp-content/plugins/, затем в панели управления включаем, теперь он полноценно работает. На этом все!
Поправил последний кусок кода. Кстати, эта статья показывает как можно легко делать небольшие плагины для вордпресса :)