В предыдущей статье мы рассмотрели предыдущие статьи, касающиеся запросов GET, встроенных средств PHP для выполнения запросов, и рассмотрели wp_remote_post
API WordPress wp_remote_post
вместе с аргументами, которые она предлагает.
В этой статье мы собираемся использовать wp_remote_post
таким образом, чтобы мы могли увидеть его в действии. Помните, что это, как и wp_remote_post
является частью HTTP API, и есть другие функции, которые стоит рассмотреть.
Но сейчас мы собираемся запустить wp_remote_post
.
В частности, мы собираемся сделать следующее:
- Когда страница загрузится, мы собираемся представить некоторую информацию в пользовательский скрипт
- Скрипт изучит информацию и вернет ее на нашу страницу
- Затем мы отобразим данные на странице
Конечно, это немного надуманный пример, но он даст нам опыт создания отдельного сценария PHP, который можно использовать для операций, запускаемых с помощью wp_remote_post
.
В любом случае, для целей этого примера мы собираемся использовать коллекцию PHP $_SERVER
чтобы регистрировать, когда пользователь представил свои предпочтения, а не требовать, чтобы они вошли в систему.
Наконец, исходный код будет доступен на GitHub и доступен в конце этой серии в следующей статье.
Однако сейчас давайте начнем с работы над плагином.
Потушить класс
Если вы следили за любыми моими статьями в течение последних нескольких месяцев, то вы знаете, что я фанат шаблона синглтона и что я обычно использую тот же самый шаблон для создания своих плагинов.
С этой целью многое из этого будет повторяться — пока ничего. Изменится бизнес-логика — или основная логика — плагина, так что следите за обновлениями.
Подготовьте плагин
В вашем каталоге wp-content / plugins создайте каталог с именем wp-remote-post-example, так как это будет именем нашего плагина. После этого все следующие файлы:
- WP-удаленный пост-example.php
- Класс-сор-дистанционный после example.php
- WP-дистанционного receiver.php
В wp-remote-post-example.php добавьте следующий код:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
<?php
/**
* Plugin Name: WP Remote Post Example
* Plugin URI: http://tommcfarlin.com/wp-remote-post/
* Description: An example plugin demonstrating how to use <code>wp_remote_post</code>.
* Version: 1.0.0
* Author: Tom McFarlin
* Author URI: http://tommcfarlin.com
* License: GPL-2.0+
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
*/
// If this file is called directly, abort.
if ( ! defined( ‘WPINC’ ) ) {
die;
}
require_once( plugin_dir_path( __FILE__ ) . ‘class-wp-remote-post.php’ );
WP_Remote_Post_Example::get_instance();
«
|
Затем в class-wp-remote-post-example.php добавьте следующий код:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
<?php
class WP_Remote_Post_Example {
protected static $instance = null;
private function __construct() {
}
public static function get_instance() {
if ( null == self::$instance ) {
self::$instance = new self;
}
return self::$instance;
}
}
«
|
Наконец, добавьте следующую строку в wp-remote-receiver.php :
01
02
03
04
05
06
07
08
09
10
11
12
|
<?php
echo «<h4>The Post Data</h4>»;
echo «<ul>»;
foreach( $_POST as $key => $value ) {
echo «<li>» .
}
echo «</ul>»;
echo «<p>You can now save or disregard this information, </p>»;
«
|
Обратите внимание, что мы собираемся перебирать список данных $_POST
и отображать их в виде списка, который облегчает чтение.
Обратите внимание, что ради пространства я оставляю комментарии к коду из этого конкретного плагина. Загружаемый файл на GitHub будет полностью документирован, а также будет доступен в следующем посте.
На этом этапе вы сможете активировать плагин; однако после активации ничего не произойдет, кроме как увидеть успешное сообщение.
Это хорошо!
Получить информацию о запросе
На данный момент, давайте соберем информацию, которую мы хотим отправить как часть запроса. В частности, давайте получим следующее:
- Уникальный адрес посетителя
- Адрес домашней страницы блога
- Адрес страницы, которая посещается
Добавьте следующую строку в конструктор (частная функция __construct
, а не публичная функция get_instance
):
1
|
add_action( ‘the_content’, array( $this, ‘get_post_response’ ) );
|
Затем добавьте следующую функцию в класс:
01
02
03
04
05
06
07
08
09
10
11
12
13
|
public function increment_visitor_count( $content ) {
if ( is_single() ) {
$unique_id = $_SERVER[‘REMOTE_ADDR’];
$site_url = site_url();
$page_url = get_permalink();
}
return $content;
}
|
Здесь мы берем уникальный идентификатор из индекса REMOTE_ADDR
коллекции $_SERVER
, мы берем URL сайта, как определено WordPress, и затем мы сохраняем постоянную ссылку текущей страницы в ее собственную переменную.
Сделать запрос
На данный момент мы готовы сделать запрос. Напомним из предыдущей статьи, что есть несколько частей информации, которые мы должны отправить вместе с запросом:
- URL
- Содержимое тела (которое мы будем использовать в качестве уникального идентификатора, адреса и просмотренной страницы).
Достаточно просто, правда?
Итак, давайте продолжим обновлять нашу функцию выше с помощью следующего блока кода, чтобы функция теперь выглядела так:
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
|
public function increment_visitor_count( $content ) {
if ( is_single() ) {
$unique_id = $_SERVER[‘REMOTE_ADDR’];
$site_url = site_url();
$page_url = get_permalink();
$url = plugins_url( ‘wp-remote-post-example/wp-remote-receiver.php’ );
$response = wp_remote_post(
$url,
array(
‘body’ => array(
‘unique-id’ => $unique_id,
‘address’ => $site_url,
‘page-viewed’ => $page_url
)
)
);
}
return $content;
}
|
На этом этапе вы сможете перезагрузить страницу, хотя не обязательно, чтобы что-то произошло.
Даже все равно, ничего сложного, правда?
Показать результат
На данный момент, если все правильно подключено, теперь мы можем отобразить результаты.
Для этого нам нужно сначала проверить, существует ли ошибка, а затем показать сообщение, если это так; в противном случае мы отобразим результаты запроса на публикацию.
Добавьте следующее условие к функции выше непосредственно под вызовом wp_remote_post
:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
if ( is_wp_error( $response ) ) {
$html = ‘<div id=»post-error»>’;
$html .= __( ‘There was a problem retrieving the response from the server.’, ‘wprp-example’ );
$html .= ‘</div><!— /#post-error —>’;
}
else {
$html = ‘<div id=»post-success»>’;
$html .= ‘<p>’ .
$html .= ‘<p id=»response-data»>’ .
$html .= ‘</div><!— /#post-error —>’;
}
$content .= $html;
|
Обратите внимание, что мы решили добавить немного HTML на основе ответа, который будет отображаться внизу поста.
Текущая рабочая версия
На данный момент текущая рабочая версия плагина должна выглядеть так:
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
<?php
class WP_Remote_Post_Example {
protected static $instance = null;
private function __construct() {
add_action( ‘the_content’, array( $this, ‘get_post_response’ ) );
}
public static function get_instance() {
if ( null == self::$instance ) {
self::$instance = new self;
}
return self::$instance;
}
public function get_post_response( $content ) {
if ( is_single() ) {
$unique_id = $_SERVER[‘REMOTE_ADDR’];
$site_url = site_url();
$page_url = get_permalink();
$url = plugins_url( ‘wp-remote-post-example/wp-remote-receiver.php’ );
$response = wp_remote_post(
$url,
array(
‘body’ => array(
‘unique-id’ => $unique_id,
‘address’ => $site_url,
‘page-viewed’ => $page_url
)
)
);
if ( is_wp_error( $response ) ) {
$html = ‘<div id=»post-error»>’;
$html .= __( ‘There was a problem retrieving the response from the server.’, ‘wprp-example’ );
$html .= ‘</div><!— /#post-error —>’;
}
else {
$html = ‘<div id=»post-success»>’;
$html .= ‘<p>’ .
$html .= ‘<p id=»response-data»>’ .
$html .= ‘</div><!— /#post-error —>’;
}
$content .= $html;
}
return $content;
}
}
|
В следующем и последнем посте этой серии мы будем работать над тем, чтобы информация, добавленная в конец поста, выглядела немного более аккуратно благодаря использованию LESS для CSS, просто чтобы получить некоторый опыт в этом и продолжать совершенствовать как выглядит плагин
Мы также позаботимся о том, чтобы плагин был полностью документирован и доступен на GitHub для дальнейшего просмотра.
До тех пор, пока не разберитесь с тем, что мы рассмотрели здесь, у нас будет больше информации, чтобы поделиться в заключительной статье.