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

13

Tengo un proceso de varias etapas que integra facetas complejas en las consultas de WP. El problema es que cuanto más profundo me vuelvo, más confuso me vuelvo sobre cómo se supone que se supone para trabajar y podría usar una guía en lugar de ser inventivo (y cavar un agujero).

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

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

Ya tengo mucho de lo que está sucediendo (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 encuentre y todo se deshace).

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

Partes más pequeñas:

  • ¿Cómo asegurarme de no chocar con los elementos internos de WP?
  • ¿Dónde y cómo almaceno los datos intermedios?
    • diferencia entre las propiedades query y query_vars ? Parece que se usan casi igual en el código, pero tienden a tener diferentes valores y métodos a favor de query_vars one.
pregunta Rarst 29.05.2012 - 18:14

3 respuestas

5

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

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

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

Para una url como enlace , el $wp_query global tendrá

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

También puede agregar una regla de reescritura para que la URL sea más bonita, por ejemplo, enlace

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

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

    
respondido por el Fabien Quatravaux 12.06.2012 - 10:44
1
  1. Echa un vistazo a wp-includes / class-wp.php para consultar cualquier consulta_vars reservado
  2. No estoy seguro de qué quiere decir con datos intermedios. ¿Puedes explicar más?
  3. WP carga la página basándose en una cadena de consulta en la URL que se traduce como consulta, que luego son procesadas por WP_Query para determinar qué consulta_var se está utilizando.

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

Otro ejemplo: /? cat = 1, /? category_name = uncategorized y / category / uncategorized tienen el mismo query_var 'cat'

    
respondido por el AriePutranto 15.06.2012 - 05:30
0

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

Alternativamente, almacene la gran cantidad de datos en la base de datos y, a continuación, analice una identificación en la url como tal

$data_id = $_GET['id'];

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

La consulta, obviamente, no será tan simple, puede implicar muchas combinaciones y tablas de combinación. Eso es lo que hago en una de mis páginas, analizo un ID único y luego construyo los datos a través de MySQL.

    
respondido por el Joshua 01.06.2012 - 06:30

Lea otras preguntas en las etiquetas