I was shown how to create an observer to grab the customer groupID and create a variable that can be added to my email template like this...
<?php namespace Vendor\Module\Observer; use Magento\Framework\Event\Observer; use Magento\Framework\Event\ObserverInterface; class AddCustomerGroupToOrderEmail implements ObserverInterface { protected $_order; public function __construct( \Magento\Sales\Model\Order $order ) { $this->_order = $order; } public function execute(Observer $observer) { $order = $observer->getEvent()->getOrder(); $customerGroupId = $order->getCustomerGroupId(); // You can do additional processing with the customer group if needed. $order->setData('customer_group_id', $customerGroupId); } }
And in my email template, I can then include {{var order.customer_group_id}} to display the customer group ID.
I would like to know I can make the Variable show the customer group NAME instead of the ID number so my employees don't all need to remember what every number means. So for example, if customerGroupId = 0 then it would say Not Logged In, if customerGroupId = 1, then it would say General, etc.
I don't know php very well and have just started using Magento so if anyone can help, I'd really appreciate it.
Thanks.
You can modify your observer to load the customer group name. Update your observer code and add `Magento\Customer\Model\Group` class. Here's a simple version of the updated code:
namespace Vendor\Module\Observer; use Magento\Framework\Event\Observer; use Magento\Framework\Event\ObserverInterface; use Magento\Customer\Model\Group; class AddCustomerGroupToOrderEmail implements ObserverInterface { protected $_order; protected $_group; public function __construct( \Magento\Sales\Model\Order $order, Group $group ) { $this->_order = $order; $this->_group = $group; } public function execute(Observer $observer) { $order = $observer->getEvent()->getOrder(); $customerGroupId = $order->getCustomerGroupId(); $customerGroup = $this->_group->load($customerGroupId); $customerGroupName = $customerGroup->getCustomerGroupCode(); // Set the customer group name to the order data $order->setData('customer_group_name', $customerGroupName); } }
Now, in your email template, you can use `{{var order.customer_group_name}}` to display the customer group name instead of the ID. This way, your employees will see the actual names like Not Logged In or General. Hope this helps
Hey,
You can add the condition in the email template and display the group name use condition like below in the email template,
{{if order.customer_group_id == 1}} <p>Customer Group 1 Name</p> {{/if}}
Thank You!
For some reason it still isn't working right. This is what my Observer file looks like now...
<?php namespace KeystoneCandle\AddGroupEmail\Observer; use Magento\Framework\Event\Observer; use Magento\Framework\Event\ObserverInterface; use Magento\Customer\Model\Group; class AddCustomerGroupToOrderEmail implements ObserverInterface { protected $_order; protected $_group; public function __construct( \Magento\Sales\Model\Order $order, Group $group ) { $this->_order = $order; $this->_group = $group; } public function execute(Observer $observer) { $order = $observer->getEvent()->getOrder(); $customerGroupId = $order->getCustomerGroupId(); $customerGroup = $this->_group->load($customerGroupId); $customerGroupName = $customerGroup->getCustomerGroupCode(); // You can do additional processing with the customer group if needed. $order->setData('customer_group_id', $customerGroupId); $order->setData('customer_group_name', $customerGroupName); } }And this is what I have tried in the email template
<p> Group Name <span style="font-weight: 400;">{{var order.customer_group_name}} {{var order.customer_group_id}} {{if order.customer_group_id == 1}} General{{/if}} {{if order.customer_group_id == 2}} Wholesale{{/if}} </span> </p>Which is a combination of your 2 answers to see which one works but the output is "Group Name 2" (I'm logged in as a wholesale account). So the actual Group Name variable isn't set right somewhere. Can you see what is wrong?
Can anyone see what is wrong with my code and why the Group Name isn't showing up on my emails? The Group ID shows up fine, I just can't figure out how to convert it to the Group Name.
Thanks.
I still haven't gotten the group name to display in my order email templates correctly yet. The CustomerGroupID shows up fine though. Here is the code in my observer file.
<?php namespace KeystoneCandle\AddGroupEmail\Observer; use Magento\Framework\Event\Observer; use Magento\Framework\Event\ObserverInterface; use Magento\Customer\Model\Group; class AddCustomerGroupToOrderEmail implements ObserverInterface { protected $_order; protected $_group; public function __construct( \Magento\Sales\Model\Order $order, Group $group ) { $this->_order = $order; $this->_group = $group; } public function execute(Observer $observer) { $order = $observer->getEvent()->getOrder(); $customerGroupId = $order->getCustomerGroupId(); $customerGroup = $this->_group->load($customerGroupId); $customerGroupName = $customerGroup->getCustomerGroupCode(); // Set the customer group name to the order data $order->setData('customer_group_name', $customerGroupName); } }
and code in my email template is this
Group Name {{var order.customer_group_name}} {{var order.customer_group_id}}
my order emails still come through like this though with just ID number, no name.
It almost seems like my observer file isn't updating when I make an edit. I've run setup:upgrade, setup:di:compile: setup:static-content:deploy -f, cache:clean and flush
Can someone tell me what I'm missing?
Thanks.
Hello, @keystoneke3419
To show the customer group name instead of the ID in your order email template you can follow this steps it will work.
Step-1: Observer Class:
Ensure your observer correctly sets the customer group name in the order data.
<?php namespace KeystoneCandle\AddGroupEmail\Observer; use Magento\Framework\Event\Observer; use Magento\Framework\Event\ObserverInterface; use Magento\Customer\Model\Group; use Magento\Sales\Model\Order; class AddCustomerGroupToOrderEmail implements ObserverInterface { protected $_group; public function __construct( Group $group ) { $this->_group = $group; } public function execute(Observer $observer) { $order = $observer->getEvent()->getOrder(); $customerGroupId = $order->getCustomerGroupId(); $customerGroup = $this->_group->load($customerGroupId); $customerGroupName = $customerGroup->getCustomerGroupCode(); // Set the customer group name to the order data $order->setData('customer_group_name', $customerGroupName); } }
Step-2: Registering the Observer
Ensure you have registered the observer in events.xml in your module:
<!-- app/code/KeystoneCandle/AddGroupEmail/etc/events.xml --> <?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_order_place_after"> <observer name="add_customer_group_to_order_email" instance="KeystoneCandle\AddGroupEmail\Observer\AddCustomerGroupToOrderEmail"/> </event> </config>
Step-3:Email Template
Use the variable customer_group_name set in the observer in your email template.
Group Name: {{var order.customer_group_name}}
By ensuring these steps are correctly implemented, the customer group name should be set and available for use in your email templates. This setup will translate the customer group ID to its name, allowing your employees to see the customer group name directly in the email.
If you've found my answer useful, please give "Kudos" and "Accept as Solution"
Thanks so much for this. I'll get these files updated and see if it works.