web-dev-qa-db-fra.com

Comment interroger une plage de termes de taxonomie

REMARQUE: les liens fonctionneront si vous les copiez et les collez. (Je suis un débutant, je ne suis donc pas autorisé à ajouter de nombreux liens à la question)

J'ai quelques taxonomies sur lesquelles j'aimerais interroger une plage, par exemple

  • prix
  • âge
  • ancien

J'ai trouvé cette question qui m'a aidé

Comment transmettre des paramètres d'URL pour des requêtes de taxonomie avancées comportant plusieurs termes pour une taxonomie personnalisée

Avec les exemples ci-dessus, je pourrais interroger la taxonomie par âge à titre d'exemple pour les années 10 et 20.

  • tax.jenswedin.com/age/10,20/
  • tax.jenswedin.com/?age=10,20

Cela fonctionne bien.

Mais si je voudrais faire une requête pour un éventail d’âges, par exemple du formulaire 10-20, il me faudrait

  • tax.jenswedin.com/age/10,11,12,13,14,15,16,17,18,19,20/

Et si je voudrais faire une gamme entre 10-100, vous pouvez imaginer que cela n’aura pas l’air bon.

J'ai donc essayé de mettre les termes d'âge en termes de taxonomie secondaire afin que la structure soit comme ceci

  • 11-20
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 21-30
    • ...
    • ...

En faisant cela, je pourrais maintenant interroger comme ceci

  • tax.jenswedin.com/age/11-20/

Et ça marcherait, ça montrerait tous les âges entre 11 et 20

Mais cette façon est assez inflexible, il me faudrait juste entre 15 et 20 ans, cela ne fonctionnerait pas.

Ce que je voudrais savoir s’il est possible que la gamme soit dynamique et plus flexible. Je sais que @scribu avait un plugin (qui n'est plus pris en charge plus longtemps) qui prenait en charge les plages avec les champs min et max pour les champs personnalisés. Mais je n'ai rien vu de tel pour les taxonomies.

  • chwisgi.com/?age-min=20&age-max=30

Toute aide serait appréciée.

1
Jens Wedin

Vous pouvez utiliser la requête var et développer par programme les nombres entre votre valeur minimale et votre valeur maximale.

En supposant que http://tax.jenswedin.com/age/10,20/ soit réécrit en http://tax.jenswedin.com/?age=10,20 , puis (pseudo-code)

$parts = explode(get_query_var('age'), ',');
$min_val = $parts[0]; // Should be 10 in this example
$max_val = $parts[1]; // Should be 20 in this example
$range = range($min_val, $max_val); // http://php.net/manual/en/function.range.php
/* Blah blah blah lets jump to where you need to query the terms */
$args = array(
    'tax_query' => array(
        array(
        'taxonomy' => 'age',
        'field' => 'slug',
        'terms' => $range
    )
)
);
$query = new WP_Query( $args );

Cela fonctionne bien pour des choses comme les nombres. Mais vous pouvez créer une boucle foreach sur le tableau $ range et définir les valeurs à votre guise.

2
kingkool68