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

14

Tenho um processo de vários estágios que integra facetas complexas às consultas do WP. O problema é: quanto mais profundo eu fico, mais confuso fico em como ele deve funcionar e eu poderia usar uma diretriz em vez de ser inventiva (e me cavar um buraco).

Estágios gerais que eu tenho (pseudo-código, mas quase real):

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

Até agora, eu tenho muita coisa acontecendo (relacionamentos, taxonomias, datas) e está se tornando frágil (um canto do código não valoriza o valor que outro canto do código espera encontrar e tudo se desfaz).

A questão é tão grande - qual é o protocolo adequado para transmitir, receber, armazenar e processar dados personalizados para o WP via URL ?

Peças menores:

  • como garantir que não colidir com os internos do WP?
  • onde e como armazeno dados intermediários?
    • diferença entre querye query_varspropriedades? Eles parecem ser usados ​​quase da mesma forma no código, mas tendem a conter valores e métodos diferentes, favorecendo query_varsum.
Rarst
fonte

Respostas:

6

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

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

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

Para um URL como http://example.com?person=joe , o global $wp_queryterá

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

Você também pode adicionar uma regra de reescrita para tornar o URL mais bonito, por exemplo http://example.com/person/joe

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

Consulte a API Rewrite para obter mais informações e exemplos.

Fabien Quatravaux
fonte
2
Eu encontrei algum tempo (no passado) para ler todo o código relevante WPe WP_Querye enquanto há um monte de coisas acontecendo lá, eu acho que add_rewrite_tag()parece forma mais sucinta para fazer WP ciente de costume consulta var e jogar bem com ele.
Rarst
1
  1. Confira wp-includes / class-wp.php para verificar qualquer query_vars reservado
  2. Não sei ao certo o que você quer dizer com dados intermediários. Você pode explicar mais?
  3. O WP carrega a página com base em uma query_string no URL que é traduzido como query; eles são processados ​​pelo WP_Query para determinar qual query_var está sendo usado.

Exemplo: carregando uma página com /? Pagename = about, o WP processará a sequência de consultas e descobrirá que o query_var que está sendo usado é page_id.

Outro exemplo: /? Cat = 1, /? Category_name = uncategorized e / category / uncategorized têm a mesma query_var 'cat'

AriePutranto
fonte
0

Eu teria assumido que isso era feito via $_GETe / ou $_POST, em seguida, manipulado de acordo.

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

$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 tabelas de junções. É o que faço em uma das minhas páginas, analiso uma identificação única e construo os dados via MySQL.

Joshua
fonte