В первой части этого мини-цикла под названием «Сбор пожертвований с помощью WordPress» вы узнаете, как написать плагин для WordPress, который позволит пользователям отправлять вам пожертвования через PayPal. Плагин использует собственную панель настроек бэкэнда и обладает широкими возможностями настройки. Итак, начнем!
Инициализация плагина
Шаг 1
В каталоге wp-content/plugins
вашего сайта создайте новую папку с именем paypal-donations
.
Шаг 2
Теперь в этой папке создайте файл с именем paypal-donations.php
.
Шаг 3
Наконец, вам нужно добавить информацию о заголовке плагина, которая сообщит WordPress, что ваш новый плагин действительно существует на вашем сервере. Вы можете изменить эти данные по своему усмотрению, хотя обычно они должны быть в таком порядке с минимумом этой информации.
1
2
3
4
5
6
7
8
9
|
<?php
/*
Plugin Name: PayPal Donations
Plugin URI: http://code.tutsplus.com
Description: Simple PayPal donation plugin.
Version: 1.0
Author: Sam Berson
Author URI: http://www.samberson.com
*/
|
Шаг 4
Теперь вы увидите, что ваш новый плагин отображается на странице плагинов администратора WordPress. Идите вперед и активируйте плагин, хотя пока что вы не увидите, что происходит.
Добавление шорткода
Вы сможете использовать кнопку пожертвования с помощью простого шорткода во всех создаваемых вами сообщениях или страницах. По сути, шорткод — это небольшой фрагмент текста, заключенный в квадратные скобки, который позволяет вызывать любую функцию или действие из плагина или темы в редакторе сообщений.
В этом плагине шорткод будет, [donate]
, и его можно добавить в любом месте ваших постов или страниц.
Шаг 1
Чтобы добавить шорткод в WordPress, вам нужно использовать функцию add_shortcode
, и в ней определить, каким будет шорткод (в данном случае «пожертвовать»), а затем вы определите поля формы для кнопки пожертвования, и информация об изображении для кнопки.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
// Adds [donate] shortcode
add_shortcode(‘donate’, function() {
$donate_options = get_option(‘donate_plugin_options’);
// Deafult Button Image
$url = ‘https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif’;
// Checks Which Image To Use
switch ($donate_options[‘button’]) {
case ‘small’:
$url = ‘https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif’;
break;
case ‘medium’:
$url = ‘https://www.paypal.com/en_US/i/btn/btn_donate_LG.gif’;
break;
case ‘large’:
$url = ‘https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif’;
break;
}
return ‘<form action=»https://www.paypal.com/cgi-bin/webscr» method=»post»>
<div class=»paypal-donations»>
<input type=»hidden» name=»cmd» value=»_donations»>
<input type=»hidden» name=»business» value=»‘.$donate_options[‘paypal_user_id’].'»>
<input type=»hidden» name=»rm» value=»0″>
<input type=»hidden» name=»currency_code» value=»‘.$donate_options[‘currency’].'»>
<input type=»image» src=»‘.$url.'» name=»submit» alt=»PayPal — The safer, easier way to pay online.»>
<img alt=»» src=»https://www.paypal.com/en_US/i/scr/pixel.gif» width=»1″ height=»1″>
</div>
</form>’;
});
|
Шаг 2
На этом этапе вы можете добавить новый шорткод к сообщению или странице, хотя он будет выглядеть не совсем правильно и, скорее всего, вызовет несколько ошибок на вашем сайте.
Обратные вызовы и функции форм
Теперь вы определите обратные вызовы, необходимые для работы плагина, а также форму для панели настроек в админке WordPress.
Шаг 1
Теперь вы должны добавить пустой обратный вызов, который необходим для правильной работы плагина. Он просто определяет новую функцию WordPress, открывает ее, а затем снова закрывает.
1
2
3
|
function donate_plugin_cb() {
// Optional Callback
}
|
Шаг 2
Затем вы добавите функцию, которая генерирует и вводит поле в форме настроек администратора для вашего адреса электронной почты PayPal.
1
2
3
4
5
|
// Generate INPUT Field form form settings [EMAIL]
function paypal_user_id_html() {
$donate_options = get_option(‘donate_plugin_options’);
echo «<input name=’donate_plugin_options[paypal_user_id]’ type=’email’ value='{$donate_options[‘paypal_user_id’]}’/>»;
}
|
Шаг 3
Теперь вы создадите поле ввода для настроек администратора с помощью переключателей, чтобы вы могли выбрать, какую кнопку вы хотите найти — подробнее об этом позже.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
// Generate INPUT Field form form settings [RADIO]
function paypal_donation_button_html() {
$donate_options = get_option(‘donate_plugin_options’);
?>
<p>
<label>
<input type=’radio’ name=’donate_plugin_options[button]’ value=’small’ <?php if($donate_options[‘button’] == ‘small’) { echo ‘checked’;
<img src=’https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif’ alt=’small’ style=’vertical-align: middle;margin-left: 15px;’>
</label>
</p>
<p>
<label>
<input type=’radio’ name=’donate_plugin_options[button]’ value=’medium’ <?php if($donate_options[‘button’] == ‘medium’) { echo ‘checked’;
<img src=’https://www.paypal.com/en_US/i/btn/btn_donate_LG.gif’ alt=’medium’ style=’vertical-align: middle;margin-left: 15px;’>
</label>
</p>
<p>
<label>
<input type=’radio’ name=’donate_plugin_options[button]’ value=’large’ <?php if($donate_options[‘button’] == ‘large’) { echo ‘checked’;
<img src=’https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif’ alt=’large’ style=’vertical-align: middle;margin-left: 15px;’></br>
</label>
</p>
<?php
}
|
Шаг 4
Наконец, мы создадим еще одно поле ввода с множеством выпадающих элементов, чтобы вы могли выбрать валюту, в которой будут обрабатываться ваши пожертвования PayPal, добавив массив PHP.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
// Generate INPUT Field form form settings [DROPDOWN]
function paypal_currency_html() {
$donate_options = get_option(‘donate_plugin_options’);
$currency = array(
‘AUD’ => ‘Australian Dollars (A $)’,
‘BRL’ => ‘Brazilian Real’,
‘CAD’ => ‘Canadian Dollars (C $)’,
‘CZK’ => ‘Czech Koruna’,
‘DKK’ => ‘Danish Krone’,
‘EUR’ => ‘Euros (€)’,
‘HKD’ => ‘Hong Kong Dollar ($)’,
‘HUF’ => ‘Hungarian Forint’,
‘ILS’ => ‘Israeli New Shekel’,
‘JPY’ => ‘Yen (¥)’,
‘MYR’ => ‘Malaysian Ringgit’,
‘MXN’ => ‘Mexican Peso’,
‘NOK’ => ‘Norwegian Krone’,
‘NZD’ => ‘New Zealand Dollar ($)’,
‘PHP’ => ‘Philippine Peso’,
‘PLN’ => ‘Polish Zloty’,
‘GBP’ => ‘Pounds Sterling (£)’,
‘RUB’ => ‘Russian Ruble’,
‘SGD’ => ‘Singapore Dollar ($)’,
‘SEK’ => ‘Swedish Krona’,
‘CHF’ => ‘Swiss Franc’,
‘TWD’ => ‘Taiwan New Dollar’,
‘THB’ => ‘Thai Baht’,
‘TRY’ => ‘Turkish Lira’,
‘USD’ => ‘US Dollars ($)’,
);
?>
<select id=’currency_code’ name=’donate_plugin_options[currency]’>
<?php
foreach($currency as $code => $label) :
if( $code == $donate_options[‘currency’] ) { $selected = «selected=’selected'»;
echo «<option {$selected} value='{$code}’>{$label}</option>»;
endforeach;
?>
</select>
<?php
}
|
Подключить все это
Теперь, когда вы создали свой шорткод и поля формы, вам необходимо подключить его обратно к администратору WordPress, чтобы плагин работал.
Шаг 1
Давайте начнем с регистрации всех настроек и их полей в WordPress, а затем добавим действие администратору.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
// Register All Settings And And Setting Fields as Used in wordpress
function register_settings_and_fields() {
// $option_group, $option_name, $sanitize_callback
register_setting(‘donate_plugin_options’,’donate_plugin_options’);
// $id, $title, $callback, $page
add_settings_section(‘donate_plugin_main_section’, ‘Main Settings’, ‘donate_plugin_cb’, __FILE__);
// $id, $title, $callback, $page, $section, $args
add_settings_field(‘paypal_user_id’, ‘PayPal ID: ‘, ‘paypal_user_id_html’, __FILE__, ‘donate_plugin_main_section’);
// $id, $title, $callback, $page, $section, $args
add_settings_field(‘button’, ‘Select Button: ‘, ‘paypal_donation_button_html’, __FILE__, ‘donate_plugin_main_section’);
// $id, $title, $callback, $page, $section, $args
add_settings_field(‘currency’, ‘Currency: ‘, ‘paypal_currency_html’, __FILE__, ‘donate_plugin_main_section’);
}
add_action(‘admin_init’, ‘register_settings_and_fields’);
|
Шаг 2
Теперь вы собираетесь сгенерировать HTML-код главной страницы параметров в WordPress, настроив div с классом wrap
, а затем откройте форму и импортируйте поля настроек.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
// Generate HTML of main options page
function options_page_html() {
?>
<div class=»wrap»>
<h2>Plugin Options</h2>
<form method=»post» action=»options.php» enctype=»multipart/form-data»>
<?php
// $option_group
settings_fields( ‘donate_plugin_options’ );
// $page
do_settings_sections( __FILE__ );
?>
<p class=»submit»>
<input type=»submit» class=»button-primary» name=»submit» value=»Save Changes»>
</p>
</form>
</div>
<?php
}
|
Шаг 3
Затем вы добавите страницу настроек плагина в администратор WordPress, используя функцию options_init()
функцию add_options_page
.
1
2
3
4
5
6
7
|
// Admin Menu Action Hook
function options_init() {
// page_title, menu_title, capability, menu_slug, function
add_options_page(‘Donate Plugin Options’, ‘Donate Plugin Options’, ‘administrator’, __FILE__, ‘options_page_html’);
}
add_action(‘admin_menu’, ‘options_init’);
|
Шаг 4
Самый последний шаг — добавить хук активации и проверить, существуют ли уже настройки. Если они это сделают, отлично — если нет, плагин будет регистрировать значения по умолчанию.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
// Activation Hook.
function donate_activate() {
$defaults = array(
‘paypal_user_id’ => get_option(‘admin_email’),
‘button’ => ‘small’,
‘currency’ => ‘USD’
);
if(get_option(‘donate_plugin_options’)) return;
add_option( ‘donate_plugin_options’, $defaults );
}
register_activation_hook( __FILE__, ‘donate_activate’ );
|
Окончательный исходный код
Ваш плагин теперь должен быть полностью функциональным, добавив шорткод [donate]
к вашим постам или страницам! Вот полный исходный код для плагина:
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
|
<?php
/*
Plugin Name: PayPal Donations
Plugin URI: http://code.tutsplus.com
Description: Simple PayPal donation plugin.
Version: 1.0
Author: Sam Berson
Author URI: http://www.samberson.com
*/
// Adds [donate] shortcode
add_shortcode(‘donate’, function() {
$donate_options = get_option(‘donate_plugin_options’);
// Deafult Button Image
$url = ‘https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif’;
// Checks Which Image To Use
switch ($donate_options[‘button’]) {
case ‘small’:
$url = ‘https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif’;
break;
case ‘medium’:
$url = ‘https://www.paypal.com/en_US/i/btn/btn_donate_LG.gif’;
break;
case ‘large’:
$url = ‘https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif’;
break;
}
return ‘<form action=»https://www.paypal.com/cgi-bin/webscr» method=»post»>
<div class=»paypal-donations»>
<input type=»hidden» name=»cmd» value=»_donations»>
<input type=»hidden» name=»business» value=»‘.$donate_options[‘paypal_user_id’].'»>
<input type=»hidden» name=»rm» value=»0″>
<input type=»hidden» name=»currency_code» value=»‘.$donate_options[‘currency’].'»>
<input type=»image» src=»‘.$url.'» name=»submit» alt=»PayPal — The safer, easier way to pay online.»>
<img alt=»» src=»https://www.paypal.com/en_US/i/scr/pixel.gif» width=»1″ height=»1″>
</div>
</form>’;
});
function donate_plugin_cb() {
// Optional Callback
}
// Generate INPUT Field form form settings [EMAIL]
function paypal_user_id_html() {
$donate_options = get_option(‘donate_plugin_options’);
echo «<input name=’donate_plugin_options[paypal_user_id]’ type=’email’ value='{$donate_options[‘paypal_user_id’]}’/>»;
}
// Generate INPUT Field form form settings [RADIO]
function paypal_donation_button_html() {
$donate_options = get_option(‘donate_plugin_options’);
?>
<p>
<label>
<input type=’radio’ name=’donate_plugin_options[button]’ value=’small’ <?php if($donate_options[‘button’] == ‘small’) { echo ‘checked’;
<img src=’https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif’ alt=’small’ style=’vertical-align: middle;margin-left: 15px;’>
</label>
</p>
<p>
<label>
<input type=’radio’ name=’donate_plugin_options[button]’ value=’medium’ <?php if($donate_options[‘button’] == ‘medium’) { echo ‘checked’;
<img src=’https://www.paypal.com/en_US/i/btn/btn_donate_LG.gif’ alt=’medium’ style=’vertical-align: middle;margin-left: 15px;’>
</label>
</p>
<p>
<label>
<input type=’radio’ name=’donate_plugin_options[button]’ value=’large’ <?php if($donate_options[‘button’] == ‘large’) { echo ‘checked’;
<img src=’https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif’ alt=’large’ style=’vertical-align: middle;margin-left: 15px;’></br>
</label>
</p>
<?php
}
// Generate INPUT Field form form settings [DROPDOWN]
function paypal_currency_html() {
$donate_options = get_option(‘donate_plugin_options’);
$currency = array(
‘AUD’ => ‘Australian Dollars (A $)’,
‘BRL’ => ‘Brazilian Real’,
‘CAD’ => ‘Canadian Dollars (C $)’,
‘CZK’ => ‘Czech Koruna’,
‘DKK’ => ‘Danish Krone’,
‘EUR’ => ‘Euros (€)’,
‘HKD’ => ‘Hong Kong Dollar ($)’,
‘HUF’ => ‘Hungarian Forint’,
‘ILS’ => ‘Israeli New Shekel’,
‘JPY’ => ‘Yen (¥)’,
‘MYR’ => ‘Malaysian Ringgit’,
‘MXN’ => ‘Mexican Peso’,
‘NOK’ => ‘Norwegian Krone’,
‘NZD’ => ‘New Zealand Dollar ($)’,
‘PHP’ => ‘Philippine Peso’,
‘PLN’ => ‘Polish Zloty’,
‘GBP’ => ‘Pounds Sterling (£)’,
‘RUB’ => ‘Russian Ruble’,
‘SGD’ => ‘Singapore Dollar ($)’,
‘SEK’ => ‘Swedish Krona’,
‘CHF’ => ‘Swiss Franc’,
‘TWD’ => ‘Taiwan New Dollar’,
‘THB’ => ‘Thai Baht’,
‘TRY’ => ‘Turkish Lira’,
‘USD’ => ‘US Dollars ($)’,
);
?>
<select id=’currency_code’ name=’donate_plugin_options[currency]’>
<?php
foreach($currency as $code => $label) :
if( $code == $donate_options[‘currency’] ) { $selected = «selected=’selected'»;
echo «<option {$selected} value='{$code}’>{$label}</option>»;
endforeach;
?>
</select>
<?php
}
// Register All Settings And And Setting Fields as Used in wordpress
function register_settings_and_fields() {
// $option_group, $option_name, $sanitize_callback
register_setting(‘donate_plugin_options’,’donate_plugin_options’);
// $id, $title, $callback, $page
add_settings_section(‘donate_plugin_main_section’, ‘Main Settings’, ‘donate_plugin_cb’, __FILE__);
// $id, $title, $callback, $page, $section, $args
add_settings_field(‘paypal_user_id’, ‘PayPal ID: ‘, ‘paypal_user_id_html’, __FILE__, ‘donate_plugin_main_section’);
// $id, $title, $callback, $page, $section, $args
add_settings_field(‘button’, ‘Select Button: ‘, ‘paypal_donation_button_html’, __FILE__, ‘donate_plugin_main_section’);
// $id, $title, $callback, $page, $section, $args
add_settings_field(‘currency’, ‘Currency: ‘, ‘paypal_currency_html’, __FILE__, ‘donate_plugin_main_section’);
}
add_action(‘admin_init’, ‘register_settings_and_fields’);
// Generate HTML of main options page
function options_page_html() {
?>
<div class=»wrap»>
<h2>Plugin Options</h2>
<form method=»post» action=»options.php» enctype=»multipart/form-data»>
<?php
// $option_group
settings_fields( ‘donate_plugin_options’ );
// $page
do_settings_sections( __FILE__ );
?>
<p class=»submit»>
<input type=»submit» class=»button-primary» name=»submit» value=»Save Changes»>
</p>
</form>
</div>
<?php
}
// Admin Menu Action Hook
function options_init() {
// page_title, menu_title, capability, menu_slug, function
add_options_page(‘Donate Plugin Options’, ‘Donate Plugin Options’, ‘administrator’, __FILE__, ‘options_page_html’);
}
add_action(‘admin_menu’, ‘options_init’);
// Activation Hook.
function donate_activate() {
$defaults = array(
‘paypal_user_id’ => get_option(‘admin_email’),
‘button’ => ‘small’,
‘currency’ => ‘USD’
);
if(get_option(‘donate_plugin_options’)) return;
add_option( ‘donate_plugin_options’, $defaults );
}
register_activation_hook( __FILE__, ‘donate_activate’ );
|
В итоге
Теперь вы узнали, как разработать совершенно новый плагин, который позволяет пользователям делать пожертвования через PayPal. Теперь вы можете инициализировать плагин, использовать шорткоды и добавить страницу настроек своему администратору WordPress.
В следующей и последней части этой мини-серии вы узнаете, как написать похожий плагин, позволяющий пользователям делать пожертвования, используя биткойны вместо обычной валюты с PayPal.
Если у вас есть какие-либо вопросы, пожалуйста, оставьте комментарий ниже, и я обязательно вам помогу!