تغییر نقش کاربری پیشفرض در ووکامرس هنگام خرید یا ثبت نام

5 / 5. تعداد رای: 2

تغییر نقش کاربری پیشفرض در ووکامرس هنگام خرید یا ثبت نام

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

شاید قصد داشته باشید نقش کاربری پیشفرض وردپرس را تغییر دهید. روش کار بسیار ساده هست. کافی‌است وارد بخش تنظیمات > عمومی شوید و نقش کاربری پیشفرض وردپرس را به دلخواه خود تغییر دهید.

اما این نقش کاربری پیشفرض برای ووکامرس قابل استفاده نیست. چرا که اگر ثبت‌نام خودکار هنگام خرید در ووکامرس را فعال کرده باشید یا این‌که از کاربر بخواهید موقع خرید در سایت شما، ابتدا ثبت‌نام کند؛ قطعا نقش کاربری پیشفرض، مشتری خواهد بود. مثلا ما در میهن وردپرس نقش کاربری پیشفرض را برای تمام کاربران، هم‌میهن نامیده‌ایم. حالا استفاده از ووکامرس باعث شده ۲ نقش کاربری متفاوت با نام مشتری و هم‌میهن داشته باشیم.

این موضوع باعث می‌شود هنگام توسعه سایت، به فکر اعطای دسترسی به دو نقش کاربری مختلف باشیم. اما همیشه مشکلات راه‌کارهای ساده‌تری نیز دارند.

تغییر نقش کاربری پیشفرض در ووکامرس

بصورت پیشفرض نقش کاربرانی که در ووکامرس ثبت نام می‌کنند، Role کاربری Customer یا مشتری خواهد بود. اما شاید بخواهید با تغییر نقش کاربر پیشفرض در ووکامرس، یک Role جدید موقع ثبت نام به مشتریان خود دهید.

فرض کنیم یک سایت ووکامرسی دارید و با استفاده از میهن پنل یک پنل کاربری برای سایت خود ساخته‌اید، شاید بخواهید یک افزونه پشتیبانی مثل Awesome Support هم برای ارسال تیکت کاربران روی سایت خود نصب کنید. برای ارسال تیکت توسط کاربران، باید نقش کاربر پشتیبانی را به کاربر دهید اما ووکامرس بصورت پیشفرض نقش مشتری یا Customer را به کاربر ثبت نام شده خواهد داد. این قضیه مشکلاتی برای ثبت تیکت توسط کاربر ارسال می‌کند.

راه‌کار ساده‌تر این هست که نقش کاربری پیشفرض ووکامرس را موقع ثبت‌نام کاربر مشخص کنیم. وردپرس هوک‌ها و فیلتر‌هایی برای انجام چنین کارهایی دارد. مثلا ووکامرس مشخص کرده که با استفاده از یک فیلتر خاص، می‌توانید مشخص کنید که موقع ثبت‌نام در ووکامرس (چه به صورت خودکار و چه ثبت‌نام دستی) چه مشخصه‌هایی در پروفایل کاربر ذخیره شود. یکی از این مشخصه‌ها نقش کاربر هست که دقیقا همین‌جا به‌کار می‌آید. پس بیایید شروع کنیم و نقش کاربری پیشفرض ووکامرس را تغییر دهیم.

استفاده از فیلتر woocommerce_new_customer_data

نام فیلتر مورد نظر در ووکامرس woocommerce_new_customer_data هست. با استفاده از این فیلتر می‌توانیم داده‌های ارسالی موقع ثبت‌نام کاربر در ووکامرس را تغییر دهیم. حالا از همین فیلتر استفاده می‌کنیم تا داده‌ها را تغییر دهیم.

چرا از این فیلتر استفاده کنیم

اگر کدهای افزونه ووکامرس را بررسی کنیم، در فایل \wp-content\plugins\woocommerce\includes\wc-customer-functions.php خط ۱۰۲ را به این شکل مشاهده خواهیم کرد:

$new_customer_data = apply_filters( 'woocommerce_new_customer_data', array(
    'user_login' => $username,
    'user_pass'  => $password,
    'user_email' => $email,
    'role'       => 'customer'
) );

اینجا با یک apply_filter مواجه هستیم. یعنی فیلتری با نام woocommerce_new_customer_data می‌تواند روی داده‌های مشتریان جدید تاثیر‌گذار باشد. پس شروع می‌کنیم. باید role یا همان نقش کاربری را دست‌خوش تغییراتی کنیم.

استفاده از فیلتر

همانطور که می‌دانیم باید برای اضافه کردن یک فیلتر در وردپرس، از add_filter استفاده کنیم. به این شکل:

<?php add_filter( $tag, $function_to_add, $priority, $accepted_args ); ?>

کد بالا باید بعد از <?php قرار بگیرد.

ساخت تابع mihanwp_new_customer_data

به جای $tag باید از نام فیلتر و به جای $function_to_add باید نام تابع مورد نظر خودمان را وارد کنیم. پس باید به این شکل باشد:

add_filter( 'woocommerce_new_customer_data', 'mihanwp_new_customer_data');

حالا باید در تابع mihanwp_new_customer_data شروع به نوشتن کدهای مربوط به داده کنیم. اطلاعاتی را برگردانیم که مربوط به داده مشتری خواهد بود. به این شکل:

function mihanwp_new_customer_data($new_customer_data){
 $new_customer_data['role'] = get_option( 'default_role' );
 return $new_customer_data;
}

طبق کد بالا اعلام کردیم که در آرایه new_customer_data مقدار role را برابر با تنظیمات نقش کاربری پیشفرض وردپرس قرار بده. یعنی نقش کاربری پیشفرض وردپرس با نقش کاربری مشتری ثبت‌نامی در ووکامرس یکسان باشد.

کد نهایی که باید به سایت اضافه کنیم:

به همین راحتی! در نهایت کدهای ما باید به این شکل باشند:

add_filter( 'woocommerce_new_customer_data', 'mihanwp_new_customer_data');

function mihanwp_new_customer_data($new_customer_data){
 $new_customer_data['role'] = get_option( 'default_role' );
 return $new_customer_data;
}

افزودن کد تغییر نقش کاربری پیشفرض در ووکامرس

این کدها باید کجای سایت ما قرار بگیرند؟ فایل توابع قالب وردپرس یا همان functions.php فایلی هست که باید میزبان کدهای جدید باشد. البته می‌توانید یک افزونه اختصاصی بسازید، اما نیازی نیست. فایل توابع قالب منبع ذخیره چنین کدهایی هست.

کاری هست وارد فایل منیجر هاستتان شوید. سپس پوشه public_html و پوشه wp-content را باز کنید. حالا پوشه مربوط به قالب سایت‌تان و در نهایت فایل functions.php را باز کنید.

در انتهای این فایل اگر عبارت ?> وجود دارد، پس باید این کد را یک خط قبل از آخرین خط یعنی ?> قرار دهید. اگر عبارت ?> را ندارید، پس کافی هست کد بالا را در خط پایانی فایل functions.php قرار دهید و فایل را ذخیره کنید.

به همین راحتی! از این پس نقش کاربری پیشفرض مشتریان ووکامرس شما، نقش کاربری پیشفرض انتخاب شده در بخش تنظیمات > عمومی خواهد بود.

انتخاب نقش کاربری پیشفرض در وردپرس

برای این‌کار وارد بخش تنظیمات > عمومی شوید.

تنظیمات > عمومی
تنظیمات > عمومی

حالا از بخش نقش پیش‌فرض کاربر تازه باید نقش کاربری دلخواه خود را انتخاب کنید.

تغییر نقش کاربری پیشفرض در ووکامرس
تغییر نقش کاربری پیشفرض در ووکامرس

به همین راحتی! حالا کاربران تازه سایت ووکامرسی شما، نقش کاربری جدیدی که انتخاب کردید را موقع ثبت‌نام دریافت خواهند کرد.

موفق و پیروز باشید.

نظر شما در این مورد چیه؟

  1. U360608 ۲۷ آبان ۱۴۰۳

    سلام وقت بخیر
    من میخوام وقتی مشتری دیدگاه میفرسته جای مالک تایید شده بنویسه “خریدار محصول” باید چیکار کنم؟

  2. U21429 ۲۸ آذر ۱۴۰۲

    سلام وقت بخیر
    افزونه رزرو نوبت بوکتینک رو نصب کردم و وقتی کاربر نوبت رزرو میکنه، نقشش به مشتری بوکتینک تغییر پیدا میکنه و هیچ تنظیماتی هم نداره که نقش رو تغییر نده. برای این مورد چه راهکاری پیشنهاد میکنید؟
    باتشکر

  3. U315817 ۷ مرداد ۱۴۰۱

    سلام وقت بخیر من این کد رو داخل function.php قرار دادم .
    یبار همینجوری قرار دادم
    یبار داخل
    و از قسمت تنظیمات نقش کاربری رو روی مشترک قرار دادم ولی وقتی کاربر ثبت نام میکنه همین مشتری نمایش داده میشه .
    از افزونه ایتم سکیوریتی هم استفاده میکنم ممکنه از تنظیمات اون باسشه ؟
    لطفا راهنمایی کنید .
    پیشاپیش تشکر