Extension example — vlastní payment method

Use case

Plugin default podporuje 3 payment methods (bank, paypal, check). Tato příručka popisuje, jak přidat čtvrtou — například cryptocurrency wallet nebo Wise/Revolut transfer.

Aktuální stav — hardcoded const

Plugin v 1.2 má payment methods jako konstantu Plugin::PAYMENT_METHODS (immutable PHP const). Pro přidání nové hodnoty potřebujete:

  1. Forknout plugin a upravit const přímo — vhodné pro persistent customizaci.
  2. Patch při runtime přes reflection — křehké, nedoporučeno.
  3. Počkat na hookable variantu — kandidát pro budoucí release (issue #X).

Postup forkování (doporučená cesta)

  1. Vytvořte vlastní fork pluginu v git repository.
  2. V src/Plugin.php rozšiřte const:
public const PAYMENT_METHODS = array('bank', 'paypal', 'check', 'wise', 'crypto');
  1. V src/Admin/AdminManager.php přidejte option do <select> ve dvou render formech (edit + add affiliate).
  2. V dashboard profile form (frontend view DashboardProfileTab.php) přidejte stejně.
  3. Pro každou novou metodu zvažte UI pole pro payment_details (např. crypto wallet address validace, Wise IBAN).
  4. Update i18n .po překlady.

Frontend tab — UI labelu

// V templates/dashboard/tabs/profile.php (nebo Views/DashboardProfileTab.php)
<option value="crypto" <?php selected($affiliate->payment_method, 'crypto'); ?>>
    <?php esc_html_e('Cryptocurrency Wallet', 'affinite-wp-affiliate'); ?>
</option>

Validace v custom validation

Plugin validuje payment_method proti allowlist. Pokud chcete specifickou validaci pro novou metodu (např. crypto wallet address regex), použijte:

add_action('wp_ajax_affinite_update_affiliate_profile', function() {
    if ('crypto' === ($_POST['payment_method'] ?? '')) {
        $details = sanitize_text_field($_POST['payment_details'] ?? '');
        if (!preg_match('/^0x[a-fA-F0-9]{40}$/', $details)) {
            wp_send_json_error('Invalid Ethereum wallet address');
        }
    }
}, 5); // Run before plugin handler (priority 10)

Admin payout flow

Při zpracování payout requestu admin vidí payment_method a payment_details v UI. Manuálně provede transakci přes vlastní crypto exchange / Wise app a poté označí jako processed s transaction ID.

Pro automatizaci (např. crypto auto-payout přes API exchange) napojte hook na payout process action a integrate s exchange API.