# Függvények: kedvezménykódok, tagságok száma, tartalomkorlátozás

> Az rcp_add_discount(), rcp_delete_discount(), rcp_get_discount(), rcp_get_discount_by(), rcp_get_discounts(), rcp_count_memberships() és rcp_get_content_subscription_levels() függvények.

Egyedi kódhoz tartozó függvények, ezért a bevezetésükhöz érdemes fejlesztő segítségét kérni.

## rcp_add_discount()

Kedvezménykódot ír az adatbázisba. A `code` kötelező és egyedi. Az alapértelmezett `status` értéke `disabled`, ezért regisztrációhoz `active`-ra kell állítani. A százalékos kedvezmény (`unit` = `%`) egész szám lehet 1 és 100 között. A `unit` értéke `%` vagy `flat` (fix összeg). A régi `subscription_id` argumentum a `membership_level_ids` tömbre képeződik le.

Akciók: `rcp_pre_add_discount` (beszúrás előtt) és `rcp_add_discount` (beszúrás után).

A `$args` tömb elemei:

| Kulcs | Jelentés |
|---|---|
| `code` | Kötelező. Egyedi kód. |
| `name` | Elhagyható címke. |
| `description` | Elhagyható leírás. |
| `amount` | Összeg. Alapérték: `0.00`. |
| `unit` | `%` vagy `flat`. Alapérték: `%`. |
| `status` | `active` vagy `disabled`. Alapérték: `disabled`. |
| `max_uses` | Legfeljebb ennyiszer használható. Alapérték: `0` (korlátlan). |
| `use_count` | A használatok száma. Alapérték: `0`. |
| `expiration` | Elhagyható lejárati időpont. |
| `membership_level_ids` | Azoknak a szinteknek az azonosítói, amelyekre a kód érvényes. Üresen minden szintre. |
| `one_time` | Egyszeri használat jelzője. |
| `subscription_id` | Régi argumentum, egyetlen szint azonosítója. |

Visszatérési érték: az új kedvezmény azonosítója, vagy `WP_Error`, ha hiányzik a kód, duplikált, érvénytelen az összeg, vagy a beszúrás nem sikerül.

```php
$discount_id = rcp_add_discount(
	array(
		'code'                 => 'inditas20',
		'name'                 => 'Indulási 20% kedvezmény',
		'amount'               => 20,
		'unit'                 => '%',
		'status'               => 'active',
		'membership_level_ids' => array( 2, 3 ),
	)
);

if ( is_wp_error( $discount_id ) ) {
	// Hibakezelés.
}
```

Lekérdezéséhez az `rcp_get_discount_by()` függvény és az `RCP_Discount` osztály való.

## rcp_delete_discount()

Véglegesen töröl egy kedvezménykódot az adatbázisból. A törlés előtt lefut az `rcp_delete_discount` akció.

- `$discount_id` (egész): a kedvezmény azonosítója.

Visszatérési érték (logikai): a törlési lekérdezés eredménye.

```php
if ( rcp_delete_discount( $discount_id ) ) {
	// A kedvezmény törölve.
}
```

```php
$discount = rcp_get_discount( $discount_id );
if ( $discount ) {
	rcp_delete_discount( $discount->get_id() );
}
```

## rcp_count_memberships()

Megszámolja a lekérdezésre illeszkedő tagságokat. Ugyanazokat az argumentumokat fogadja, mint az `rcp_get_memberships()`, a `count` paramétert belül `true`-ra állítja, ezért te ne add meg. Alapesetben csak az engedélyezett tagságokat számolja (`disabled` => `0`).

Gyakori szűrők: `status`, `object_id` (a tagsági szint azonosítója), `customer_id`, `gateway`, `expiration_date_query`, `disabled`, `number`, `offset`.

Visszatérési érték: az illeszkedő tagságok száma (egész).

Aktív tagságok:

```php
$total = rcp_count_memberships( array(
	'status' => 'active',
) );
```

A 3-as szint lejárt tagságai:

```php
$total = rcp_count_memberships( array(
	'object_id' => 3,
	'status'    => 'expired',
) );
```

2024 decemberében lejáró tagságok:

```php
$total = rcp_count_memberships( array(
	'expiration_date_query' => array(
		'after'  => date( '2024-12-01 00:00:00', current_time( 'timestamp' ) ),
		'before' => date( '2024-12-31 23:59:59', current_time( 'timestamp' ) ),
	),
) );
```

## rcp_get_content_subscription_levels()

Visszaadja, mely tagsági szintek kellenek egy bejegyzés eléréséhez, a bejegyzés `rcp_subscription_level` meta értéke alapján (ezt a szerkesztő „Tartalom korlátozása” dobozában állítod be). Nem olvassa a teljes bejegyzéstípusra szóló szabályokat és a kategóriákhoz kötött korlátozásokat. Ha ezeket is tartalmazó összesített képet akarsz, használd az `rcp_get_post_restrictions()` függvényt.

- `$post_id` (egész): a bejegyzés azonosítója. Alapérték: `0`.

Lehetséges visszatérési értékek:

- `false`: régi érték, amikor a meta `all` (nincs szintkorlátozás).
- `'any'`: bármelyik tagsági szint.
- `'any-paid'`: bármelyik fizetős szint.
- tömb: egy vagy több tagsági szint azonosítója.
- üres vagy más hamis érték, ha a bejegyzésen nincs szintkorlátozás.

```php
$levels = rcp_get_content_subscription_levels( get_the_ID() );

if ( 'any-paid' === $levels ) {
	// Bármelyik fizetős szint kell.
}

if ( is_array( $levels ) && in_array( 3, $levels, true ) ) {
	// A 3-as szint szükséges.
}
```

A bejegyzéstípus szintű szabályokat is magában foglaló lekérdezés:

```php
$levels = rcp_get_post_restrictions( get_the_ID() );
// A membership_levels kulcs tartalmazza a bejegyzéstípus szabályait is.
```

## rcp_get_discount()

Egy kedvezménykódot kér le azonosító alapján. Siker esetén `RCP_Discount` objektumot ad, hiba esetén `false`-t.

- `$discount_id` (egész): a kedvezmény azonosítója.

```php
$discount = rcp_get_discount( 123 );
```

## rcp_get_discount_by()

Egy kedvezménykódot kér le egy oszlop és egy érték párosa alapján. Siker esetén `RCP_Discount` objektumot ad, hiba esetén `false`-t.

- `$column_name` (szöveg): az oszlop neve.
- `$column_value` (bármi): az oszlop értéke.

A `beta_tester` kódú kedvezmény lekérése:

```php
$discount = rcp_get_discount_by( 'code', 'beta_tester' );
```

## rcp_get_discounts()

Kedvezménykódok lekérdezése szűrőkkel. Az `$args` tömb minden eleme elhagyható.

| Kulcs | Jelentés |
|---|---|
| `id` | Csak ezt az azonosítójú kedvezményt adja vissza. |
| `id__in` | Azonosítók tömbje, csak ezeket adja vissza. |
| `id__not_in` | Azonosítók tömbje, ezeket kihagyja. |
| `name` | A kedvezmény neve. |
| `amount` | Az összeg szerinti szűrés. |
| `unit` | Az egység szerinti szűrés (`percentage` vagy `flat`). |
| `code` | A kód szerinti szűrés. |
| `status` | `active` vagy `disabled`. |
| `one_time` | `1`: csak az egyszeri kedvezmények, `0`: csak az ismétlődők. Ha kimarad, mindegyik. |
| `expiration_query` | Lejárati idő szerinti szűrés (`WP_Date_Query` formátum). |
| `date_created_query` | A létrehozás ideje szerinti szűrés (`WP_Date_Query` formátum). |
| `date_modified_query` | Az utolsó módosítás ideje szerinti szűrés (`WP_Date_Query` formátum). |
| `count` | `true`: csak a találatok számát adja, `false`: `RCP_Discount` objektumok tömbjét. Alapérték: `false`. |
| `fields` | A visszaadott mezők (bármelyik oszlopnév). Üresen teljes objektumokat ad. |
| `number` | Legfeljebb ennyi találat. Alapérték: `20`. |
| `offset` | Kihagyott találatok száma. Alapérték: `0`. |
| `orderby` | Rendezés: `id`, `name`, `code`, `use_count`, `max_uses`, `status`, `expiration`, `date_created`, `date_modified`. Alapérték: `id`. |
| `order` | `ASC` vagy `DESC`. Alapérték: `DESC`. |
| `search` | Keresőszó a `name`, `description` és `code` oszlopokban. |

Visszatérési érték: `RCP_Discount` objektumok tömbje, találat nélkül üres tömb.

Legfeljebb 100 aktív kedvezménykód:

```php
$discounts = rcp_get_discounts( array(
	'status' => 'active',
	'number' => 100,
) );
```

Azoknak a kedvezményeknek az azonosítója, amelyek 2000. január 1. és az idei év vége között járnak le:

```php
$discounts = rcp_get_discounts( array(
	'expiration_query' => array(
		'after'     => '2000-01-01 00:00:00',
		'before'    => date( 'Y-12-31 23:59:59' ),
		'inclusive' => true,
	),
	'fields' => 'id',
) );
```
