WordPress: pase la cadena de consulta como una URL basada en barras

4 minutos de lectura

avatar de usuario
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?

avatar de usuario
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:

  1. Expresión regular (“regexp”) para que coincida con la estructura de URL particular
  2. 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!
  3. ‘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

¿Ha sido útil esta solución?