В следующем уроке мы создадим плагин для получения популярных картинок из основного канала Instagram.
1. План
Наш плагин будет работать с [instagradam]
. Вы можете вставить его в любом месте, где HTML-контент может идти, например. код шаблона, код редактора и т. д.
В результате будет отображаться около 10-15 миниатюрных картинок с кликабельными ссылками. Ядро плагина основано на удаленном фиде, который мы получим с помощью API функций WordPress.
Функционально список необработанных данных будет выглядеть так:
1
2
3
4
5
6
7
|
/*
theluxurystyle — http://distilleryimage8.s3.amazonaws.com/c4c876f4780a11e2a15422000a9f19a4_5.jpg
loveobe — http://distilleryimage3.s3.amazonaws.com/0c2d3b20781911e2b92122000a9e0727_5.jpg
jaredleto — http://distilleryimage8.s3.amazonaws.com/21d07bce781c11e2adc122000a1f9ace_5.jpg
balloop — http://distilleryimage11.s3.amazonaws.com/4fe04e66781411e2890222000a1fb0b2_5.jpg
pinkshosho — http://distilleryimage10.s3.amazonaws.com/abaef1b4781b11e2a2ce22000a1fa411_5.jpg
*/
|
2. Получение идентификатора клиента и секрета
Этот шаг необходим для каждого нового плагина. Зарегистрируйте его в Instagram, чтобы получить client_id
и client_secret
. Имя плагина должно быть простыми буквенными символами в моем опыте (например, johnsplugin
).
3. Информация о плагине
Это место для описания базовых данных вашего плагина, таких как имя плагина, URL, номер версии и автор.
1
2
3
4
5
6
7
8
|
/*
Plugin Name: Instagradam
Plugin URI: http://wp.tutsplus.com/
Description: A simple and fast Instagram shortcode plugin.
Version: 1.0
Author: Adam Burucs
Author URI: http://burucs.com/
*/
|
4. Регистрация шорткода
Это определит [instagradam]
, который будет работать на основе функции instagradam_embed_shortcode
.
1
2
|
// register shortcode
add_shortcode( ‘instagradam’, ‘instagradam_embed_shortcode’ );
|
5. Определение основной функции для шорткода
Это опишет основную работу нашего плагина. $atts
и $content
должны быть определены, как мы видим здесь, но мы не будем использовать их в этом уроке.
1
2
3
4
5
6
|
// define shortcode
function instagradam_embed_shortcode( $atts, $content = null ) {
// …
}
|
6. Создание переменных
Нам нужна вспомогательная переменная для создания вывода для нашей функции и поиска данных, который использует API-функцию WordPress. Это $str
и $result
соответственно.
1
2
3
4
|
// define main output
$str = «»;
// get remote data
$result = wp_remote_get( «https://api.instagram.com/v1/media/popular?client_id=3f72f6859f3240c68b362b80c70e3121» );
|
7. Обработка ошибок подачи
Основной выбор обрабатывает ошибку канала (в некоторых случаях мы можем получить ошибки SSL, но есть исправление для этого, описанное далее в этой статье).
Если есть какая-либо ошибка, мы отображаем ее на странице: Something went wrong: ...
1
2
3
4
5
6
7
8
|
if ( is_wp_error( $result ) ) {
// error handling
$error_message = $result->get_error_message();
$str = «Something went wrong: $error_message»;
} else {
// processing further
// …
}
|
8. Больше переменных
Переменная $result
будет содержать основные данные, для обработки мы $main_data
еще один помощник с именем $main_data
. Нам также нужен счетчик для итерации.
1
2
3
4
|
// processing further
$result = json_decode( $result[‘body’] );
$main_data = array();
$n = 0;
|
9. Циклы, часть первая
Этот цикл будет собирать все имена пользователей и эскизы, которые нам нужны. Ранее я проанализировал основной канал (структуру канала), чтобы узнать, как получить нужные данные. Так что это важный шаг, и давайте не будем забывать, что Instagram может изменить это позже
и нам может понадобиться изменить $d->user->username
и $d->images->thumbnail->url
.
1
2
3
4
5
6
|
// get username and actual thumbnail
foreach ( $result->data as $d ) {
$main_data[ $n ][‘user’] = $d->user->username;
$main_data[ $n ][‘thumbnail’] = $d->images->thumbnail->url;
$n++;
}
|
10. Циклы, часть вторая
В следующих строках мы создаем HTML-код, который будет содержать изображения и ссылки из основного канала Instagram. Ссылки откроются в новом окне, сделанном с target="_blank"
. Обратите внимание на пробел в конце основной строки, это для основного разделения.
1
2
3
4
|
// create main string, pictures embedded in links
foreach ( $main_data as $data ) {
$str .= ‘<a target=»_blank» href=»http://instagram.com/’.$data[‘user’].'»><img src=»‘.$data[‘thumbnail’].'» alt=»‘.$data[‘user’].’
}
|
11. Легкая часть
Этот (короткий код) стандартный код вернет наш основной контент.
1
|
return $str;
|
12. Проблемы с SSL
В некоторых случаях функция wp_remote_get
может работать плохо, для решения этой проблемы нам нужно использовать этот код перед главными разделами кода.
1
2
3
4
5
6
|
// fix SSL request error
add_action( ‘http_request_args’, ‘no_ssl_http_request_args’, 10, 2 );
function no_ssl_http_request_args( $args, $url ) {
$args[‘sslverify’] = false;
return $args;
}
|
13. Полный код
Готовый код выглядит следующим образом.
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
43
44
45
46
47
48
49
50
51
|
/*
Plugin Name: Instagradam
Plugin URI: http://wp.tutsplus.com/
Description: A simple and fast Instagram shortcode plugin.
Version: 1.0
Author: Adam Burucs
Author URI: http://burucs.com/
*/
// fix SSL request error
add_action( ‘http_request_args’, ‘no_ssl_http_request_args’, 10, 2 );
function no_ssl_http_request_args( $args, $url ) {
$args[‘sslverify’] = false;
return $args;
}
// register shortcode
add_shortcode( ‘instagradam’, ‘instagradam_embed_shortcode’ );
// define shortcode
function instagradam_embed_shortcode( $atts, $content = null ) {
// define main output
$str = «»;
// get remote data
$result = wp_remote_get( «https://api.instagram.com/v1/media/popular?client_id=3f72f6859f3240c68b362b80c70e3121» );
if ( is_wp_error( $result ) ) {
// error handling
$error_message = $result->get_error_message();
$str = «Something went wrong: $error_message»;
} else {
// processing further
$result = json_decode( $result[‘body’] );
$main_data = array();
$n = 0;
// get username and actual thumbnail
foreach ( $result->data as $d ) {
$main_data[ $n ][‘user’] = $d->user->username;
$main_data[ $n ][‘thumbnail’] = $d->images->thumbnail->url;
$n++;
}
// create main string, pictures embedded in links
foreach ( $main_data as $data ) {
$str .= ‘<a target=»_blank» href=»http://instagram.com/’.$data[‘user’].'»><img src=»‘.$data[‘thumbnail’].'» alt=»‘.$data[‘user’].’
}
}
return $str;
}
|
Готовый вид
Это картинка, показывающая плагин в действии. Для этого шорткод был вставлен в статью.