# Egyéni dinamikus adat címke

> Saját dinamikus adat címke regisztrálása és megjelenítése szűrőkkel, valamint a bricks_render_dynamic_data függvény használata.

Fejlesztőként saját dinamikus adat címkét is létrehozhatsz, amely a szerkesztő dinamikus adatok listájában a többi mellett jelenik meg. A példában a címke felirata „My Dynamic Data”, és egy saját csoportban látszik.

## 1. lépés: a címke regisztrálása

A címkét a `bricks/dynamic_tags_list` szűrővel add hozzá a szerkesztő listájához. A címke neve legyen egyedi, ezért érdemes előtagot adni neki:

```php
add_filter( 'bricks/dynamic_tags_list', 'add_my_tag_to_builder' );

function add_my_tag_to_builder( $tags ) {
  $tags[] = [
    'name'  => '{my_dd_tag}',
    'label' => 'My Dynamic Data',
    'group' => 'My Dynamic Data Group',
  ];

  return $tags;
}
```

## 2. lépés: a megjelenítés bekötése szűrőkre

### A bricks/dynamic_data/render_tag szűrő

Ezt akkor hívja a Bricks, amikor a `\Bricks\Integrations\Dynamic_Data\Providers::render_tag()` egyetlen címkét értelmez:

```php
add_filter( 'bricks/dynamic_data/render_tag', 'get_my_tag_value', 20, 3 );

function get_my_tag_value( $tag, $post, $context = 'text' ) {
  if ( ! is_string( $tag ) ) {
    return $tag;
  }

  // A $tag a címke neve a külső kapcsos zárójelek nélkül
  $clean_tag = str_replace( [ '{', '}' ], '', $tag );

  // Csak a my_dd_tag címkét keressük
  if ( $clean_tag !== 'my_dd_tag' ) {
    return $tag;
  }

  // Ide jön a saját logikád; a run_my_dd_tag_logic() függvényt neked kell megírnod
  $value = run_my_dd_tag_logic();

  return $value;
}

function run_my_dd_tag_logic() {
  $my_value = 'My dynamic data value:';

  return $my_value;
}
```

Ha a címke argumentumot is fogad (például `my_dd_tag:arg1`), a logikát ennek megfelelően kell módosítani. Egy egyszerű PHP-példa:

```php
add_filter( 'bricks/dynamic_data/render_tag', 'get_my_tag_value', 20, 3 );

function get_my_tag_value( $tag, $post, $context = 'text' ) {
  if ( ! is_string( $tag ) ) {
    return $tag;
  }

  $clean_tag = str_replace( [ '{', '}' ], '', $tag );

  // Csak a my_dd_tag: előtagú címkét keressük
  if ( strpos( $clean_tag, 'my_dd_tag:' ) !== 0 ) {
    return $tag;
  }

  // Az argumentum kinyerése
  $argument = str_replace( 'my_dd_tag:', '', $clean_tag );

  $value = run_my_dd_tag_logic( $argument );

  return $value;
}

function run_my_dd_tag_logic( $argument ) {
  $my_value = 'My dynamic data value: ' . $argument;

  return $my_value;
}
```

Összetettebb esetben a logikát igényeid szerint alakíthatod.

### A bricks/dynamic_data/render_content és a bricks/frontend/render_data szűrő

Ezeket akkor használja a Bricks, amikor a `\Bricks\Integrations\Dynamic_Data\Providers::render_content()` olyan szöveget értelmez, amelyben többféle dinamikus címke is lehet. Ilyen feladatot végez például a `bricks_render_dynamic_data()` függvény is:

```php
add_filter( 'bricks/dynamic_data/render_content', 'render_my_tag', 20, 3 );
add_filter( 'bricks/frontend/render_data', 'render_my_tag', 20, 2 );

function render_my_tag( $content, $post, $context = 'text' ) {
  // A $content tartalmazhat HTML-t és más dinamikus címkéket is
  // Csak a {my_dd_tag} címkét keressük
  if ( strpos( $content, '{my_dd_tag}' ) === false ) {
    return $content;
  }

  $my_value = run_my_dd_tag_logic();

  // A címke lecserélése a megjelenítendő értékre
  $content = str_replace( '{my_dd_tag}', $my_value, $content );

  return $content;
}
```

Argumentumos címkénél reguláris kifejezéssel kereshetsz:

```php
add_filter( 'bricks/dynamic_data/render_content', 'render_my_tag', 20, 3 );
add_filter( 'bricks/frontend/render_data', 'render_my_tag', 20, 2 );

function render_my_tag( $content, $post, $context = 'text' ) {
  // Csak akkor megyünk tovább, ha van {my_dd_tag: kezdetű címke
  if ( strpos( $content, '{my_dd_tag:' ) === false ) {
    return $content;
  }

  preg_match_all( '/{(my_dd_tag:[^}]+)}/', $content, $matches );

  // Ha nincs találat, az eredeti szöveget adjuk vissza
  if ( empty( $matches[0] ) ) {
    return $content;
  }

  foreach ( $matches[1] as $key => $match ) {
    $tag = $matches[0][ $key ];

    // A $match a címke neve kapcsos zárójelek nélkül; a korábbi függvényt újra felhasználhatod
    $value = get_my_tag_value( $match, $post, $context );

    $content = str_replace( $tag, $value, $content );
  }

  return $content;
}
```

## A bricks_render_dynamic_data függvény

Ez a segédfüggvény egy szövegben lecseréli a dinamikus adat címkéket a tartalmukra:

```php
echo bricks_render_dynamic_data( $content, $post_id, $context );
```

| Paraméter | Jelentés |
| --- | --- |
| `$content` (kötelező) | A dinamikus adat címkéket tartalmazó szöveg. |
| `$post_id` | A bejegyzés azonosítója, ha kell. Alapérték: az aktuális bejegyzés azonosítója. |
| `$context` | A megjelenítés utáni felhasználás környezete: `text`, `link`, `image` vagy `media`. Alapérték: `text`. |

A visszatérési érték a szöveg a címkék helyére behelyettesített tartalommal. Példa:

```php
echo bricks_render_dynamic_data( 'My Post Title: {post_title}' );
```
