Статьи

Сбор пожертвований с помощью WordPress: PayPal

В первой части этого мини-цикла под названием «Сбор пожертвований с помощью WordPress» вы узнаете, как написать плагин для WordPress, который позволит пользователям отправлять вам пожертвования через PayPal. Плагин использует собственную панель настроек бэкэнда и обладает широкими возможностями настройки. Итак, начнем!

В каталоге wp-content/plugins вашего сайта создайте новую папку с именем paypal-donations .

Теперь в этой папке создайте файл с именем paypal-donations.php .

Наконец, вам нужно добавить информацию о заголовке плагина, которая сообщит 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
*/

Теперь вы увидите, что ваш новый плагин отображается на странице плагинов администратора WordPress. Идите вперед и активируйте плагин, хотя пока что вы не увидите, что происходит.

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

В этом плагине шорткод будет, [donate] , и его можно добавить в любом месте ваших постов или страниц.

Чтобы добавить шорткод в 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>’;
});

На этом этапе вы можете добавить новый шорткод к сообщению или странице, хотя он будет выглядеть не совсем правильно и, скорее всего, вызовет несколько ошибок на вашем сайте.

Теперь вы определите обратные вызовы, необходимые для работы плагина, а также форму для панели настроек в админке WordPress.

Теперь вы должны добавить пустой обратный вызов, который необходим для правильной работы плагина. Он просто определяет новую функцию WordPress, открывает ее, а затем снова закрывает.

1
2
3
function donate_plugin_cb() {
    // Optional Callback
}

Затем вы добавите функцию, которая генерирует и вводит поле в форме настроек администратора для вашего адреса электронной почты 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’]}’/>»;
}

Теперь вы создадите поле ввода для настроек администратора с помощью переключателей, чтобы вы могли выбрать, какую кнопку вы хотите найти — подробнее об этом позже.

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
}

Наконец, мы создадим еще одно поле ввода с множеством выпадающих элементов, чтобы вы могли выбрать валюту, в которой будут обрабатываться ваши пожертвования 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, чтобы плагин работал.

Давайте начнем с регистрации всех настроек и их полей в 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’);

Теперь вы собираетесь сгенерировать 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
}

Затем вы добавите страницу настроек плагина в администратор 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’);

Самый последний шаг — добавить хук активации и проверить, существуют ли уже настройки. Если они это сделают, отлично — если нет, плагин будет регистрировать значения по умолчанию.

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.

Если у вас есть какие-либо вопросы, пожалуйста, оставьте комментарий ниже, и я обязательно вам помогу!