Как подключить функцию wp_set_password WordPress к WooCommerce? - PullRequest
1 голос
/ 01 апреля 2019

Я пытаюсь изменить подключаемую функцию 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.ph p, и этот код наконец работает.

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

1 Ответ

1 голос
/ 01 апреля 2019

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

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

// 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 Класс:

  • Для создания пользователя (или регистрации) , расположенного в WC_Customer_Data_Store create() метод
    • действие крючок woocommerce_new_customer
    • фильтр крючок woocommerce_update_customer_args
  • Для обновление пользователя находится в WC_Customer_Data_Storeupdate() метод
    • действие крюк woocommerce_update_customer
    • фильтр крюк woocommerce_update_customer_args

Добавление - Создание клиента с помощью 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();
...