PrimoCRM uitbreiden
Alles wat uitbreidbaar is in PrimoCRM wordt verzameld via een WordPress-filter, zodat je add-on zich hierin registreert zonder core-aanpassingen. Dit zijn dezelfde patronen die first-party Pro-functies gebruiken. Bekijk de volledige lijst in Acties en Filters.
Reageren op een gebeurtenis
Section titled “Reageren op een gebeurtenis”De eenvoudigste uitbreiding is het reageren op iets dat is gebeurd. Gebruik hiervoor de actiehooks.
add_action( 'primocrm_contact_tag_added', function ( $contact_id, $tag_id ) { // Synchroniseer de tagwijziging naar een extern systeem.}, 10, 2 );Een aangepast formulierveldtype registreren
Section titled “Een aangepast formulierveldtype registreren”Voeg een klasse toe die de veldinterface implementeert en registreer deze vervolgens bij
primocrm_form_field_types.
add_filter( 'primocrm_form_field_types', function ( $fields ) { $fields['signature'] = MySignatureField::class; return $fields;} );Jouw klasse implementeert dezelfde interface als de standaard veldtypes (een type()
methode en logica voor weergave en opschoning). Gebruik de ingebouwde velden onder
includes/modules/forms/Fields/Types als referentie. Het nieuwe type verschijnt dan in
het palet van de formulierbouwer. Zie Veldtypes.
Een migratiebron registreren
Section titled “Een migratiebron registreren”Een migratiebron leest één extern systeem uit en normaliseert dit naar PrimoCRM
contacten, lijsten, tags en aangepaste velden. Implementeer het broncontract en
registreer dit bij primocrm_migration_sources.
add_filter( 'primocrm_migration_sources', function ( $sources ) { $sources['mailpoet'] = new MailPoetSource(); return $sources;} );Het register laat automatisch alles vallen wat de broninterface niet implementeert, zodat een defecte add-on de importeur niet kan laten crashen. De gratis plug-in wordt geleverd met CSV- en FluentCRM-bronnen als referentie. Zie Vanuit een andere CRM.
Een e-mailverzender aanleveren
Section titled “Een e-mailverzender aanleveren”Het verzenden wordt geleid via het primocrm_smtp_send filter. Retourneer een truthy
resultaat om aan te geven dat je de verzending hebt afgehandeld, een WP_Error bij een
fout, of de binnenkomende waarde om de verzending door te zetten. Dit is precies hoe de
Pro ESP-providers aansluiten.
add_filter( 'primocrm_smtp_send', function ( $result, $provider, $atts, $settings ) { if ( $provider !== 'myesp' ) { return $result; // niet van ons; laat de volgende handler beslissen } $ok = my_esp_send( $atts['to'], $atts['subject'], $atts['message'], $settings ); return $ok ? true : new WP_Error( 'myesp_failed', 'Verzenden mislukt' );}, 10, 4 );Wanneer geen enkele handler de verzending claimt, valt PrimoCRM terug op de standaard WordPress-mailer, zodat een niet-geconfigureerde of verlopen site nog steeds kan bezorgen. Zie Verzenden en E-mailbezorging.
Velden en operators voor de voorwaardenbouwer toevoegen
Section titled “Velden en operators voor de voorwaardenbouwer toevoegen”Breid de automatiseringsvoorwaardenbouwer uit door te filteren op primocrm_condition_options.
De waarde bevat een fields array en een operators array.
add_filter( 'primocrm_condition_options', function ( $opts ) { $opts['fields'][] = [ 'key' => 'life_time_value', 'label' => 'Lifetime value', 'type' => 'number', ]; $opts['operators'][] = [ 'key' => '>', 'label' => 'Groter dan' ]; return $opts;} );Dit is hoe Pro zijn commerce-velden toevoegt. Zie Voorwaarden en Vertakkingen.
Een automatiseringstrigger registreren
Section titled “Een automatiseringstrigger registreren”Triggers worden verzameld via primocrm_automation_triggers en verschijnen in de
automatiseringskiezer. Het ondersteunde pad is het uitbreiden van BaseTrigger, die
zichzelf automatisch registreert bij dat filter. Dit is precies hoe de ingebouwde
integraties voor Contact Form 7, WPForms en Fluent Forms werken.
Breid BaseTrigger uit, stel een unieke triggerName in, beschrijf de trigger in
getTrigger() en koppel je eigen gebeurtenis. Wanneer de gebeurtenis plaatsvindt, los
je het contact op en plaats je dit in een automatisering die jouw trigger gebruikt.
use PrimoCRM\modules\automations\Triggers\BaseTrigger;use PrimoCRM\modules\automations\Triggers\Forms\ResolvesContactFromForm;use PrimoCRM\modules\automations\AutomationProcessor;
class SuperFormsSubmittedTrigger extends BaseTrigger{ use ResolvesContactFromForm; // een contact zoeken of aanmaken op basis van e-mail
public function __construct() { $this->triggerName = 'superforms_submitted'; $this->actionArgNum = 1; parent::__construct(); // registreert zichzelf automatisch bij primocrm_automation_triggers
// Koppel de verzendactie van JOUW formulierplug-in: add_action( 'superforms_after_submit', [ $this, 'onSubmit' ], 10, 1 ); }
// Metadatering die de trigger weergeeft in de automatiseringskiezer. public function getTrigger() { return [ 'category' => 'Forms', 'label' => 'SuperForms Submitted', 'description' => 'Wordt geactiveerd wanneer een SuperForms-formulier wordt verzonden', 'icon' => 'document-text', ]; }
public function onSubmit( $submission ) { $email = $submission['email'] ?? ''; $first = $submission['first_name'] ?? ''; $last = $submission['last_name'] ?? '';
// Los het contact op of maak het aan (activeert primocrm_contact_created bij aanmaak). $contact_id = $this->resolveContactFromForm( $email, $first, $last, 'superforms' ); if ( ! $contact_id ) { return; }
// Voeg het contact toe aan elke actieve automatisering die deze trigger gebruikt. $processor = AutomationProcessor::getInstance(); foreach ( $processor->findAutomationsByTrigger( $this->triggerName ) as $automation ) { $processor->enterContact( $automation->id, $contact_id, $this->triggerName ); } }
public function handle( ...$args ) {}}
// Instantieer eenmalig, nadat je formulierplug-in is geladen, zodat deze zichzelf registreert.add_action( 'plugins_loaded', function () { new SuperFormsSubmittedTrigger();}, 20 );Jouw trigger verschijnt nu in de automatiseringsbouwer, en een verzending maakt of werkt het PrimoCRM-contact bij en voert eventuele bijbehorende automatiseringen uit.
De trigger beschikbaar maken in het Gratis abonnement
Section titled “De trigger beschikbaar maken in het Gratis abonnement”Nieuwe triggersleutels worden standaard beschouwd als Pro (fail closed), waardoor ze als vergrendeld worden weergegeven in de gratis versie. Als je integratie moet werken in het gratis abonnement, voeg dan de sleutel toe aan de lijst met gratis toegestane items:
add_filter( 'primocrm_free_triggers', function ( $keys ) { $keys[] = 'superforms_submitted'; return $keys;} );Een actie registreren
Section titled “Een actie registreren”Aangepaste acties volgen dezelfde structuur voor primocrm_automation_actions
(breid de basisactieklasse uit, beschrijf deze en implementeer de stap). Gebruik de core-acties
onder includes/modules/automations/Actions als werkende referenties, en voeg de sleutel toe aan
primocrm_free_actions als deze gratis moet zijn.
Integreren vanuit een extern systeem
Section titled “Integreren vanuit een extern systeem”Als het integrerende systeem niet op dezelfde WordPress-site draait, gebruik dan de
REST API in plaats van een triggerklasse. Maak of werk een
contact bij met een geauthenticeerde POST /wp-json/primocrm/v1/contacts. Schrijf niet
rechtstreeks naar de databasetabellen van PrimoCRM; het REST-eindpunt en de triggerklassen
zijn de ondersteunde oppervlakken en zorgen ervoor dat je integratie blijft werken bij updates.
Kiezen of jouw functie gratis is
Section titled “Kiezen of jouw functie gratis is”Alles wat niet op de gratis toegestane lijst staat, wordt beschouwd als Pro (fail closed). Als je een trigger of actie toevoegt die beschikbaar moet zijn in het gratis abonnement, voeg dan de sleutel toe aan deze lijst.
add_filter( 'primocrm_free_triggers', function ( $keys ) { $keys[] = 'my_custom_trigger'; return $keys;} );Hetzelfde patroon is van toepassing op primocrm_free_actions en, voor limieten op aantallen,
primocrm_free_limits.
Beheerders-UI injecteren
Section titled “Beheerders-UI injecteren”Om een instellingentabblad of een rij-actie voor campagnes toe te voegen aan de beheerderstoepassing,
gebruik je de JavaScript wp.hooks filters primocrm.settings.tabs en
primocrm.campaigns.rowActions. Deze retourneren descriptors met mount-callbacks in plaats
van React-elementen, zodat je UI kan renderen in zijn eigen root, ongeacht de React-versie.
Zie Acties en Filters.