【发布时间】:2022-03-17 17:44:45
【问题描述】:
我正在使用一个包含简码的 WordPress 插件。 由于外部 API 调用,这个短代码很慢(执行 4 秒),我在这里需要它们,因为它们会因用户 ID 不同而不同,观看页面。
实际上,我正处于插件的开发/测试阶段。我正在尝试实现一种回退行为,如果达到某个时间,它将跳过长 API 调用,然后使用本地逻辑。
我想知道,是否可以停止执行或有条件地呈现短代码?使用 While 循环不是解决方案,因为它至少会循环一次。
此外,我尝试使用 set_time_limit(); PHP 内置函数,但在 WP 环境下似乎不起作用。
此外,如果可能的话,我正在尝试在没有 AJAX 的情况下实现这一目标。如果不是,我也想要一些指导方针,如果你能帮助我,当然。
如果您认为我需要其他解决方案,例如不使用短代码,请告诉我。 延迟加载也可以作为thread 中的解决方案:
我想要实现的是拥有一个异步短代码,可能带有一个加载器,看起来像现代 JS Web 应用程序。
为了监控我的短代码的执行时间,我将它插入到我的函数中:
<?php
function my_function() {
$start = microtime(true);
// function code here
$time_taken = microtime(true) - $start;
wp_die( $time_taken ); // in seconds
}
从此source 谢谢,任何线索都会对我有用。
更新
使用 cmets 提供的线索,Ajax 是要走的路。使用 wordpress register_script 和 localize_script 我使它工作。
由于我调用了 Api,数据大部分时间都会发生变化,但我发现我的 js 文件,保存该行为正在被缓存,并且在没有硬刷新的情况下不会更新值。
如何防止浏览器或 Wordpress 缓存这个?
谢谢
【问题讨论】:
-
阻止页面加载甚至四秒钟的东西是一件坏事。您应该在这里使用 AJAX。使用短代码输出一些占位符内容或“正在加载数据...”消息 - 然后让它自动触发对额外端点的 AJAX 请求,该端点发出 API 请求,将数据返回到前端,并将其插入短代码呈现的位置。 codex.wordpress.org/AJAX_in_Plugins 很好地解释了如何设置 AJAX 端点。
-
此外,如果 API 数据不是“易失性”的,因为它在每次请求时都会发生变化,则分别。不依赖于用户特定的参数 - 考虑在这里实现一些缓存,这样您就不必在每次页面加载时都发出 API 请求。 WP 已经有一种称为 Transients 的机制来使这类事情变得更容易,developer.wordpress.org/apis/handbook/transients
标签: php ajax wordpress time shortcode