Observador de inicio de sesión: obtenga la dirección después de la redirección de registro
-
16-10-2019 - |
Pregunta
Tengo un observador configurado para el inicio de sesión del cliente, y está disparando exactamente como lo necesito. Necesito tener acceso a la dirección de envío predeterminada del cliente dentro del observador, que cargo a través de:
$defaultShipping = $customer->getPrimaryShippingAddress( );
Esto funciona bien, excepto cuando el usuario se registra por primera vez; la $defaultShipping
es nulo (supongo que en este punto es porque la dirección en sí aún no se ha guardado). He tratado de superar esto guardando explícitamente tanto al cliente como a todas las direcciones del cliente si $defaultShipping
es null
:
if( !$defaultShipping ) {
$customer->save( );
foreach( $customer->getAddresses( ) as $address ) {
// Explicitly save each address (at this point there should only be one,
// but looping just to be safe). This should guarantee an ID for it
// exists
$address->save( );
}
$defaultShipping = $customer->getPrimaryShippingAddress( );
}
Sin embargo, esto sigue dando null
por $defaultShipping
. ¿Estoy haciendo algo mal o hay otra forma de cargar la dirección de envío predeterminada? ¿El cliente no obtiene una dirección de envío predeterminada si sólo registrado (en cambio, debería elegir una dirección de la colección si $defaultShipping
es inicialmente null
?)
Solución
Resulta que estaba un poco apagado. El envío predeterminado no está realmente configurado para clientes recién creados; Las direcciones en sí ya se guardan, como se puede demostrar aquí (dentro del mismo método de observador):
foreach( $customer->getAddresses( ) as $address ) {
echo $address->getId( );
}
die;
Para solucionar mi problema, si el $defaultShipping
El valor era nulo, simplemente tomé la primera dirección de la colección de direcciones del cliente como mi 'envío predeterminado' para usar. Si alguien tiene una mejor solución, no dude en compartir.