有没有办法在页面显示后连接到WP?

时间:2020-10-27 作者:uPrompt

好的,我试图找到这个问题的解决方案,但到目前为止,运气不好。

我一直在试图找到一种使用短代码进行增量输出的方法。我有几个函数需要30秒才能完成。我不想在完全完成之前有一个空白页,而是尝试在每个函数完成时输出它。

到目前为止,我想到的唯一一个想法是使用短代码生成一个JS类似的模板:

echo \'<div id="location1"></div>\';
echo "<script>
const thiselement = document.querySelector(\'#location1\');
</script>";
然后,通过如下操作将每个函数的输出填充到模板中:

echo \'<script>element.thiselement  = "<div>\' . $value . \'</div>";</script>\';
ob_flush();
flush();
我现在需要的是一种在具有特定短代码的页面显示完成后调用或挂接这些函数的方法。

这样的挂钩、过滤器等是否存在?

谢谢

1 个回复
SO网友:uPrompt

谢谢你的否决票。不管怎样,我还是通过关机操作找到了答案。

其作用:

init操作清除所有输出缓冲区并启动一个新的输出缓冲区。Add\\u JS\\u短代码被添加到页面中,并为要显示的内容创建一个位置。API引用中的shutdown操作在PHP关闭执行之前运行。30秒后,它用$output的内容替换短代码的输出。

这样做的最终结果是在页面完全加载后,$输出“神奇地”出现。

我的目的是:用户输入URL在我的网站上进行检查。运行各种PHP脚本,检查Whois、获取标头、检查各种文件和目录、解析页面以获取详细信息。。。等等。我不希望最终用户在执行这些任务时盯着浏览器加载符号。这就解决了这个问题。

 add_action(\'init\', array($this, \'Setup_Output_Buffer\'));
 add_action(\'shutdown\', array($this, \'Shutdown_Callback\' ));
 add_shortcode(\'Add_JS\', array($this, \'Add_JS_Shortcode\'));

 public function Setup_Output_Buffer() {
    $this->Clear_Buffers();
    ob_start();
 }

 public function Clear_Buffers() {
    $buffers = ob_get_status(true);
    if (count($buffers) > 1) {
        for ($i = 0; $i < count($buffers) - 1; $i++) {
            ob_end_flush();
        }
    }
 }

public function Add_JS_Shortcode($atts) {
    $output = \'<div id="thisdivid"></div>\';
    $output .= "<script>const tobeshownlater = document.querySelector(\'#thisdivid\');</script>";
    return $output;
}

public function Shutdown_Callback() {
   if (basename(get_permalink()) == \'pagewithshortcode\') {
      sleep(30);
      $output = "This is shown 30 sec after the page loads.";
      echo \'<script>tobeshownlater.innerHTML = "<div>\' . $output . \'</div>";</script>\';
      ob_flush();
      flush();   
   }
}