【问题标题】:WordPress: Run an action after page sentWordPress:发送页面后运行操作
【发布时间】:2013-04-13 18:47:46
【问题描述】:

我想注册对 Wordpress 博客中某个帖子的所有访问。收集到的数据被发送到外部服务器,我在其中收集此博客和其他来源的信息。

到目前为止,我解决这个问题的方法是使用钩子wp_footer,向远程服务器添加一个异步 JSONP 调用。但是这种方式给生成的 HTML 增加了一点开销,并且取决于用户是否启用了 javascript。

现在,我正在尝试做同样的事情,但通过 php 代码进行外部调用,使用 curl 或任何类似的库。这里的问题是增加了页面生成时间的延迟,这可能会影响用户体验。发送内容并关闭 HTTP 连接后,有什么好的方法吗? Wordpress 钩子shutdown 有效吗?

【问题讨论】:

  • shutdown 确实是最后一个触发的 wp 钩子,即:就在 PHP 关闭执行之前。
  • like @diggy commented ,shutdown 是最后一个动作,但你也可以反过来做,意思是在 wordpress 中注册视图,然后从远程服务器查询它。如果远程服务器是第三方,您可以像您说的那样通过 cron 发送它,而不管实际的页面请求如何,同时查询用户访问时收集的数据。

标签: wordpress plugins hook


【解决方案1】:

这对我有用。请注意,如果您不想依赖 WordPress 配置,PHP 具有本机关闭功能。从 send-server.com 你可以做这样的事情:

function do_php_shutdown_function(){
    //do your request here
    $param1 = urlencode($param1);
    $param2 = urlencode($param2);
    $request = "http://external-server.com/script.php?param1={$param1}&param2={$param2}";
    get_headers($request);
}
register_shutdown_function( 'do_php_shutdown_function');

在 external-server.com 上的 script.php 中,您会看到类似:

header("Access-Control-Allow-Origin: http://sending-server.com");
header("HTTP/1.0 204 No Content");
$param1 = urldecode($_GET['param1']);
$param2 = urldecode($_GET['param2']);
//do stuff

标头("HTTP/1.0 204 无内容");应该立即关闭连接,但脚本将继续执行。欲了解更多信息,请参阅:Send HTTP request from PHP without waiting for response?

【讨论】:

    猜你喜欢
    • 2020-09-12
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 2019-02-01
    • 2014-11-08
    相关资源
    最近更新 更多