Explicarea operatorilor de comparație meta_query
Am observat că există mai mulți operatori care pot fi folosiți pentru comparație în meta_query.
Cu toate acestea, nu sunt sigur ce operator ar trebui să folosesc, este oarecum confuz, cum ar fi operatorii =
și LIKE
.
Aș dori să știu exact ce înseamnă fiecare operator și în ce condiții ar trebui să îi folosesc.
= // egal cu
!= // diferit de
> // mai mare decât
>= // mai mare sau egal cu
< // mai mic decât
<= // mai mic sau egal cu
LIKE // conține șirul specificat
NOT LIKE // nu conține șirul specificat
IN // valoarea există în array
NOT IN // valoarea nu există în array
BETWEEN // între două valori
NOT BETWEEN // nu este între două valori
NOT EXISTS // metakey-ul nu există
Mulțumesc.

Primele câteva funcționează așa cum v-ați aștepta:
= egal
!= nu este egal
> mai mare decât
>= mai mare sau egal cu
< mai mic decât
<= mai mic sau egal cu
LIKE și NOT LIKE
LIKE
și NOT LIKE
sunt operatori SQL care vă permit să adăugați simboluri wild-card, astfel încât să puteți avea o interogare meta care arată astfel:
array(
'key' => 'name',
'value' => 'Pat',
'compare' => 'LIKE'
)
Aceasta va returna toate articolele în care valoarea meta "name" conține șirul "Pat". În acest caz, "Pat", "Patricia" și "Patrick" vor fi returnate. Există un tutorial non-WordPress care explică mai multe aici.
Adăugarea caracterului wildcard %
nu este necesară, deoarece este adăugat implicit, așa cum a menționat @Herb în răspunsul său de mai jos. Astfel: $meta_value = '%' . like_escape( $meta_value ) . '%';
- vezi sursa.
IN și NOT IN
IN
și NOT IN
selectează potrivirile care sunt (sau nu sunt) în array-ul dat. Deci, puteți face ceva de genul:
array(
'key' => 'color',
'value' => array('red', 'green', 'blue')
'compare' => 'IN'
)
și va obține toate articolele care au culoarea setată la roșu, verde sau albastru. Utilizarea 'NOT IN' va returna inversul, orice articole care au o valoare setată la altceva decât ceea ce este în array.
SQL-ul generat pentru aceasta ar arăta cam așa:
SELECT * FROM posts_meta WHERE value IN ("red", "green", "blue")
BETWEEN și NOT BETWEEN
BETWEEN
și NOT BETWEEN
vă permit să definiți un interval de valori care ar putea fi corecte și vă cer să furnizați două valori într-un array în meta_query:
array(
'key' => 'price',
'value' => array(20,30)
'compare' => 'BETWEEN'
)
Aceasta vă va returna toate articolele în care prețul este între 20 și 30. Această persoană explorează un exemplu cu date.
NOT EXISTS
NOT EXISTS
este exact cum sună - valoarea meta nu este setată sau este setată la o valoare nulă. Tot ce aveți nevoie pentru această interogare este cheia și operatorul de comparație:
array(
'key' => 'price',
'compare' => 'NOT EXISTS'
)
Această persoană a avut nevoie să interogheze valori meta inexistente și a avut nevoie să funcționeze bine cu altele.
Sper că acest lucru vă ajută!

Notă: Dacă folosești un array meta_query
, cheile tale nu ar trebui să fie prefixate cu meta_
. Dacă folosești $query->meta_key
, $query->meta_value
, etc., atunci acestea ar trebui să păstreze prefixul.

Nu reușesc să găsesc o explicație despre ce face opțiunea de comparare "IN". Ai vreo idee cum funcționează?

@Joe, nu știu de ce nu am adăugat nimic despre "IN" și "NOT IN". Am editat și actualizat răspunsul cu acele comparații.

Acesta este un răspuns excelent, dar acum există câteva opțiuni suplimentare -: https://codex.wordpress.org/Class_Reference/WP_Meta_Query

există informații despre asta în documentație pe undeva, Herb? Ar trebui să modificăm exemplul pentru a elimina %
?

Da, ar trebui. De fapt, tocmai am făcut asta acum - vezi sursa, atunci devine foarte clar că Herb are dreptate. @guiniveretoo
