No directamente. La API de wordpress está usando preg_match / preg_replace pero no está exponiendo el parámetro flags. Eso es lo que necesitarías para pasar la bandera insensible (i).
Ver su implementación aquí:
enlace
Probablemente, la solución más simple es utilizar una pequeña función auxiliar para hacer esto por usted:
function anyCase($rules){
$insensitive = array();
foreach ($rules as $regex => $mapping) {
$regex = preg_replace_callback('([A-Za-z])', function($matches){
return "[" . strtoupper($matches[1]) . strtolower($matches[1]) . "]";
}, $regex);
$insensitive[$regex] = $mapping;
}
return $insensitive;
}
Dado
$rules = array('my-books/?$' => 'index.php?pagename=my-books');
var_dump(anyCase($rules));
Saldrá
array (1) {["[Mm] [Yy] - [Bb] [Oo] [Oo] [Kk] [Ss] /? $"] = > cadena (27) "index.php? pagename = mis libros"}
Para que puedas mantener tus reglas limpias / simples :-)
Si está ejecutando un PHP antiguo que no admite cierres, puede simplemente hacer esto:
function lowerOrUpper($matches){
return "[" . strtoupper($matches[0]) . strtolower($matches[0]) . "]";
}
function anyCase($rules){
$insensitive = array();
foreach ($rules as $regex => $mapping) {
$regex = preg_replace_callback('([A-Za-z])', lowerOrUpper, $regex);
$insensitive[$regex] = $mapping;
}
return $insensitive;
}
Saludos