Hello there,
I am using hivepress-request and hivepress-marketplace and i dont understand how to add custom tokens.
In my case i need to find the “vendor” username/displayname… that posted an offer.
As i’d like the user who created the request to receive the vendor name (person who applied to request) in the email.
I eventually tried that code to have even debug token but nothing is working ![]()
/**
* Add custom tokens to HivePress email templates
* With error logging for debugging
*/
add_filter('hivepress/v1/emails/tokens', function($tokens, $email) {
// Log all tokens and context for debugging
error_log('========================= HIVEPRESS EMAIL DEBUG =========================');
error_log('Email Class: ' . get_class($email));
error_log('Available Tokens: ' . print_r(array_keys($tokens), true));
// Log the email context
if (isset($email->context) && is_array($email->context)) {
error_log('Email Context Keys: ' . print_r(array_keys($email->context), true));
foreach ($email->context as $key => $value) {
if (is_object($value)) {
error_log('Context Object [' . $key . ']: ' . get_class($value));
// Try to extract more information if it has common methods
if (method_exists($value, 'get_id')) {
error_log(' - ID: ' . $value->get_id());
}
if (method_exists($value, 'get_user__id')) {
error_log(' - User ID: ' . $value->get_user__id());
}
if (method_exists($value, 'get_vendor__id')) {
error_log(' - Vendor ID: ' . $value->get_vendor__id());
}
} else {
$val_str = is_array($value) ? json_encode($value) : (string)$value;
error_log('Context Value [' . $key . ']: ' . substr($val_str, 0, 100));
}
}
}
// Get the vendor object if available in email context
$vendor = null;
// 1. Direct vendor context
if (isset($email->context['vendor'])) {
$vendor = $email->context['vendor'];
error_log('Vendor found directly in context');
}
// 2. Check vendor_id in context
elseif (isset($email->context['vendor_id'])) {
$vendor_id = $email->context['vendor_id'];
// Get vendor by ID
$vendor = \HivePress\Models\Vendor::query()->get_by_id($vendor_id);
error_log('Vendor found from vendor_id: ' . $vendor_id);
}
// 3. Try to get from offer if it exists
elseif (isset($email->context['offer']) && method_exists($email->context['offer'], 'get_user__id')) {
$user_id = $email->context['offer']->get_user__id();
error_log('Trying to get vendor from offer user ID: ' . $user_id);
// Try to get vendor by user ID
$vendor = \HivePress\Models\Vendor::query()->filter(['user' => $user_id])->get_first();
if ($vendor) {
error_log('Vendor found from offer');
}
}
// 4. Try to get from request if it exists
elseif (isset($email->context['request'])) {
$request = $email->context['request'];
error_log('Request found in context - trying to extract vendor');
// Try different approaches to get vendor info from request
if (method_exists($request, 'get_user__id')) {
$user_id = $request->get_user__id();
error_log('Request User ID: ' . $user_id);
// Check if this user is a vendor
$vendor = \HivePress\Models\Vendor::query()->filter(['user' => $user_id])->get_first();
if ($vendor) {
error_log('Vendor found from request user');
}
}
}
// If we have a vendor object, add custom tokens
if ($vendor) {
// Get user ID associated with vendor
$user_id = $vendor->get_user__id();
error_log('Processing vendor with user ID: ' . $user_id);
if ($user_id) {
// Get user object
$user = get_user_by('ID', $user_id);
if ($user) {
// Add custom tokens
$tokens['vendor_username'] = $user->user_login;
$tokens['vendor_display_name'] = $user->display_name;
$tokens['vendor_first_name'] = $user->first_name;
$tokens['vendor_last_name'] = $user->last_name;
$tokens['vendor_email'] = $user->user_email;
error_log('Added vendor tokens: ' . print_r([
'vendor_username' => $user->user_login,
'vendor_display_name' => $user->display_name,
'vendor_first_name' => $user->first_name,
'vendor_last_name' => $user->last_name,
'vendor_email' => $user->user_email,
], true));
}
}
} else {
error_log('No vendor found in email context');
}
error_log('=======================================================================');
return $tokens;
}, 10, 2);
/**
* Debug each email specifically by type for tracking
*/
add_filter('hivepress/v1/emails/order_received', function($args) {
error_log('DEBUG - order_received email is being processed');
error_log('Available tokens: ' . print_r(array_keys($args['tokens']), true));
// Try to add vendor info if available
if (isset($args['tokens']['vendor_id'])) {
$vendor_id = $args['tokens']['vendor_id'];
error_log('Vendor ID found in tokens: ' . $vendor_id);
// Get vendor
$vendor = \HivePress\Models\Vendor::query()->get_by_id($vendor_id);
if ($vendor) {
error_log('Vendor found from vendor_id token');
// Get user ID
$user_id = $vendor->get_user__id();
if ($user_id) {
$user = get_user_by('ID', $user_id);
if ($user) {
// Add custom tokens
$args['tokens']['vendor_username'] = $user->user_login;
$args['tokens']['vendor_display_name'] = $user->display_name;
$args['tokens']['vendor_first_name'] = $user->first_name;
$args['tokens']['vendor_last_name'] = $user->last_name;
$args['tokens']['vendor_email'] = $user->user_email;
error_log('Added vendor tokens to order_received email');
}
}
}
}
return $args;
}, 1000);
add_filter('hivepress/v1/emails/order_completed', function($args) {
error_log('DEBUG - order_completed email is being processed');
error_log('Available tokens: ' . print_r(array_keys($args['tokens']), true));
// Try to add vendor info if available (same logic as above)
if (isset($args['tokens']['vendor_id'])) {
$vendor_id = $args['tokens']['vendor_id'];
error_log('Vendor ID found in tokens: ' . $vendor_id);
// Get vendor
$vendor = \HivePress\Models\Vendor::query()->get_by_id($vendor_id);
if ($vendor) {
error_log('Vendor found from vendor_id token');
// Get user ID
$user_id = $vendor->get_user__id();
if ($user_id) {
$user = get_user_by('ID', $user_id);
if ($user) {
// Add custom tokens
$args['tokens']['vendor_username'] = $user->user_login;
$args['tokens']['vendor_display_name'] = $user->display_name;
$args['tokens']['vendor_first_name'] = $user->first_name;
$args['tokens']['vendor_last_name'] = $user->last_name;
$args['tokens']['vendor_email'] = $user->user_email;
error_log('Added vendor tokens to order_completed email');
}
}
}
}
return $args;
}, 1000);
/**
* Debug offer-related emails
*/
add_filter('hivepress/v1/emails/offer_accepted', function($args) {
error_log('DEBUG - offer_accepted email is being processed');
error_log('Available tokens: ' . print_r(array_keys($args['tokens']), true));
return $args;
}, 1000);
add_filter('hivepress/v1/emails/offer_rejected', function($args) {
error_log('DEBUG - offer_rejected email is being processed');
error_log('Available tokens: ' . print_r(array_keys($args['tokens']), true));
return $args;
}, 1000);
add_filter('hivepress/v1/emails/offer_received', function($args) {
error_log('DEBUG - offer_received email is being processed');
error_log('Available tokens: ' . print_r(array_keys($args['tokens']), true));
return $args;
}, 1000);
Thanks for your help ![]()
lolo
