# Függvények: korlátozott tartalmak lekérdezése

> Az rcp_get_paid_posts(), rcp_get_post_ids_assigned_to_restricted_terms(), rcp_get_post_restrictions(), rcp_get_restricted_post_ids() és rcp_get_restricted_post_types() 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. Egyik sem azt mondja meg, hogy az adott felhasználó láthatja-e a tartalmat: ahhoz az `rcp_user_can_access()` való.

## rcp_get_paid_posts()

Azoknak a közzétett bejegyzéseknek az azonosítóit adja vissza, amelyeknél a korlátozás dobozban be van kapcsolva a „csak fizetős” jelölő (a `_is_paid` bejegyzés-meta értéke `1`). Azokat nem tartalmazza, amelyek csak egy egész bejegyzéstípusra érvényes szabály miatt fizetősek. Ezekhez bejegyzésenként az `rcp_is_paid_content()` függvény kell.

Paraméter nincs. Visszatérési érték: bejegyzésazonosítók tömbje, üres tömb, ha nincs találat.

```php
$paid_post_ids = rcp_get_paid_posts();

foreach ( $paid_post_ids as $post_id ) {
	// Mindegyik közzétett bejegyzésnél be van állítva a _is_paid meta.
}
```

Kapcsolódik hozzá a `paid_posts` rövidkód és az `rcp_is_paid_content()` függvény.

## rcp_get_post_ids_assigned_to_restricted_terms()

Azoknak a bejegyzéseknek az azonosítóit adja vissza, amelyek olyan taxonómiafogalomhoz (kategória, címke stb.) tartoznak, amelyhez valódi korlátozás van mentve az `rcp_restricted_meta` mezőben. Kihagyja az üres metájú fogalmakat és azokat, amelyeknél csak a régi „None” hozzáférési szint áll (az üres régi metát el is távolíthatja).

Minden nyilvános taxonómiát végigjár. Az eredményt egy napig az `rcp_post_ids_assigned_to_restricted_terms` néven gyorsítótárazza, és törli, ha a bejegyzések vagy a fogalmak korlátozása megváltozik (ugyanakkor, mint az `rcp_get_restricted_post_ids()` gyorsítótára).

Paraméter nincs. Visszatérési érték: bejegyzésazonosítók tömbje, legalább egy korlátozott fogalommal.

```php
$term_restricted = rcp_get_post_ids_assigned_to_restricted_terms();

foreach ( $term_restricted as $post_id ) {
	$restrictions = rcp_get_term_restrictions( /* fogalom azonosítója */ );
}
```

Egy adott fogalom beállításait az `rcp_get_term_restrictions()`, a felhasználó hozzáférését az `rcp_user_can_access_term()` adja meg.

## rcp_get_post_restrictions()

Egy bejegyzés tagsági és hozzáférési követelményeit adja vissza tömbként.

Ha a bejegyzéstípushoz van egész típusra érvényes korlátozás, azt kapod. Ha nincs, a bejegyzés saját korlátozás dobozának értékeit. A taxonómiafogalmak korlátozása nem szerepel benne, azt fogalmanként az `rcp_get_term_restrictions()` adja.

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

Visszatérési érték (tömb), a kulcsok és az alapértékek:

| Kulcs | Jelentés |
|---|---|
| `membership_levels` | Üres szöveg, `any`, `any-paid`, vagy tagsági szint-azonosítók tömbje. |
| `access_level` | A szükséges hozzáférési szint. Alapérték: `0`. |
| `user_level` | A szükséges WordPress-szerepkörök, jogosultságok tömbje. Alapérték: üres tömb. |

```php
$restrictions = rcp_get_post_restrictions( get_the_ID() );

if ( ! empty( $restrictions['membership_levels'] ) ) {
	// A bejegyzéshez meghatározott tagsági szint(ek), vagy bármely/bármely fizetős tagság kell.
}
```

```php
$restrictions = rcp_get_post_restrictions( 100 );
$level        = isset( $restrictions['access_level'] ) ? (int) $restrictions['access_level'] : 0;
```

## rcp_get_restricted_post_ids()

Azoknak a közzétett bejegyzéseknek az azonosítóit adja vissza, amelyeknek van bejegyzésszintű korlátozásuk: fizetős jelölő, tagsági szint, hozzáférési szint vagy régi szintmező. Azokat nem listázza, amelyeket csak taxonómiafogalom vagy egész bejegyzéstípusra érvényes szabály korlátoz.

Az eredmény az `rcp_restricted_post_ids` átmeneti tárolóban (transient) egy napig gyorsítótárazva van. A bővítmény törli, amikor bejegyzést mentesz, kukába teszel vagy visszaállítasz (a fogalmakhoz rendelt bejegyzések gyorsítótárával együtt).

Paraméter nincs. Visszatérési érték: bejegyzésazonosítók tömbje.

```php
$restricted_ids = rcp_get_restricted_post_ids();

if ( in_array( get_the_ID(), $restricted_ids, true ) ) {
	// Ennek a bejegyzésnek van korlátozás dobozban mentett szabálya.
}
```

Érdemes összevetni az `rcp_get_post_ids_assigned_to_restricted_terms()` és az `rcp_is_restricted_content()` függvénnyel.

## rcp_get_restricted_post_types()

Az összes olyan bejegyzéstípust visszaadja, amelyhez egész típusra érvényes korlátozás van mentve a **Restrict Content → Beállítások** oldalon (az egész bejegyzéstípus korlátozása). Az adat az `rcp_restricted_post_types` opcióban van.

Ez beállítási adat, nem felhasználónkénti hozzáférés-ellenőrzés. Egy típus korlátozottságát az `rcp_is_restricted_post_type( $post_type )`, a szabályait az `rcp_get_post_type_restrictions( $post_type )` adja meg. A bejegyzésenkénti szabályok külön vannak, azokhoz az `rcp_get_post_restrictions()` való.

Paraméter nincs. Visszatérési érték (tömb): a kulcsok a bejegyzéstípusok azonosítói, az értékek a korlátozás beállításai (tagsági szintek, hozzáférési szint, fizetős jelölő és hasonlók). Üres tömb, ha nincs beállítva semmi.

```php
$restricted = rcp_get_restricted_post_types();

if ( isset( $restricted['post'] ) ) {
	// A „post” típusra érvényes korlátozás van.
}
```

```php
if ( rcp_is_restricted_post_type( 'page' ) ) {
	$rules = rcp_get_post_type_restrictions( 'page' );
}
```

## rcp_get_term_restrictions()

Egy taxonómiafogalomra (kategória, címke vagy más, a bővítményben engedélyezett taxonómia) mentett korlátozási beállításokat adja vissza. Az `rcp_restricted_meta` fogalom-metát olvassa, és ha az nincs, a régi `rcp_category_meta_{term_id}` opcióra esik vissza.

Csak a beállítást adja vissza, azt nem, hogy a felhasználó megfelel-e a szabályoknak. Ahhoz az `rcp_user_can_access_term()` való.

- `$term_id` (egész): a fogalom azonosítója.

Visszatérési érték (tömb), a gyakori kulcsok (ha be vannak állítva):

| Kulcs | Jelentés |
|---|---|
| `paid_only` | Fizetős tagság kell. |
| `access_level` | A legkisebb hozzáférési szint (egész). Kimarad, ha az értéke `none`. |
| `subscriptions` | A fogalomhoz engedélyezett tagsági szint-azonosítók tömbje. |

Üres tömb, ha a fogalomnak nincs korlátozása.

```php
$restrictions = rcp_get_term_restrictions( $term_id );

if ( ! empty( $restrictions['paid_only'] ) ) {
	// A fogalom csak fizetős tagoknak szól.
}
```

## rcp_has_post_restrictions()

Megmondja, hogy a bejegyzésnek van-e a korlátozás dobozban mentett beállítása (csak a bejegyzés saját metaadata számít). Nem veszi figyelembe az egész bejegyzéstípusra érvényes szabályokat és a taxonómiafogalmak korlátozását. Ha bármilyen korlátozás érdekel, az `rcp_is_restricted_content()`, a nyers követelménytömb pedig az `rcp_get_post_restrictions()` függvény adja.

Ezeket nézi: a „csak fizetős” jelölőt (`_is_paid`), a tagsági szinteket (`rcp_get_content_subscription_levels()`), a WordPress-szerepköröket (`rcp_user_level`) és a hozzáférési szintet (`rcp_access_level`), ha be vannak állítva, és nem „none” értékűek.

- `$post_id` (egész): a bejegyzés azonosítója. Üres vagy nem számérték esetén `false` a válasz.

Visszatérési érték (logikai): `true`, ha a bejegyzésnek van saját korlátozása, különben `false`.

```php
if ( rcp_has_post_restrictions( get_the_ID() ) ) {
	// A bejegyzésnek van bejegyzésszintű korlátozása.
}
```

```php
if ( rcp_is_restricted_content( $post_id ) && ! rcp_has_post_restrictions( $post_id ) ) {
	// A korlátozás a bejegyzéstípusból és/vagy a fogalmakból jön, nem a bejegyzés dobozából.
}
```

## rcp_is_paid_content()

Megmondja, hogy a bejegyzés „csak fizetős”-e, vagyis fizetős tagság kell hozzá, az ingyenes szint nem elég. Először az egész bejegyzéstípusra érvényes fizetős szabályt nézi, utána a bejegyzés `_is_paid` metaadatát a korlátozás dobozból.

Nem mondja meg, hogy a bejegyzés egyáltalán korlátozott-e, és azt sem, hogy az aktuális felhasználó megnézheti-e. Ezekhez az `rcp_is_restricted_content()` és az `rcp_user_can_access()` való.

- `$post_id` (egész): a bejegyzés azonosítója. Ha üres vagy nem egész szám, az aktuális bejegyzést (`get_the_ID()`) használja.

Visszatérési érték (logikai): `true`, ha csak fizetős; különben `false`.

```php
if ( rcp_is_paid_content( get_the_ID() ) ) {
	// Csak fizetős tagoknak.
}
```

### Az rcp_is_paid_content szűrő

Ezen a néven szűrő is van: az `rcp_is_paid_content` szűrővel felülbírálhatod, hogy egy bejegyzés fizetős tartalomnak számít-e.

| Paraméter | Jelentés |
|---|---|
| `$is_paid` (logikai) | Aktív, fizetős előfizetést igényel-e a bejegyzés. |
| `$post_id` (egész) | A vizsgált bejegyzés azonosítója. |

```php
add_filter( 'rcp_is_paid_content', function ( $is_paid, $post_id ) {
	if ( 'tanfolyam' === get_post_type( $post_id ) ) {
		return true;
	}
	return $is_paid;
}, 10, 2 );
```
