Nous avons toute une série d'événements dans un type de publication personnalisé events
. Ils sont associés aux champs personnalisés suivants:
start_date
end_date
Sur le front-end, nous avons une barre latérale avec des filtres où l'utilisateur peut choisir comment il souhaite rechercher les événements (par exemple, diverses taxonomies, la date de début de son voyage en ville, la date de fin, etc.). Les entrées de recherche event_begin
et event_end
sont utilisées pour interroger la base de données.
J'ai des problèmes, y compris un résultat vaguement interrogé. Les correspondances strictes apparaissent, mais la partie prenante du projet dit que la recherche est trop stricte. J'ai évoqué le concept d'abandon du champ event_end
front-end dans les filtres de recherche de l'utilisateur, mais je ne suis pas tout à fait sûr que ce soit nécessaire à ce stade.
Si je recherche des événements, je peux structurer mon meta_query
où:
Mais qu'en est-il lorsque je recherche en face-à-face comme ceci:
event_begin
15/07/2016event_end
15/07/2016... mais avez un événement dans la base de données où ses champs personnalisés indiquent qu'il dure réellement une semaine. 7/11/2016 - 16/07/2016.
Cet événement ne reviendrait pas de ma requête, car aucune des réponses ci-dessus ne correspond. Mais techniquement, si je suis en ville le 15/07/2016 (aujourd'hui), je devrais être en mesure de voir (et éventuellement d'assister) à cet événement alors que j'étais en ville pour une journée de travail.
En règle générale, nous ne stockons pas une plage d'événements sous forme de dates distinctes pour chaque jour de la série. Nous (en tant qu'êtres humains) stockons des plages de dates; donc je suis sûr qu'il y a un moyen logique d'aborder cela. Il suffit de ne rien trouver dans mes recherches ou mes recherches.
Merci pour votre aide et vos pensées!
Il est un peu difficile de penser en meta_query
code pour des cas compliqués comme celui-ci et sans accès aux données. :)
Ce que vous travaillez peut être exprimé sous la forme de deux conditions suivantes:
start_date
ENTRE event_begin
et event_end
end_date
ENTRE event_begin
et event_end
Votre premier cas avec les deux entre les deux semble hors de propos, puisque ces deux vont l'attraper de toute façon.
Le défi que vous avez avec le reste est que vous voulez la logique inverse - event_begin
ou event_end
ENTRE start_date
et end_date
. Mais vous ne pouvez pas l'exprimer de la même manière car ils sont uniques à chaque événement.
Mais vous ne vous en souciez pas vraiment lorsque ils le sont, il suffit qu'ils soient proches des dates de recherche.
Donc, deux autres conditions peuvent être exprimées comme:
start_date
<= event_begin
) AND (end_date
> = event_begin
) (dates de l'événement au début de la recherche ou autour de celle-ci)start_date
<= event_end
) AND (end_date
> = event_end
) (dates des événements à ou autour de la fin de la recherche)Encore une fois, j’ai du mal à écrire cela comme méta-requête "en théorie", mais puisque les méta-requêtes peuvent être imbriquées, vous devriez être capable de ranger tout cela dans leur logique.
Les performances de PS peuvent devenir un élément à prendre en compte et nécessiter un ensemble de requêtes simples et multiples plutôt que simples.