¿Cuál es el flujo apropiado para los datos personalizados de la URL en WP_Query?

14

Tengo un proceso de etapas múltiples que integra facetas complejas en consultas WP. El problema es que cuanto más profundo me vuelvo más borroso me vuelvo sobre cómo se supone que funciona y podría usar una guía en lugar de ser inventivo (y cavar un hoyo).

Etapas generales que tengo (pseudocódigo, pero casi real):

  1. recuperar el valor de la URL (algo simple como person=1)
  2. procesar el valor y agregar instrucciones de consulta personalizadas ( $relationship_query[] = array('relationship' => 'person_to_cat', 'object' => 1 );)
  3. recuperar instrucciones de consulta personalizadas finales y generar directivas SQL apropiadas

En este momento tengo muchas cosas así (relaciones, taxonomías, fechas) y se está volviendo frágil (una esquina del código no pone valor donde otra esquina del código espera que se encuentre y todo se deshace).

Entonces, la gran pregunta es: ¿cuál es el protocolo adecuado para pasar, recibir, almacenar y procesar datos personalizados a WP a través de URL ?

Partes más pequeñas:

  • ¿Cómo asegurarme de que no choque con los componentes internos de WP?
  • ¿Dónde y cómo almaceno los datos intermedios?
    • diferencia entre queryy query_varspropiedades? Parece que se usan casi de la misma manera en el código, pero tienden a tener diferentes valores y métodos a favor query_vars.
Rarst
fuente

Respuestas:

6

Creo que la función WP que está buscando es add_rewrite_tag . Su objetivo es agregar parámetros GET personalizados a su URL e incluirlos automáticamente query_vars.

Por ejemplo, puede agregar lo siguiente al enlace de inicio:

add_rewrite_tag('%person%','([^&]+)');

Para una URL como http://example.com?person=joe , el global $wp_querytendrá

$wp_query->query_vars['person'] = 'joe'

También puede agregar una regla de reescritura para que la URL sea más bonita, por ejemplo http://example.com/person/joe

add_rewrite_rule('^person/([^/]*)/?','index.php?person=$matches[1]','top');

Consulte la API de reescritura para obtener más información y ejemplos.

Fabien Quatravaux
fuente
2
He encontrado algo de tiempo (por fin) a leer a través de todo el código correspondiente en WPy WP_Queryy si bien hay un montón de cosas que suceden allí, creo que add_rewrite_tag()parece forma más sucinta para hacer WP conscientes de la costumbre var query y jugar bien con ella.
Rarst
1
  1. Consulte wp-includes / class-wp.php para consultar cualquier query_vars reservado
  2. No estoy seguro de lo que quieres decir con datos intermedios. ¿Puedes explicarme mas?
  3. WP carga la página en función de una cadena de consulta en la URL que se traduce como consulta, luego WP_Query las procesa para determinar qué query_var se está utilizando.

Ejemplo: al cargar una página con /? Pagename = about, WP procesará la cadena de consulta y encontrará que query_var que se usa es page_id.

Otro ejemplo: /? Cat = 1, /? Category_name = uncategorized y / category / uncategorized tienen la misma query_var 'cat'

AriePutranto
fuente
0

Habría asumido que se haría a través de $_GETy / o $_POST, luego manipular en consecuencia.

Alternativamente, almacene la gran cantidad de datos en la base de datos y luego analice una identificación en la url de esta manera

$data_id = $_GET['id'];

$data = $wpbd->get_results("SELECT * FROM wp_epic_table WHERE id=".$id);

La consulta obviamente no será tan simple, puede involucrar muchas uniones y tablas de unión. Eso es lo que hago en una de mis páginas, analizar una identificación única y luego construir los datos a través de MySQL.

Joshua
fuente