WooCommerce Crear cuenta programáticamente / a través de la función

4 minutos de lectura

¿Hay alguna forma de crear un cliente programáticamente como puede hacerlo con un usuario de WordPress? Obviamente, el usuario de WooCommerce comparte algunos de los mismos campos de usuario de WordPress, hay contenido adicional que debería configurarse como dirección de facturación/postal.

¿Alguien ha logrado esto antes? No puedo encontrar nada en la lista de funciones/API de WooCommerce en su sitio web.

EDITAR: Acabo de encontrar esto: http://docs.woothemes.com/wc-apidocs/function-wc_create_new_customer.html

Pero, ¿cómo puedo proporcionar otros detalles de campo (como direcciones)?

El cliente de WooCommerce es esencialmente un usuario de WordPress con metadatos adicionales. Entonces, una vez que se crea el usuario, puede agregarle metadatos usando update_user_meta función. Vaya a Usuarios -> Todos los usuarios, edite uno de los usuarios y luego desplácese hacia abajo para ver los campos.

Código inventado que se proporciona a continuación para darle una idea general de cómo funciona.

$user_id = wc_create_new_customer( $email, $username, $password );

update_user_meta( $user_id, "billing_first_name", 'God' );
update_user_meta( $user_id, "billing_last_name", 'Almighty' );
.... more fields

Aquí está la lista completa de los campos de facturación y envío.

Facturación

  • nombre_de_facturación
  • apellido_facturación
  • compañía_de_facturación
  • Dirección de facturación 1
  • dirección_de_facturación_2
  • ciudad_de_facturación
  • código_postal_facturación
  • país_de_facturación
  • estado de cuenta
  • Correo Electrónico de Facturas
  • teléfono de facturación

Transporte

  • nombre_de_envío
  • shipping_last_name
  • compañía de envios
  • dirección_de_envío_1
  • dirección_de_envío_2
  • ciudad_envio
  • código postal de envío
  • país de envío
  • estado_envio

  • Perfecto gracias. Llegué a la misma conclusión durante el almuerzo, pero marcaré su respuesta para futuros usuarios que la encuentren.

    – Stefan Dunn

    24 de septiembre de 2015 a las 13:46

  • @AnandShah, ¿podría responder con un enlace de donde obtuvo esta lista de campos? por favor hazlo lo antes posible.

    –Shahid Sarwar

    18 de agosto de 2016 a las 10:16

  • docs.woocommerce.com/document/…

    – Anand Shah

    19 de agosto de 2016 a las 7:44

  • Nuevo enlace actualizar_usuario_meta

    – Fil

    5 de febrero de 2020 a las 10:55

  • Por alguna razón, los usuarios creados de esa manera no aparecen en la lista de clientes de WooCommerce en el administrador.

    – Mastarija

    4 de junio de 2021 a las 19:22

Antes de intentar crear un nuevo usuario, veo si ese usuario ya existe y actualizo el usuario existente si lo encuentro. la función get_user_by(field,value) devuelve el objeto de usuario, por lo que si el usuario existe, use su ID para actualizar los metacampos o, si no, cree uno nuevo.

  $email="[email protected]";

        $address = array(
            'first_name' => 'Tester',
            'last_name'  => 'Test',
            'company'    => 'Testing, LLC',
            'email'      => $email,
            'phone'      => '777-777-777-777',
            'address_1'  => '310 S. Main Street',
            'address_2'  => '',
            'city'       => 'Las Vegas',
            'state'      => 'NV',
            'postcode'   => '89000',
            'country'    => 'US'
        );

        $default_password = wp_generate_password();
        $user = get_user_by('login', $email);

        if (!$user = $user->ID) $user = wp_create_user( $email, $default_password, $email );

        update_user_meta( $user, "billing_first_name", $address['first_name'] );
        update_user_meta( $user, "billing_last_name", $address['last_name']);
        update_user_meta( $user, "billing_company", $address['company'] );
        update_user_meta( $user, "billing_email", $address['email'] );
        update_user_meta( $user, "billing_address_1", $address['address_1']);
        update_user_meta( $user, "billing_address_2", $address['address_2'] );
        update_user_meta( $user, "billing_city", $address['city']);
        update_user_meta( $user, "billing_postcode", $address['postcode'] );
        update_user_meta( $user, "billing_country", 'US');
        update_user_meta( $user, "billing_state", $address['state'] );
        update_user_meta( $user, "billing_phone", $address['phone'] );
        update_user_meta( $user, "shipping_first_name", $address['first_name'] );
        update_user_meta( $user, "shipping_last_name", $address['last_name']);
        update_user_meta( $user, "shipping_company", $address['company'] );
        update_user_meta( $user, "shipping_address_1", $address['address_1']);
        update_user_meta( $user, "shipping_address_2", $address['address_2'] );
        update_user_meta( $user, "shipping_city", $address['city']);
        update_user_meta( $user, "shipping_postcode", $address['postcode'] );
        update_user_meta( $user, "shipping_country", 'US');
        update_user_meta( $user, "shipping_state", $address['state'] );

  • Cuando ya tiene índices de campo de dirección parcialmente, puede simplemente ejecutar un foreach bucle con solo 3-4 líneas de códigos en lugar de esas más de 20 líneas de update_user_meta

    – Sohan Zaman

    20 de abril de 2021 a las 11:28

  • Debe usar: wc_create_new_customer ($ correo electrónico, $ nombre de usuario, $ contraseña); en lugar de: ‘wp_create_user ($email, $default_password, $email);’, ¿verdad?

    – Tariq

    28 de abril de 2021 a las 21:06


  • Genial, +1 por tu validación. Además, puede crear una matriz con todos estos campos y luego declarar esto: foreach ($dirección_de_facturación as $clave => $valor) { update_user_meta($usuario, $clave, $valor); } foreach ($shipping_address as $key => $value) { update_user_meta ($user, $key, $value); }

    – Jean Manzo

    6 de agosto de 2021 a las 16:23

¿Ha sido útil esta solución?