# Szintaxis és operátorok

> A feltételek felépítése, az összehasonlító operátorok, több feltétel kombinálása és a különleges értékek.

## Alapszintaxis

Egy meta box vagy mező láthatóságát a `visible` (megjelenik) és a `hidden` (rejtett) beállítással adhatod meg:

```php
'visible' => [ 'mező', 'operátor', 'érték' ],
'hidden'  => [ 'mező', 'operátor', 'érték' ],
```

| Elem | Jelentés |
|---|---|
| `mező` | A Meta Box mező azonosítója, vagy egy HTML-elem azonosítója, amellyel összehasonlítasz. |
| `operátor` | Az összehasonlítás módja: `=`, `>=`, `<=`, `>`, `<`, `!=`, `in`, `contains`, `between`, `starts with`, `ends with`, `match`. Mindegyik megfordítható a `not` előtaggal. Elhagyható, alapértéke `=`. |
| `érték` | Az az érték, amellyel összehasonlítasz. |

Ha az operátor `=`, kihagyhatod:

```php
'visible' => [ 'mező', 'érték' ],
'hidden'  => [ 'mező', 'érték' ],
```

## Összehasonlító operátorok

Az egyszerű operátorok (`=`, `!=`, `>`, `<`, `>=`, `<=`) egyértelműek. A többi operátor működése:

| Operátor | Mit vizsgál |
|---|---|
| `contains` | A mező értéke tartalmazza-e a megadott szöveget vagy értéket. |
| `in` | A mező értéke szerepel-e a megadott értéktömbben. |
| `between` | A mező értéke a két megadott érték közé esik-e. |
| `starts with` | A mező értéke a megadott szöveggel kezdődik-e. |
| `ends with` | A mező értéke a megadott szöveggel végződik-e. |
| `match` | A mező értéke illeszkedik-e a megadott reguláris kifejezésre. |

### contains

Szövegmezőnél azt nézi, hogy a mező értéke tartalmazza-e a megadott szövegrészt:

```php
'visible' => [ 'brand', 'contains', 'pp' ]
```

Több értékű mezőnél (jelölőnégyzet-lista, többszörös kiválasztás) azt vizsgálja, hogy a mező értéke (ami ilyenkor tömb) tartalmazza-e az adott értéket:

```php
'visible' => [ 'brand', 'contains', 'Apple' ]
```

A `taxonomy_advanced` mezőnél az értéknek a kifejezés (term) azonosítóját add meg. Például így ellenőrizheted, hogy van-e kiválasztott érték:

```php
'visible' => [ 'product_type', 'contains', 4 ]
```

### in

Azt ellenőrzi, hogy a mező értéke szerepel-e a megadott értékek között:

```php
'visible' => [ 'brand', 'in', [ 'Apple', 'Samsung' ] ]
```

Több értékű mezőnél (például `checkbox_list`) akkor teljesül, ha a kiválasztott értékek bármelyike szerepel a megadott tömbben. A fenti példa ilyenkor akkor jelenik meg, ha az „Apple” vagy a „Samsung” közül legalább az egyik ki van jelölve.

`taxonomy_advanced` mezőnél kifejezés-azonosítókat adj meg:

```php
'visible' => [ 'product_type', 'in', [ 2, 4 ] ]
```

### between

Azt ellenőrzi, hogy a mező értéke a megadott legkisebb és legnagyobb érték közé esik-e. Számokon kívül dátum- és időmezőkkel is működik.

Például egy `released_date` dátummező értéke 2015. június 1. és 2015. december 1. között:

```php
'visible' => [ 'released_date', 'between', [ '2015-06-01', '2015-12-01' ] ]
```

### starts with és ends with

```php
'visible' => [ 'brand', 'starts with', 'App' ]
'visible' => [ 'brand', 'ends with', 'le' ]
```

### match

A mező értékét reguláris kifejezéssel veti össze:

```php
'visible' => [ 'brand', 'match', '[a-z]$' ]
```

### not

A `not` az operátorok jelentését megfordítja. Így lesz belőlük: `not contains`, `not in`, `not match`, `not starts with`, `not ends with`, `not between`.

## Több feltétel

Egy meta boxra vagy mezőre több feltételt is megadhatsz. Alapértelmezés szerint a feltételek **mindegyikének** teljesülnie kell:

```php
'visible' => [
    [ 'brand', 'Apple' ],
    [ 'released_year', 'between', [ 2010, 2015 ] ],
],
```

Ha elég, hogy **az egyik** teljesüljön, tedd a feltételeket a `when` kulcs alá, és add meg a `relation` kulcsot `or` értékkel:

```php
'visible' => [
    'when' => [
        [ 'brand', 'Apple' ],
        [ 'released_year', 'between', [ 2010, 2015 ] ],
    ],
    'relation' => 'or',
],
```

A Builderben ugyanezt a **Conditional logic** szakasz **all** és **any** választója adja.

## Különleges értékek

### Jelölőnégyzet

Jelölőnégyzetnél a ki nem jelölt állapotot `0` vagy `false`, a bejelöltet `1` vagy `true` jelenti:

```php
'visible' => [ 'checkbox_field', true ]
```

### Médiamezők

A WordPress médiaablakát használó mezőknél (`file_advanced`, `image_advanced`) a bővítmény nem az értéket, hanem a feltöltött fájlok **számát** vizsgálja. Az alábbi példa akkor jelenít meg egy mezőt, ha van feltöltött fájl, és akkor rejt el egy másikat, ha nincs feltöltött kép:

```php
'visible' => [ 'file_advanced', '>', 0 ],
'hidden'  => [ 'image_advanced', 0 ],
```
