我正在写一个插件,它可以把HTML输出写到文件中,并从那个文件中加载站点。它工作得很完美。但是我不能缓存wp_footer钩子之后的代码。我尝试了wp_footer钩子之后的“shutdown”钩子,但是它返回null。我不知道为什么它返回null。但是我需要一个在wp_footer钩子之后运行的钩子,我可以缓存从0到100的所有代码。
<?php
$priority = 10;
add_action('template_redirect', function(){
if(!is_admin() && !is_user_logged_in()){
$cache_time = get_option('html_cache_time');
if(empty($cache_time)){
$cache_time = 60;
}
$current_url = get_site_url() . $_SERVER['REQUEST_URI'];
if(filter_var($current_url, FILTER_SANITIZE_URL)){
$parsed_url = parse_url($current_url);
$url_path = isset($parsed_url['path']) ? $parsed_url['path'] : false;
if(!empty($url_path)){
$cached_url = NGY_CACHE_DIR . 'app/cached/' . md5($url_path) . '.cache';
define('NOGAY_CACHED_URL', $cached_url);
$end_time = 60 * $cache_time;
if(file_exists($cached_url)){
if(time() - $end_time < filemtime($cached_url)){
readfile($cached_url);
exit;
}else{
unlink($cached_url);
}
}
}
}
ob_start();
}
}, $priority);
add_action('wp_footer', function(){
if(!is_admin() && !is_user_logged_in()){
$html = ob_get_clean();
if(!file_exists(NOGAY_CACHED_URL)){
echo $html;
}
$open_cached_file = fopen(NOGAY_CACHED_URL, 'w+');
fwrite($open_cached_file, $html);
fclose($open_cached_file);
ob_end_flush();
}
}, PHP_INT_MAX);
我尝试了另一个WordPress挂钩。(关机)
1条答案
按热度按时间06odsfpq1#
在某些情况下,可能不会调用
shutdown
钩子,例如由于致命错误而过早终止请求时。使用
send_headers
钩子,它在WordPress处理完请求并准备好将响应头发送回用户之后,但在发送响应主体之前被调用。