Uso del filtro query_vars

23 jul 2013, 21:01:14
Vistas: 18.1K
Votos: 6

Estoy intentando enlazar desde el administrador de WP para ver publicaciones de una manera específica. La estructura de la URL para esto es example.com/post123/?my-preview=456

/post123/ es el permalink normal de una publicación. El ?my-preview=456 permite que una sección de esa publicación recupere información basada en el valor de my-preview.

Entiendo que WP elimina los parámetros $_GET de la URL, así que intenté usar add_filter('query_vars','my_query_vars'); y

function my_query_vars($query_vars){
    $query_vars[] = 'my-preview'; // Añadir 'my-preview' a las variables de consulta
    return $query_vars;
}

En la sección real donde necesito obtener ese valor, intenté usar:

global $wp_query;
var_dump($wp_query->query_vars); // Volcar las variables de consulta para depuración

Incluso con una URL como el ejemplo anterior, el par 'my-preview' no aparece en ningún lugar del array $wp_query->query_vars.

¿No estoy siguiendo los pasos correctos para registrar un query_var adicional para su uso posterior? Si lo estoy haciendo, ¿por qué no permanece?

EDITO: También he probado: add_action('init', 'add_query_vars');
con

function add_query_vars() {
    global $wp;
    $wp->add_query_var('my-preview'); // Añadir variable de consulta personalizada
}

y wp_die(var_dump(get_query_var('my-preview'))); devuelve string(0) ""

2
Comentarios

Gracias por tu comentario. 1. No busco extender los enlaces permanentes bonitos. Solo quiero usar parámetros al estilo $_GET. 2. He probado los métodos mencionados en la respuesta aceptada sin éxito. Actualizaré mi pregunta con ese código.

Josh Levinson Josh Levinson
23 jul 2013 23:18:51
Todas las respuestas a la pregunta 1
6

El filtro de variables de consulta es innecesario para lo que estás haciendo aquí, ya que no lo estás usando en una consulta. Agregarlo a la URL como un parámetro GET no hará que aparezca en el array de variables de consulta, ya que no existe un mecanismo que convierta una variable GET en una variable de consulta. Solo has asegurado que no será eliminada si se añade a la consulta.

Mientras la variable GET sea única y no esté reservada por WordPress, no hay nada que impida establecer y luego acceder a una variable GET por los medios habituales: $_GET['mi-preview'].

23 jul 2013 23:52:43
Comentarios

Según http://codex.wordpress.org/Query_Overview#More_on_WP-.3Eparse_request.28.29, parse_request() elimina los parámetros $_GET de la URL. Cuando visito example.com/post123/?my-preview=123 (dudo que my-preview esté reservado), wp elimina los parámetros get y finalmente termino en example.com/post123/

Josh Levinson Josh Levinson
24 jul 2013 07:23:28

Además, dijiste que no hay un mecanismo para convertir los parámetros get en barras de consulta, pero eso es exactamente lo que hace el paso 4 o parse_request según esa página.

Josh Levinson Josh Levinson
24 jul 2013 07:28:59

Si query_vars no es la solución, ¿por qué wp elimina mis parámetros get y qué puedo hacer al respecto?

Josh Levinson Josh Levinson
24 jul 2013 07:30:12

parse_request elimina las variables get con el propósito de analizar la solicitud, no redirige a esa versión de la URL. Por qué no funciona en tu caso no puedo decirlo, yo hago esto todo el tiempo sin problemas. Acabo de probar en una instalación limpia y con el tema twentytwelve, y funciona como se espera.

Milo Milo
24 jul 2013 07:37:18

Hmm... Tendré que probar esto y volver con una respuesta.

Josh Levinson Josh Levinson
24 jul 2013 17:37:36

¡Tenías razón! Era este plugin: http://wordpress.org/plugins/404-redirected/ el que estaba causando que los parámetros get fueran eliminados. Extraño. Ahora recuerdo por qué nunca instalo plugins con más de 6 meses sin conocer al desarrollador...

Josh Levinson Josh Levinson
25 jul 2013 16:16:23
Mostrar los 1 comentarios restantes