Wordpress 简码条件加载
Wordpress shortcode conditional loading
我正在使用一个包含简码的 WordPress 插件。
由于外部 API 调用,这个简码很慢(执行 4 秒),我在这里需要它们,因为它们会因用户 ID 而异,正在观看页面。
实际上,我正处于插件的 development/testing 阶段。我正在尝试实现一个回退行为,它将跳过长 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
谢谢,任何线索都会对我有用。
更新
根据评论提供的线索,Ajax 是必经之路。使用 wordpress register_script 和 localize_script 我成功了。
由于我调用了 Api,数据大部分时间都会发生变化,但我发现我的 js 文件正在缓存该行为,并且如果不进行硬刷新,则不会更新这些值。
如何防止浏览器或 Wordpress 对此进行缓存?
谢谢
如果时间是您最重要的因素,我会创建一个时间限制循环:
$endafter=time()+4;
$completed=false;
while(time()!=$endafter){
echo ".";
//Do something
$completed=true; //Only gets reached if code before it completes successfully
break; //will break off the while loop so your API call only runs once
}
if($completed){
//use the API call data
}else{
//use some other data
}
至于避免不必要的 API 调用,您可以考虑将它们缓存起来,并且仅在需要新数据时才执行 API 调用,比如在一段时间后,或者值发生变化时.我不确定用 WordPress 数据库对象实现这个的最佳方法,但我已经通过使用直接 PHP 的自定义来比较时间戳,如果它已过期,请从 API 和更新它用当前时间戳更新旧时间戳。
如果可行,请告诉我!
使用 Ajax 是解决我的问题的最佳方法,例如 post:
此外,为了防止触发 ajax 处理程序的 javascript 被缓存,必须通过 wp_register_script()
https://developer.wordpress.org/reference/functions/wp_register_script/ 添加一个随机版本号。
,例如使用 time().
<?php
wp_register_script(
'myscript',
MAIN_PLUGIN_DIR .'/scripts.js',
false,
time(), //random version number
true);
wp_enqueue_script('myscript');
?>
我正在使用一个包含简码的 WordPress 插件。 由于外部 API 调用,这个简码很慢(执行 4 秒),我在这里需要它们,因为它们会因用户 ID 而异,正在观看页面。
实际上,我正处于插件的 development/testing 阶段。我正在尝试实现一个回退行为,它将跳过长 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 谢谢,任何线索都会对我有用。
更新
根据评论提供的线索,Ajax 是必经之路。使用 wordpress register_script 和 localize_script 我成功了。
由于我调用了 Api,数据大部分时间都会发生变化,但我发现我的 js 文件正在缓存该行为,并且如果不进行硬刷新,则不会更新这些值。
如何防止浏览器或 Wordpress 对此进行缓存?
谢谢
如果时间是您最重要的因素,我会创建一个时间限制循环:
$endafter=time()+4;
$completed=false;
while(time()!=$endafter){
echo ".";
//Do something
$completed=true; //Only gets reached if code before it completes successfully
break; //will break off the while loop so your API call only runs once
}
if($completed){
//use the API call data
}else{
//use some other data
}
至于避免不必要的 API 调用,您可以考虑将它们缓存起来,并且仅在需要新数据时才执行 API 调用,比如在一段时间后,或者值发生变化时.我不确定用 WordPress 数据库对象实现这个的最佳方法,但我已经通过使用直接 PHP 的自定义来比较时间戳,如果它已过期,请从 API 和更新它用当前时间戳更新旧时间戳。
如果可行,请告诉我!
使用 Ajax 是解决我的问题的最佳方法,例如 post:
此外,为了防止触发 ajax 处理程序的 javascript 被缓存,必须通过 wp_register_script()
https://developer.wordpress.org/reference/functions/wp_register_script/ 添加一个随机版本号。
,例如使用 time().
<?php
wp_register_script(
'myscript',
MAIN_PLUGIN_DIR .'/scripts.js',
false,
time(), //random version number
true);
wp_enqueue_script('myscript');
?>