# Fejlesztőknek: feltétel regisztrálása és példa

> Saját láthatósági feltétel regisztrálása a yaymail_register_conditional_logics hookkal, és egy teljes példa: Vásárlói szerepkör.

A [feltételosztály](https://hub.hellowp.io/hu/plugins/email-customizer-for-woocommerce/fejlesztoknek-feltetel-osztaly/) megírása után regisztrálnod kell, hogy a szerkesztő feltétellistájában megjelenjen. Ez a [Láthatósági feltételek](https://hub.hellowp.io/hu/plugins/email-customizer-for-woocommerce/feltetelek/) kiegészítőhöz tartozik.

## A feltétel regisztrálása

A regisztráció a `yaymail_register_conditional_logics` action hookra kapcsolódik. A hook átadja a regisztrációs objektumot, amelynek `register()` metódusát a feltétel példányának `get_logic_data()` tömbjével hívod meg.

```php
function register_conditional_logic( $conditional_logics ) {
    $conditional_logics->register( NewConditionalLogic::get_instance()->get_logic_data() );
}

add_action( 'yaymail_register_conditional_logics', 'register_conditional_logic' );
```

## Példa: Vásárlói szerepkör feltétel

A példában készítünk egy feltételt, amely:

- **Customer Role** néven jelenik meg a szerkesztőben (a név a kódban megadott felirat, és a fordítástól függ),
- dinamikusan felsorolja az összes WordPress-felhasználói szerepkört (előfizető, vásárló, bolt menedzser és a saját szerepköreid, például B2B),
- a legördülő listából egy szerepkört választhatsz,
- az elemet csak akkor mutatja, ha a vásárló szerepköre egyezik a kiválasztottal.

### 1. lépés: Kódrészlet-bővítmény telepítése

A kódot nem érdemes a téma `functions.php` fájljába tenni. Telepíts egy kódrészlet-kezelő bővítményt, amellyel PHP-snippeteket vehetsz fel.

### 2. lépés: A kódrészlet felvétele

Hozz létre egy új PHP-snippetet, add hozzá az alábbi kódot, és állítsd úgy, hogy mindenhol fusson (ne csak a felületen vagy csak a weboldalon).

```php
namespace YayMailAddonConditionalLogic\ConditionalLogics;

use YayMailAddonConditionalLogic\Abstracts\BaseConditionalLogic;

/**
 * Feltétel: vásárlói szerepkör
 */
class CustomerRoleLogic extends BaseConditionalLogic {
    private static $instance;

    public static function instance() {
        if ( null === static::$instance ) {
            static::$instance = new static();
        }
        return static::$instance;
    }

    protected function __construct() {
        parent::__construct(
            'customer_role', // Egyedi kulcs.
            __( 'Customer Role', 'yaymail' ), // A szerkesztő legördülő listájában látszó név.
            'single_select' // Legördülő lista, egy szerepkör választható.
        );
    }

    public function get_options() {
        global $wp_roles;

        $options = [];
        if ( ! empty( $wp_roles->roles ) ) {
            foreach ( $wp_roles->roles as $role_key => $role_data ) {
                $options[] = [
                    'label' => translate_user_role( $role_data['name'] ),
                    'value' => $role_key,
                ];
            }
        }

        return $options;
    }

    public function check_logic( $args ) {
        $condition       = $args['condition'];
        $order           = $args['order']; // WC_Order objektum.
        $condition_value = $condition['value'];

        // A felhasználó azonosítója a rendelésből.
        $user_id = $order->get_user_id();
        if ( ! $user_id ) {
            return false; // Vendégrendelés, nincs szerepkör.
        }

        // A WP_User objektum.
        $user = get_userdata( $user_id );
        if ( ! $user ) {
            return false;
        }

        // Igaz, ha a vásárló szerepkörei között ott van a kiválasztott.
        return in_array( $condition_value, (array) $user->roles, true );
    }
}

// Regisztrálás.
add_action( 'yaymail_register_conditional_logics', function( $conditional_logics ) {
    $conditional_logics->register( CustomerRoleLogic::instance()->get_logic_data() );
});
```

A `get_options()` a `$wp_roles` globális változóból olvassa ki a szerepköröket, ezért az újonnan létrehozott szerepkörök is megjelennek a listában. A `check_logic()` vendégrendelésnél (nincs felhasználó) `false`-t ad, így a szerepkörhöz kötött elem a vendégvásárlók e-mailjében nem jelenik meg.

### 3. lépés: Az új feltétel ellenőrzése a szerkesztőben

Nyiss meg egy e-mail sablont a szerkesztőben, jelölj ki egy elemet, és add hozzá a feltételt a **Láthatósági feltételek** között. Az új feltétel a listában a megadott néven jelenik meg, a második legördülő listában pedig a szerepkörök közül választhatsz.
