Woocommerce регистрация пользователя после запроса - PullRequest
0 голосов
/ 29 сентября 2018

Я настроил Woocommerce для автоматической регистрации нового клиента при завершении заказа.

Теперь я хочу отправить пароль и другие вещи, которые были сгенерированы третьей стороне, с помощью запроса API POST для созданияодна и та же учетная запись пользователя.

Вещи, которые мне нужно отправить из сгенерированной учетной записи Woocommerce:

  • Адрес электронной почты (используется для электронной почты и входа на сторонний веб-сайт)
  • Имя
  • Фамилия
  • Пароль (необходимо хешировать, так же, как используется в электронной почте новой учетной записи)

Может кто-нибудь показать мне пример, как получить этосделанный?Или указать мне правильное направление?Я просто не могу найти ничего, с чего начать.

Я подумал, добавив Curl на веб-крючок на странице Woocommerce.Но это не отправит пароль без изменений, он просто останется пустым.

Надеюсь, кто-нибудь знает простой способ сделать это.

Спасибо!


Последнее обновление: код, используемый в моих функциях.PHP

class NewCustomerRegistration
{
    private $credentials;

    public function __construct()
    {
        // Use PHP_INT_MAX so that it is the last filter run on this data
        // in case there are other filter changing the password, for example
        add_filter(
            'woocommerce_new_customer_data',
            [$this, 'when_user_is_created'],
            1,
            PHP_INT_MAX
        );
        add_action('woocommerce_new_customer', [$this, 'when_customer_is_created']);
    }

    public function when_user_is_created($customerData)
    {
        $this->credentials = [
            'email'     => $customerData['user_email'],
            'password'  => $customerData['user_pass'],

        ];

        return $customerData;
    }

    public function when_customer_is_created($customerId)
    {
        $customer = get_userdata($customerId);

        /**
         * Perform the required actions with collected data
         *
         * Email: $this->credentials['email']
         * Password: $this->credentials['password']
         * First Name: $customer->first_name
         * Last Name: $customer->last_name
         */

    // Testing sending email function
    $subject = "Test Email with data";
    $email   = "info@mydomain.com";

    $message  = "Hello, {$customer->first_name}\n\n";
    $message .= "Here are your login details for {$customer->first_name} {$customer->last_name}\n\n";
    $message .= "Your company is: {$customer->company}\n\n";
    $message .= "Your username is: {$this->credentials['email']}\n\n";    
    $message .= "Your password is: {$this->credentials['password']}\n\n";
    $message .= "Your email is: {$this->credentials['email']}\n\n";
    $message .= "Your role is: {$customer->role}\n\n";

    $headers = array();

    add_filter( 'wp_mail_content_type', function( $content_type ) {return 'text/html';});
    $headers[] = 'From: My Wordpress Website <info@mydomain.com>'."\r\n";
    wp_mail( $email, $subject, $message, $headers);

   // Reset content-type to avoid conflicts
   remove_filter( 'wp_mail_content_type', 'set_html_content_type' );

    }
}

1 Ответ

0 голосов
/ 30 сентября 2018

Похоже, что сочетание действий woocommerce_created_customer (для электронной почты и пароля) и woocommerce_new_customer (для других сведений о клиенте) может выполнить эту работу за вас.

Я думаю, что вы могли бы сделать что-то вроде ..

class NewCustomerRegistration
{
    private $credentials;

    public function __construct()
    {
        add_action('woocommerce_created_customer', [$this, 'when_user_is_created']);
        add_action('woocommerce_new_customer', [$this, 'when_customer_is_created']);
    }

    public function when_user_is_created($customerId, $customerData)
    {
        $this->credentials = [
            'email'     => $customerData['user_email'],
            'password'  => $customerData['user_pass'],
        ];
    }

    public function when_customer_is_created($customerId)
    {
        $customer = get_userdata($customerId);

        /**
         * Send email with collected data
         *
         * Email: $this->credentials['email']
         * Password: $this->credentials['password']
         * First Name: $customer->first_name
         * Last Name: $customer->last_name
         */
        wp_mail(...);
    }
}

ПРИМЕЧАНИЕ Вероятно, вы должны очистить учетные данные после отправки, чтобы, еслиwoocommerce_new_customer действие вызывается другим пользователем по какой-то причине, учетные данные не отправляются другому пользователю.Возможно, вам также следует добавить некоторые проверки ошибок, просто для вашего здравого смысла.

ОБНОВЛЕНИЕ

Поскольку вы получаете сообщение об ошибке с действием woocommerce_created_customer, вы можете получитьлучшие результаты при прослушивании фильтра woocommerce_new_customer_data.

class NewCustomerRegistration
{
    private $credentials;

    public function __construct()
    {
        // Use PHP_INT_MAX so that it is the last filter run on this data
        // in case there are other filter changing the password, for example
        add_filter(
            'woocommerce_new_customer_data',
            [$this, 'when_user_is_created'],
            1,
            PHP_INT_MAX
        );
        add_action('woocommerce_new_customer', [$this, 'when_customer_is_created']);
    }

    public function when_user_is_created($customerData)
    {
        $this->credentials = [
            'email'     => $customerData['user_email'],
            'password'  => $customerData['user_pass'],
        ];

        return $customerData;
    }

    public function when_customer_is_created($customerId)
    {
        $customer = get_userdata($customerId);

        /**
         * Perform the required actions with collected data
         *
         * Email: $this->credentials['email']
         * Password: $this->credentials['password']
         * First Name: $customer->first_name
         * Last Name: $customer->last_name
         */
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...