add wordpress field

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

برای اینکه بتوانیم فیلد مورد نظر خود را در قسمت پروفایل به نمایش بگذاریم از فیلتر user_contactmethods استفاده کرده و در ادامه تابع خود را اعمال می کنیم.

add_filter('user_contactmethods', function(){});

قصد داریم تا یک فیلد برای دریافت و ذخیره شماره همراه کاربران در نظر بگیریم. پس به صورت زیر عمل می‌کنیم:

add_filter('user_contactmethods', function ($user_contact) {
    $user_contact['mobile'] = 'شماره همراه';
    return $user_contact;
});

ساختار:

-تابع یک ورودی دریافت می‌کند.

-درون تابع با اختصاص دادن کلید (mobile) و عنوان دلخواه (شماره همراه)، آن را return می‌کنیم.

پس از قرار دادن کد، فیلد شماره همراه به قسمت شناسنامه تمام کاربران اضافه خواهد شد.

cellphone field

اضافه کردن فیلد به صفحه ثبت نام کاربر

شاید برای شما مهم باشد که کاربران در زمان ثبت‌نام شماره همراه خود را وارد کنند. برای اینکار از طریق اکشن register_form به فرم ثبت‌نام متصل شده و فیلد خود را اضافه می‌کنیم.

add_action('register_form', function () {
    ?> 
    <p> <label for="mobile">شماره همراه</label> 
        <input type="text" name="mobile" id="mobile"> 
    </p> 
<?php
});

ساختار:

کد بالا صرفا یک لیبل و فیلد از طریق html ایجاد می‌کند.

cellphone register field

حال برای ذخیره‌سازی مقدار ورودی از اکشن user_register (پس از ثبت نام) بصورت زیر استفاده می‌کنیم:

add_action('user_register', function ($user_id) {
     $userdata = array();
     $userdata['ID'] = $user_id;
     $userdata['mobile'] = $_POST['mobile'];
     wp_update_user($userdata);
 });

ساختار:

-تابع یک ورودی که شناسه کاربر است را دریافت می‌کند.

-متغییر userdata که اطلاعات کاربر را دریافت می‌کند مساوی با یک آرایه خالی قرار می‌دهیم.

-شناسه کاربر که از ورودی دریافت شده را مساوی با کلید ID در userdata قرار می‌دهیم.

-مقدار ارسال شده از فیلد شماره همراه را مساوی با کلید mobile در userdata قرار می‌دهیم.

-در انتها با استفاده از تابع wp_update_user() کاربر را با درنظر گرفتن اطلاعات ورودی بروزرسانی می‌کنیم.

اجباری کردن فیلد در زمان ثبت‌نام

برای اجباری کردن فیلد شماره همراه در زمان ثبت نام هم بصورت زیر عمل می‌کنیم:

add_filter('registration_errors', function ( $error ) {
     if (empty($_POST['mobile']) || !empty($_POST['mobile']) && trim($_POST['mobile']) == '') {
         $error->add('mobile_error', 'خطا: شماره همراه خود را وارد نمایید.');
     } return $error;
 });

ساختار:

-برای فیلتر registration_errors یک تابع تعریف می‌کنیم.

-تابع یک ورودی که همان خطا می‌باشد را دریافت می‌کند.

-درون تابع تعریف می‌شود که اگر فیلد موردنظر به هر صورت خالی بود با استفاده از شی error یک خطا ایجاد شود.

-درانتها error را return می‌کنیم.

cellphone register field error

دسترسی به متای ذخیره شده

برای اینکه بتوان به متایی که در پایگاه داده ذخیره کرده‌ایم دسترسی داشته باشیم از قطعه کد زیر استفاده می‌کنیم:

$user_mobile = get_user_meta(get_current_user_id(), 'mobile');
echo $user_mobile;

-به وسیله‌ی تابع get_user_meta به متاهای ذخیره شده کاربر در پایگاه داده دسترسی پیدا می‌کنیم.

-این تابع با گرفتن ۲ مقدار اصلی، آیدی کاربر وکلید متا،داده ذخیره شده را بر می‌گرداند.

-برای اینکه آیدی کاربر فعلی را داشته باشیم از تابع get_current_user_id استفاده کردیم.

-کلید متا نیز همان نامی می‌باشد که در ابتدا برای ذخیره شدن در پایگاه داده انتخاب کرده‌ بودیم.

-در انتها داده را درون یک متغییر با نام user_mobile ریخته و با دستور echo آن را به نمایش می‌گذاریم.

دیدگاه

  1. احمدرضا ترابی
    پنجشنبه, ۲۷ تیر, ۱۳۹۸ - ۱۶:۰۶

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

    پاسخ
    1. دانگو وب
      شنبه, ۲۹ تیر, ۱۳۹۸ - ۱۶:۲۷

      سلام
      بله از طریق همین آموزش میشود. باید با توجه به متای ذخیره در پایگاه داده آن را فراخوانی کنید.

      موفق باشید

      پاسخ
  2. نگار رئیسی
    دوشنبه, ۷ مرداد, ۱۳۹۸ - ۱۶:۲۲

    سلام اولا ازتون خیلی خیلی تشکر میکنم بابت این post ، خیلی وقت بود دنبالش بودم ولی مورد به درد بخوری پیدا نکردم تا به post شما برخورد کردم .
    »ن دو تا دراپ دان شهر و استان به صفحه ثبت نامم اضافه کردم … و هم در پیشخوان در شناسنامه کاربر این دو تا فیلد ظاهر شد . مشکلی که دارم این است که این متا داخل دیتابیس ذخیره نمیشود .هرکاری کردم نشد .
    این رو هم نفهمیدم که نوشته بودین “حال برای ذخیره‌سازی مقدار ورودی از اکشن user_register (پس از ثبت نام) بصورت زیر استفاده می‌کنیم:” یعنی user_register همون نام فرم است یا یک action است که عمومیت داره و توی Php موجود است .
    خواهشا منو راهنمایی کنید …… مکشلم فقط ذخیره نشدن در دیتابیس است

    پاسخ
    1. دانگو وب
      چهارشنبه, ۹ مرداد, ۱۳۹۸ - ۱۹:۱۴

      سلام
      لطفا برای حل مشکل از کدهایی که در این نوشته قرار گرفته استفاده کنید. چون آزمایش شده و مشکل ندارد.
      user_register هم یک اکشن در وردپرس است که کار ذخیره سازی اطلاعات کاربر جدید در دیتابیس را برعهده دارد. برای اطلاعات بیشتر در مورد این اکشن میتوانید این لینک را مشاهده کنید.

      پاسخ
  3. محمد
    پنجشنبه, ۳۱ تیر, ۱۴۰۰ - ۱۱:۰۸

    سلام. آموزش بسیاری عالی و کاربردی بود.
    فقط اگه ما بخوایم یه سری فیلد دیگه بذاریم چطور؟
    مثلا بارگذاری عکس (برای پروفایل)
    یا فیلدای انتخابی، چک باکس، رادیو و امثالهم
    برای اونام میشه یه مثال یا آموزش بذارین؟

    پاسخ
    1. دانگو وب
      پنجشنبه, ۳۱ تیر, ۱۴۰۰ - ۱۵:۰۳

      سلام
      روش کار به همین صورت است. ولی چشم بزودی آموزشی قرار می گیرد.

      پاسخ