Qual é o fluxo apropriado para dados personalizados da URL em WP_Query?

13

Eu tenho um processo de múltiplos estágios que integra facetamento complexo em consultas do WP. O problema é - quanto mais fundo fico, mais confuso me torno em como é suposto funcionar e eu poderia usar uma diretriz em vez de ser inventivo (e cavar um buraco)

Estágios gerais que tenho (pseudo-código, mas próximo do real):

  1. recupera o valor do URL (algo simples como person=1 )
  2. valor de processo e anexar instruções de consulta personalizadas ( $relationship_query[] = array('relationship' => 'person_to_cat', 'object' => 1 ); )
  3. recuperar instruções finais de consulta personalizada e gerar diretivas SQL apropriadas

Por enquanto eu tenho muito disso acontecendo (relacionamentos, taxonomias, datas) e está se tornando frágil (um canto do código não coloca valor onde outro canto do código espera encontrar e tudo desmorona).

A pergunta mais importante é: qual é o protocolo adequado para passar, receber, armazenar e processar dados personalizados para o WP via URL ?

Partes menores:

  • como garantir que eu não colida com os internos do WP?
  • onde e como eu armazeno dados intermediários?
    • diferença entre as propriedades query e query_vars ? Eles parecem ser usados quase iguais em código, mas tendem a manter valores e métodos diferentes em favor de query_vars one.
por Rarst 29.05.2012 / 18:14

3 respostas

5

Acho que a função do WP que você está procurando é add_rewrite_tag . O objetivo é adicionar parâmetros GET personalizados ao seu URL e incluí-los automaticamente em query_vars .

Por exemplo, você pode adicionar o seguinte ao gancho init:

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

Para uma URL como enlace , o global $wp_query terá

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

Você também pode adicionar uma regra de reconfiguração para tornar a URL mais bonita, por exemplo enlace

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

Veja a Regravar API para mais informações e exemplos.

    
por Fabien Quatravaux 12.06.2012 / 10:44
1
  1. Confira wp-includes / class-wp.php para verificar quaisquer query_vars reservados
  2. Não sei ao certo o que você quer dizer com dados intermediários. Você pode explicar mais?
  3. WP carrega a página com base em um query_string no URL que é convertido como consulta, e eles são processados por WP_Query para determinar qual query_var está sendo usado.

Exemplo: ao carregar uma página com /? pagename = about, o WP processará a string de consulta e descobrirá que o query_var sendo usado é page_id.

Outro exemplo: /? cat = 1, /? category_name = não categorizado e / category / uncategorized tem o mesmo query_var 'cat'

    
por AriePutranto 15.06.2012 / 05:30
0

Eu teria assumido que isso seria feito através de $_GET e / ou $_POST e, em seguida, manipular de acordo.

Como alternativa, armazene o imenso conjunto de dados no banco de dados e, em seguida, analise um ID como o URL

$data_id = $_GET['id'];

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

A consulta obviamente não será tão simples, pode envolver muitas junções e juntar tabelas. Isso é o que eu faço em uma das minhas páginas, analiso um id único e então construo os dados via MySQL.

    
por Joshua 01.06.2012 / 06:30

Tags