Skip to main content
Version: v8

Custom Recipient

The Recipient API is meant to provide a unified interface for Carriers. You don't have to use them but it's the best to keep the logic separated.

As an example, default Email Carrier registers a couple of Recipients - User selected from a list, Role, Administrator, Plain text email, etc. They all resolves to a flat array of emails. The Webhook provider registers URL recipients: GET, POST, PUT etc.

Your Custom Recipient may allow to select User from a dropdown and parse list of all selected Users to some kind of UUID, the one which is understood by your Custom Carrier.

Recipient class​

use BracketSpace\Notification\Abstracts;
use BracketSpace\Notification\Defaults\Field;

/**
* ExampleRecipient Recipient
*/
class ExampleRecipient extends Abstracts\Recipient {

/**
* Constructor
*/
public function __construct() {
parent::__construct( [
'slug' => 'recipient_slug',
'name' => __( 'Recipient', 'textdomain' ),
'default_value' => 'default',
] );
}

/**
* Parses raw recipient value to something consumable by the Carrier.
*
* @param string $value Raw value saved by the user.
* @return array Array of resolved values
*/
public function parse_value( $value = '' ) {

if ( empty( $value ) ) {
$value = [ $this->get_default_value() ];
}

$value = do_something_with_the_value( $value );

// Keep in mind you should return an array here.
// This is because you may select a recipient which parses to multiple values.
// Example: User Role recipient may parse to multiple emails.
return [ $value ];

}

/**
* Prints the Recipient field.
*
* @return Field
*/
public function input() {

// You should build an array of options here if you are using SelectField field.
$opts = [
'recipient1' => __( 'Recipient 1', 'textdomain' ),
'recipient2' => __( 'Recipient 2', 'textdomain' ),
];

// You can use other fields as well.
return new Field\SelectField( [
'label' => __( 'My Recipient', 'textdomain' ),
'name' => 'recipient', // Don't change this.
'css_class' => 'recipient-value', // Don't change this.
'value' => $this->get_default_value(),
'pretty' => true,
'options' => $opts,
] );

}

}

Registering the Recipient​

info

Since version 8.0.0, recipients can be registered anytime on notification/init action and it doesn't matter if it's before or after the Carrier is registered.

use BracketSpace\Notification\Register;

add_action( 'notification/init', function() {
// You need to provide the Carrier slug.
Register::recipient( 'carrier-slug', new ExampleRecipient() );
} );