Jack hormiga
Estoy tratando de pasar un parámetro a una página de wordpress. No quiero pasarlo como una cadena de consulta. Me gustaría pasar como una URL basada en barras.
Ejemplo:
http://localhost/mysite/pagename?user=myname
dentro
http://localhost/mysite/pagename/myname
¿Cómo puedo lograr esto usando mi functions.php
archivo en el tema personalizado de wordpress?
jave.web
Ir a través rewrite_rules_array
parece innecesario: es más para una regla de reescritura matar/eliminar que para agregar reglas …
USANDO functions.php
Uso de las funciones del tema de WordPress (functions.php
), hay 2 pasos para pasar la URL basada en barras como GET
parámetros a una página, después de cualquier cambio de regla de reescritura:
Vaciar las reglas de reescritura == volver a guardar la configuración del enlace permanente en el administrador.
Paso 1 – añadir_reescritura_regla(…)
Esto puede ser un poco confuso, al tratar de hacer que funcione, porque la documentación para add_rewrite_rule(...)
no está del todo claro dónde orientar la reescritura ni cómo orientar una página por slug… y solo hay un importante tenga en cuenta que debe vaciar las reglas de reescritura cada vez que cambia algo así …
Esto funciona para mí (WP 4.3.3)
add_action('init', function(){
add_rewrite_rule(
'^yourPageSlug/([^/]+)([/]?)(.*)',
//!IMPORTANT! THIS MUST BE IN SINGLE QUOTES!:
'index.php?pagename=yourPageSlug&user=$matches[1]',
'top'
);
});
Argumentos/Parámetros:
- Expresión regular (“regexp”) para que coincida con la estructura de URL particular
- Reescriba la plantilla en la que debe apuntar
index.php
(si no es un enlace externo), porque toda la reescritura de URL en WordPress viene a través de él- usar
pagename
GET
parámetro establecido en tu babosa de página - usar marcador de posición
$matches[indexStartingFrom1]
para la coincidencia de expresiones regulares, que realmente
es ¡solo un marcador de posición! ==> ¡usa comillas simples para envolver esta cadena!
- usar
-
‘parte superior o inferior’. ‘arriba’ tendrá prioridad sobre las reglas existentes de WordPress, donde ‘abajo’ verificará que todas las demás reglas coincidan primero. Predeterminado: “abajo”
Paso 2 – agregar query_vars
El paso anterior es solo una orientación, no pasa las variables en sí …
Dado que WordPress borraría el $_GET
parámetros “tal como están” y simplemente tirarlos (porque no encontraría nada adecuado para él), tenemos que decir el WordPress que queramos usar agregando nuestro disfraz query_vars
.
Todavía no podremos recuperarlos a través de $_GET
superglobal, sin embargo,
seremos capaces de conseguir que utilicen get_query_var(...)
Le decimos a WordPress que queremos usar esos GET
parámetros agregando un query_vars
filtrar
add_filter('query_vars', function( $vars ){
$vars[] = 'pagename';
$vars[] = 'user';
return $vars;
});
Último paso:
REGLAS DE REESCRIBIR FLUSH == ¡VOLVER A GUARDAR LA CONFIGURACIÓN DE ENLACE PERMA!
Uso
Entonces para obtener el valor de GET
param “usuario” uso:
get_query_var( 'user' )
USANDO .htaccess
Si puedes, también puedes usar .htaccess
regla (considerando, /mysite/
es tu base de reescritura)
RewriteRule ^pagename/([^/]+)$ pagename?user=$1
-
Mil gracias por esto; He estado tratando de averiguar nuestro por un tiempo
– Sumeet Gohil
28 de febrero de 2019 a las 9:30
Aquí hay un tutorial completo que se acerca: http://www.rlmseo.com/blog/passing-get-query-string-parameters-in-wordpress-url/
En resumen, define algunas reglas de reescritura nuevas y luego las conecta a WordPress a través de add_filter('rewrite_rules_array', 'my_rewrite_rules');
Sin embargo, siguiendo el ejemplo de ese enlace, su URL resultante sería http://localhost/mysite/pagename/user/myname
– tenga en cuenta que /usuario/ (el nombre de su variable de consulta) todavía está incluido.
-
Hola, gracias por tu respuesta… Apliqué el método en la url. Pude ver las reglas de reescritura que se agregan a wordpress imprimiendo get_option(‘rewrite_rules’); pero cuando escribo la url host local/misitio/nombre de página/usuario/minombre Recibo el error 404 página no encontrada. Por favor ayuda.
– Jack Hormiga
17 de marzo de 2015 a las 9:21
-
ACTUALIZACIÓN: parece que el código tiene algún efecto en mi página. Sin embargo, la regla de reescritura no redirige correctamente. Esto es lo que tengo
add_rewrite_rule('(.*(mypage/user/(.*)?))' , 'index.php?pagename=mypage&user=$matches[1]','top');
Pero me redirige a [example.com/mypage].– Jack Hormiga
17 de marzo de 2015 a las 11:25
-
Lo mismo conmigo @Jack Ant
– Umair Hamid
22 mayo 2015 a las 18:39