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>";
问题根源
- 分隔符错误:原字符串页面以
,(逗号+空格)分隔,但使用空格作为explode分隔符,导致拆分后的数组元素带逗号(如"/become-a-teacher/,"),无法匹配实际请求URI - 冗余循环判断:逐个遍历元素做
in_array判断完全没必要,直接用目标数组一次性判断即可 - 变量输出位置错误:
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
相关产品推荐
相关产品推荐

