我做了一个简短代码, 返回了首页上的新闻。我必须显示实际日期的相关新闻。如果新闻较旧, 它将显示下一个新闻。问题在于页面被缓存, 我的新闻短代码内容也被缓存, 用户看到了过时的新闻。
我的代码在footer.php中, 并用我需要的所有信息创建一个div, 然后使用一个js小脚本, 在我的主页中使用它的内容。
有没有办法只从缓存中排除此功能/简码?
【从缓存中排除短代码内容-WordPress】这是我在functions.php中的代码
global $news;
$today = date('d-m-Y');
$args = array (
'posts_per_page' =>
100, 'post_type' =>
'news'
);
$query = new WP_Query($args);
$ids = array();
$dates = array();
if($query->
have_posts()){
while ($query->
have_posts()) : $query->
the_post();
array_push($dates, get_field('end_date'));
array_push($ids, get_the_ID());
endwhile;
}
function getClosestEventID($date, array $dates, $last, $ids) {
$interval= array();
$now= strtotime(date('Y-m-d'));
foreach ($dates as $d) {
// strtotime often has problems with d/m/y so we use d-m-y
$d = str_replace("/", "-", $d);
$dateTime= strtotime($date);
$toTime= strtotime($d);
if (strtotime($d) <
$now) { continue 1;
}
if ($toTime <
$dateTime) { continue 1;
}
$interval[$d]= abs($dateTime - $toTime);
}if (!count($interval)) {
return $last;
}asort($interval);
$closest= key($interval);
$id_key = array_search(str_replace("-", "/", $closest), $dates);
return $ids[$id_key];
}$nearestEventID = getClosestEventID($today, $dates, end($ids), $ids);
echo'<
div class="last-event" style="display: none;
">
'
. '<
span class="event-title">
' . get_the_title($nearestEventID) . '<
/span>
'
. '<
span class="event-content">
' . get_the_content($nearestEventID) . '<
/span>
'
. '<
span class="event-place">
' . get_field('ort', $nearestEventID) . '<
/span>
'
. '<
span class="event-start-date">
' . get_field('start_date', $nearestEventID) . '<
/span>
'
. '<
span class="event-end-date">
' . get_field('end_date', $nearestEventID) . '<
/span>
'
. '<
span class="event-discipline">
' . get_field('discipline', $nearestEventID) . '<
/span>
'
. '<
/div>
';
?>
#1你可以使用Ajax在高速缓存的页面上加载这类动态块。 Ajax示例(请确保也使用_nopriv添加该功能, 以便未登录的用户可以看到该块)。
$( document ).ready(function() {
loadNews();
});
function loadNews() {
$.ajax({
url: ajaxurl, // or example_ajax_obj.ajaxurl if using on frontend
data: {
'action': 'load_news', }, success:function(data) {
// output the response into the newsblock
$("#newsblock").html(data);
}, error: function(errorThrown){
console.log(errorThrown);
}
});
}
你的ajax函数基本上可以包含复制/粘贴当前代码以输出新闻。当用户在页面上时, 你甚至可以使用间隔来每分钟左右更新一次块:setInterval
推荐阅读
- 预期下一个功能是转义功能(WordPress)
- 错误(翻译wordpress主题时,msgstr不是有效的PHP)
- 图文详解Java对象内存布局
- findmnt命令查找已挂载的文件系统
- Mybatis自定义拦截器与插件开发
- 华为P50pro手机丢了或被偷了怎么定位找回?教你一个找回的教程
- Seata TCC模式原理与实战
- 教你用OpenCV 和 Python实现圆物检测
- Python高级用法总结-字典排序