namespace YayMailAddonConditionalLogic\ConditionalLogics;
use YayMailAddonConditionalLogic\Abstracts\BaseConditionalLogic;
/**
* Conditional Logic: Customer Role
*/
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', // Unique key
__( 'Customer Role', 'yaymail' ), // Shown in YayMail dropdown
'single_select' // Dropdown (choose one role)
);
}
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 object
$condition_value = $condition['value'];
// Get user ID from order
$user_id = $order->get_user_id();
if ( ! $user_id ) {
return false; // Guest order, no role
}
// Get WP_User object
$user = get_userdata( $user_id );
if ( ! $user ) {
return false;
}
// Check if customer’s role matches the chosen condition
return in_array( $condition_value, (array) $user->roles, true );
}
}
// Register with YayMail
add_action( 'yaymail_register_conditional_logics', function( $conditional_logics ) {
$conditional_logics->register( CustomerRoleLogic::instance()->get_logic_data() );
});