Как подключить функцию wp_set_password WordPress с помощью WooCommerce?

Я пытаюсь изменить wp_set_password подключаемую функцию и добавить к ней пользовательское действие:

function wp_set_password( $password, $user_id ) {
    // Keep original WP code
    global $wpdb;

    $hash = wp_hash_password( $password );
    $wpdb->update(
        $wpdb->users,
        array(
            'user_pass'           => $hash,
            'user_activation_key' => '',
        ),
        array( 'ID' => $user_id )
    );

    wp_cache_delete( $user_id, 'users' );

    // and now add your own
    $custom_hash = password_hash( $password, PASSWORD_DEFAULT );
    update_user_meta($user_id, 'user_pass2', $custom_hash);
}

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

Может быть, я вставил его не в то место или я должен позвонить куда-то?

Как подключить функцию wp_set_password() WordPress к WooCommerce?


Изменить

Этот код вообще не срабатывает, я пытался ввести тот же пароль в таблицу пользователей, но ему все равно на мой код и он выполняет действие по умолчанию.


Изменить 2

Я комментирую код в плагине и изменил основной файл pluggable.php в папке wp-includes, и добавил эти 2 строчки.

$custom_hash = $password;
update_user_meta($user_id, 'user_pass2', $custom_hash);

Но это все еще не работает.


Изменить 3

Я даже убрал всю функцию из pluggable.php, до сих пор работает! Я создал имя пользователя и пароль для новых пользователей.

Это должна быть регистрация WooCommerce. Я использую систему авторизации WooCommerce.


Изменить 4

Я использовал систему регистрации WordPress /wp-login.php, и этот код наконец-то работает.

Теперь мне интересно, что касается WooCommerce, где и как я мог бы добиться чего-то подобного, обновив таблицу wp_usermeta чем-то нестандартным.


person iKamy    schedule 31.03.2019    source источник


Ответы (1)


Вы должны всегда избегать перезаписи каких-либо основных файлов, так как вы потеряете свои изменения при обновлении WordPress, и вы можете создать большие проблемы в связанных с этим разумных процессах.

Вы можете попробовать использовать WC_Customer() Доступные методы настройки класса, например:

// Get an instance of the WC_Customer Object from the user ID
$customer = new WC_Customer( $user_id );

// Set password
$customer->set_password( $password );

// Set other metadata
$customer->set_first_name( $first_name );
$customer->set_last_name( $last_name );

// Save to database (and sync cached data)
$customer->save();

Вы можете использовать связанные крючки Woocommerce из класса WC_Customer_Data_Store:


Дополнение. Создайте клиента с помощью Woocommerce:

1) Вы можете использовать функцию wc_create_new_customer(), которая возвращает идентификатор пользователя.

2) Или вы можете использовать пустой экземпляр объекта WC_Customer, используя для него любые доступные методы настройки (и он вернет в конце идентификатор пользователя):

// Get an empty instance of the WC_Customer Object
$customer = new WC_Customer();

// Set username and display name
$customer->set_username( $user_name );
$customer->set_display_name( string $display_name )

// Set user email
$customer->set_email( $user_email );
$customer->set_display_name( $display_name );

// Set First name and last name
$customer->set_first_name( $first_name );
$customer->set_billing_first_name( $first_name );
$customer->set_last_name( $last_name );
$customer->set_billing_last_name( $last_name );

// Set password
$customer->set_password( $password );

// Set other metadata
$customer->set_billing_first_name( $first_name );
$customer->set_billing_last_name( $last_name );

// Save to database - returns the User ID (or a WP Error) 
$user_id = $customer->save();
person LoicTheAztec    schedule 31.03.2019