¿Alguien puede comentar por qué esto no funciona?
Creé un tipo de publicación personalizada llamada «centro de conocimiento». Luego también creé una página llamada «centro de conocimiento» para que actuara como página de inicio para mis listados de CPT, que muestro usando código. En una de las páginas de CPT, «políticas de salario mínimo», quiero poder acceder a una variable en la URL, por ejemplo, ?some_var=xyz. Pero lo quiero amigable como /knowledge-hub/minimum-wage-policies/xyz.
Así que he creado URL de reescritura. El nombre de la página «políticas de salario mínimo» variará para muchas de las páginas de CPT, por lo que no puedo codificarlo. Quiero acceder a él usando una parte de URL.
Pero no puedo hacer que add_rewrite_rule() coincida con las coincidencias[1] al nombre de la página. Si codifico el nombre de esta página en add_rewrite_rule, ¡funciona! Pero tan pronto como lo reemplace con fósforos[1] no funciona, es un 404 o una redirección a políticas de salario mínimo sin variable al final.
URL sería:
http://mi-dominio.com/knowledge-hub/minimum-wage-policies/some_var
Hacer referencia al nombre de la página secundaria funciona:
add_rewrite_rule(
'knowledge-hub/([^/]*)?/([^/]*)/?$',
'index.php?post_type=knowledge-hub&pagename=minimum-wage-policies&my_var=$matches[2]',
'top'
);
partidos[2] está funcionando en este caso, ya que puedo ver el valor pasado en la URL en mi código.
Pero usando fósforos[1] no funciona y devuelve un 404:
add_rewrite_rule(
'knowledge-hub/([^/]*)?/([^/]*)/?$',
'index.php?post_type=knowledge-hub&pagename=$matches[1]&my_var=$matches[2]',
'top'
);
Visitando la URL de WP http://mi-dominio.com/index.php?post_type=knowledge-hub&pagename=minimum-wage-policies&my_var=xyz funciona, por lo que la estructura está bien.
He probado varias expresiones regulares utilizadas por varios otros en Internet, así que no solo ([^/])?. Así que no estoy seguro de si tiene que ver con la expresión regular y simplemente no he encontrado la correcta. Quiero combinar cualquier cosa. Mismo problema con (.)
También tengo esto:
function add_my_vars($vars)
{
$vars[] = 'my_var';
return $vars;
}
add_filter('query_vars', 'add_my_vars');
Actualizar:
Al usar $request->matched_query, pude ver que se llamaba a las URL. Cuando uso pagename=minimum-wage-policies, la URL es la esperada:
post_type=knowledge-hub&pagename=minimum-wage-policies&my_var=xyz
Cuando uso fósforos[1] está completamente cambiado, lo cual es bastante extraño:
knowledge-hub=minimum-wage-policies%2Fxyz&page=
.