Quel est le flux approprié pour les données personnalisées à partir d'une URL dans WP_Query?

13

J'ai un processus en plusieurs étapes qui intègre des facettes complexes dans les requêtes WP. Le problème est le suivant: plus je deviens sombre, plus je deviens flou sur la façon dont il est supposé de fonctionner et je pourrais utiliser un guide plutôt que d’être inventif (et de me creuser un trou).

Les étapes générales que j'ai (pseudo-code, mais proche du réel):

  1. récupère la valeur de l'URL (quelque chose de simple comme person=1 )
  2. valeur de processus et ajout d'instructions de requête personnalisées ( $relationship_query[] = array('relationship' => 'person_to_cat', 'object' => 1 ); )
  3. récupérer les instructions de requête personnalisées finales et générer les directives SQL appropriées

À présent, il y a beaucoup de choses de ce type (relations, taxonomies, dates) et cela devient fragile (un coin de code ne met pas de valeur là où l'autre s'attend à ce qu'il le trouve et tout se défait).

La grande question est donc: quel est le protocole approprié pour transmettre, recevoir, stocker et traiter des données personnalisées vers WP via une URL ?

Petites pièces:

  • comment être sûr de ne pas entrer en collision avec les éléments internes de WP?
  • où et comment je stocke les données intermédiaires?
    • différence entre query et query_vars propriétés? Ils semblent être utilisés presque identiques dans le code, mais ils ont tendance à conserver des valeurs différentes et les méthodes favorisent query_vars un.
posée Rarst 29.05.2012 - 18:14

3 réponses

5

Je pense que la fonction WP que vous recherchez est add_rewrite_tag . Il vise à ajouter des paramètres GET personnalisés à votre URL et à les inclure automatiquement dans query_vars .

Par exemple, vous pouvez ajouter les éléments suivants au crochet d’initialisation:

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

Pour une URL telle que enlace , le $wp_query global aura

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

Vous pouvez également ajouter une règle de réécriture pour rendre l'URL plus jolie, par exemple enlace

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

Voir l'API Rewrite pour plus d'informations et des exemples.

    
réponse donnée Fabien Quatravaux 12.06.2012 - 10:44
1
  1. Consultez le fichier wp-includes / class-wp.php pour vérifier les éventuels query_vars réservés
  2. Je ne suis pas sûr de comprendre ce que vous entendez par données intermédiaires. Pouvez-vous expliquer plus?
  3. WP charge la page sur la base d'une chaîne query_string sur une URL traduite en requête, elles sont ensuite traitées par WP_Query pour déterminer la variable query_var utilisée.

Exemple: en chargeant une page avec /? pagename = about, WP traitera la chaîne de requête et trouvera la variable query_var utilisée comme id_page.

Autre exemple: /? cat = 1, /? category_name = uncategorized et / category / uncategorized ont la même requête_var 'cat'

    
réponse donnée AriePutranto 15.06.2012 - 05:30
0

J'aurais supposé que cela se ferait via $_GET et / ou $_POST , puis manipuleriez en conséquence.

Vous pouvez également stocker la masse de données dans la base de données, puis analyser un identifiant dans l'URL de la manière suivante

$data_id = $_GET['id'];

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

La requête ne sera évidemment pas aussi simple, elle pourrait impliquer de nombreuses jointures et tables de jointure. C’est ce que je fais dans l’une de mes pages: analyser un identifiant unique, puis créer les données via MySQL.

    
réponse donnée Joshua 01.06.2012 - 06:30

Lire d'autres questions sur les étiquettes