You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress缓存排除:Foreach循环仅显示最后一项问题求助

WordPress缓存排除多页面失效问题修复

问题说明

尝试遍历数组实现WordPress指定页面排除缓存功能,但最终仅数组最后一项/welcome/生效,另外两个页面未被排除,原代码如下:

$pages = "/become-a-teacher/, /term-conditions/, /welcome/";

$delimiter = ' ';
$page_views = explode($delimiter, $pages);

foreach ($page_views as $page_view) {
   $uri = strtok( $_SERVER["REQUEST_URI"], '?' );
   if ( in_array( $uri, [ $page_view ] )  ) { 
      cancel();
   }
}
 
echo "$page_view <br>";

问题根源

  1. 分隔符错误:原字符串页面以, (逗号+空格)分隔,但使用空格作为explode分隔符,导致拆分后的数组元素带逗号(如"/become-a-teacher/,"),无法匹配实际请求URI
  2. 冗余循环判断:逐个遍历元素做in_array判断完全没必要,直接用目标数组一次性判断即可
  3. 变量输出位置错误:echo在循环外部,只能输出最后一次循环的$page_view值,造成视觉上只看到最后一个页面的假象

修复方案

方案一:直接定义目标数组(推荐)

这种方式最直观,避免分隔符处理的问题:

// 直接定义需要排除缓存的页面数组
$excluded_pages = ["/become-a-teacher/", "/term-conditions/", "/welcome/"];

// 获取当前请求的URI(去除查询参数)
$current_uri = strtok($_SERVER["REQUEST_URI"], '?');

// 判断当前URI是否在排除列表中,是则取消缓存
if (in_array($current_uri, $excluded_pages)) {
    cancel();
}

// 如需输出所有排除页面,遍历数组输出
foreach ($excluded_pages as $page) {
    echo "$page <br>";
}

方案二:修复字符串拆分逻辑

如果必须从字符串拆分,需处理分隔符并清理元素:

$pages_str = "/become-a-teacher/, /term-conditions/, /welcome/";

// 先按逗号拆分,再去除每个元素的首尾空格
$excluded_pages = array_map('trim', explode(',', $pages_str));

$current_uri = strtok($_SERVER["REQUEST_URI"], '?');

if (in_array($current_uri, $excluded_pages)) {
    cancel();
}

// 输出所有排除页面
foreach ($excluded_pages as $page) {
    echo "$page <br>";
}

内容的提问来源于stack exchange,提问作者Tyrese

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 05:55:16