先决条件首先,所有回调(别名:运行时函数/方法)都应该附加到可预测的挂钩。示例:
add_action( \'plugins_loaded\', \'wpse_102852_bootstrap\' );
function wpse_102852_bootstrap()
{
// Time to attach the plugins callbacks
add_action( \'wp_loaded\', \'some_callback\' );
}
此回调连接到插件可用的第一个挂钩。现在,其他插件知道您的插件何时加载和连接挂钩。
您需要将所有执行的任务包装到类中的方法中,并将它们附加到引导/构造函数方法中。在那里,您将这些方法附加到挂钩。
运行HTTP远程请求WP HTTP API 提供一组方便的公共API函数和过滤器,可用于执行请求。
首先,您可能需要根据需要使用以下功能之一:
的
wp_remote_head()
功能通常仅用于测试某些所需的
header
.
完成请求后,您可以测试和验证是否存在错误:
$request = wp_remote_request( array( /* your arguments */ ) );
// Quite handy that wrong responses are return as WP_Error object
if (
is_wp_error( $request )
// Most remote APIs send the wrong response codes and tell your everything is fine
// just to use their own bogus error messages to annoy the shit out of you.
// So the following two lines are in 90% of all cases senseless.
OR 200 !== wp_remote_retrieve_response_code( $request )
OR "OK" !== wp_remote_retrieve_response_message( $request )
)
{
// If the remote API has good response codes, you can use above
// wp_remote_retrieve_response_code( $request ) as well to get for example 3**, 4** and 5** codes
return printf( \'%s: %s\',
$request->get_error_code(),
wp_strip_all_tags( $response->get_error_message() )
);
}
现在你得到了回应。剩下的问题是它的格式是什么。只需使用普通的PHP函数,如
json_decode()
对于JSON响应,
simplexml_load_string()
或类似的字符串等。
最后,是时候获取实际数据了。
// The actual content of the response
$content = wp_remote_retrieve_body( $request );
// An array of headers:
$headers = wp_remote_retrieve_headers( $request );
// An single header: the time the remote data was \'last-modified\' for example
// This is helpful to check for remote updates in combination with wp_remote_head()
$headers = wp_remote_retrieve_header( $request, \'last-modified\' );
最后一项任务是——在接触内容并测试是否得到JSON、XML、XLS、CSV等之前——做一些准备。总是要做的第一件事就是
trim()
: 几乎每个提供者都会意外地在响应周围填充空格。
$content = trim( $content );
$content = array_map( \'esc_attr\', $content );
// Now check if we got JSON, XML, etc. and process your data.
// Don\'t forget to use the `esc_*()` functions on the single elements
// Example:
$title = esc_html( $content[\'title\'] );
// etc.
完整的示例现在有一个示例可以做两件事:
执行远程请求将数据附加到过滤器,您可以在模板中使用该过滤器获取数据。
add_action( \'plugins_loaded\', array( \'WPSE_102852_Flickr\', \'init\' ) );
class WPSE_102852_Flickr
{
protected static $instance = null;
public static init()
{
null === self::$instance AND self::$instance = new self;
return self::$instance;
}
public function __construct()
{
add_action( \'wp_loaded\', array( $this, \'remote_request\' );
}
public function remote_request()
{
// All the logic for the remote request goes in here.
// Finally you want to save the data somewhere.
foreach ( $results as $result )
wp_insert_post( /* your data as post data */ );
}
}
现在,您可以在模板中执行以下操作:
$remote_posts = new WP_Query( array( /* your args */ ) );
if ( $remote_posts->have_posts() )
{
while( $remote_posts->have_posts() )
{
the_post();
the_title();
the_content();
}
}
wp_reset_query();
unset( $remote_posts );