در ووکامرس، تعدادی برگه جهت سهولت مدیریت مشتریان و محصولات بطور پیش فرض اضافه می شوند و یکی از این برگه ها صفحه اکانت کاربران یا همان صفحه پروفایل کاربران در سایت است که می توانند سفارشات خود را دنبال کنند یا نسبت به تغییر اطلاعات پروفایل خود اقدام کنند. یکی از این فیلدها، فیلد رمزعبور یا همان پسورد است که بطور پیش فرض برای تغییر رمزعبور، کاربر باید رمزعبور فعلی اکانت خود را نیز وارد کند تا بتواند رمزعبور جدیدی تعیین کند. اینکار باعث امنیت بیشتر اکانت ها می شود اما اگر قصد داشته باشید به کاربران اجازه دهید بدون وارد کردن رمزعبور فعلی بتوانند رمزعبور جدیدی وارد کنند در این تاپیک از انجمن بیتاک همراه ما باشید!

پیش از هر اقدامی باید بداند که با انجام اینکار امنیت اکانت های مشتریان شما بسیار کاهش خواهد یافت!
این قسمت از ووکامرس بطور پیچیده ای در مسیر زیر کدنویسی شده است:
plugins/woocommerce/includes/class-wc-form-handler.php
نکته مهم:
برای انجام اینکار شما باید کدنویسی خود افزونه ووکامرس را دستکاری کنید و راهی برای انجام این تغییرات در قالب وجود ندارد! بنابراین با ارائه آپدیت های جدید ووکامرس باید این اقدامات را مجددا انجام دهید!
ابتدا در مسیر plugins/woocommerce/templates/myaccount/form-edit-account.php
کد زیر را پیدا کنید:
<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
<label for="password_current"><?php esc_html_e( 'Current password (leave blank to leave unchanged)', 'woocommerce' ); ?></label>
<input type="password" class="woocommerce-Input woocommerce-Input--password input-text" name="password_current" id="password_current" autocomplete="off" />
</p>
سپس کد زیر را بجای کد بالا قرار دهید:
<?php
// Get userID
$user_id = $user->ID;
// Generate salt
$salt = md5( openssl_random_pseudo_bytes( 32, $cstrong ) . wp_generate_password( 32, true, true ) );
$enc = $user_id . '::' . crypt( $user_id, $salt );
// NOT empty
if ( ! empty ( $enc ) ) {
update_user_meta( $user_id, '_enc', $enc );
}
// Encodes data with MIME base64
$value = base64_encode( $enc );
// NOT empty
if ( ! empty ( $value ) ) {
?>
<input type="hidden" name="password_current" id="password_current" value="<?php echo $value; ?>" />
<?php
} else {
?>
<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
<label for="password_current"><?php esc_html_e( 'Current password (leave blank to leave unchanged)', 'woocommerce' ); ?></label>
<input type="password" class="woocommerce-Input woocommerce-Input--password input-text" name="password_current" id="password_current" autocomplete="off" />
</p>
<?php
}
?>
و بعد از انجام اقدام بالا، کد زیر را به فایل functions.php
قالبتان اضافه کنید تا هر گونه خطا در این خصوص در سایت نمایش داده نشود:
function betalk_filter_check_password( $check, $password, $hash, $user_id ) {
// Only for WooCommerce edit-account endpoint
if ( ! is_wc_endpoint_url( 'edit-account' ) ) return $check;
// Get meta
$enc = get_user_meta( $user_id, '_enc', true );
// NOT empty
if ( ! empty ( $enc ) ) {
// Get parts
$parts = explode( '::', base64_decode( $password ) );
// Compare user ID and data
if ( $parts[0] == $user_id && str_contains( $enc, $parts[1] ) ) {
$check = true;
}
}
return $check;
}
add_filter( 'check_password', 'betalk_filter_check_password', 10, 4 );