وردپرس ۴.۴ ، term meta data را معرفی کرده که به شما این امکان را می دهد مقادیر متای مربوط به term ها را در روشی مشابه با post meta data ذخیره کنید . این یک افزودنی بسیار منطقی در وردپرس است که می شد آن را پیش بینی کرد .

تاکنون سیستم های post meta  و comment meta به ما امکان می دادند تا داده های دلخواه را به پست ها و نظرها اضافه کنیم . از این می توان برای افزودن امتیازدهی به نظرها ، نشان دادن حالت خود در زمانی که منتظر یک پست هستید ، افزودن قیمتها به پستهای مربوط به محصولات و سایر اطلاعات مختلف که فکر می کنید به محتوایتان مربوط می شوند استفاده کنید . اکنون در تازه ترین نسخه وردپرس ، meta data را می توانیم به term هایی اضافه کنیم که امکان ایجاد ویژگیهایی مانند تصاویر بندانگشتی دسته بندی پیش فرض در یک شیوه استاندارد شده را برایمان فراهم می کند . در این متن آموزشی چگونگی ویرایش ، به روزرسانی و بازگردانی این meta data ها از term ها را به شما نشان می دهیم .

پشت پرده Term Meta Data

منطق پشت پرده term meta data  چیز تازه ای نیست ، بلکه تاکنون برای پست ها ، نظرها و کاربران استفاده می شده است . برای فعالسازی meta data  برای term ها جدول جدید termmeta معرفی شد . آن ترکیب term_id, meta_key و meta_value به همراه یک meta_id افزایشی را ذخیره می کند .

توابع Meta Data

برای کنترل عملیاتهای ایجاد ، خواندن ، به روزرسانی و حذف ( CRUD ) برای term meta data  معرفی شده اند :

  • add_term_meta() : meta data را اضافه می کند
  • update_term_meta() : meta data موجود را به روز رسانی می کند .
  • delete_term_meta() : meta data را حذف می کند .
  • get_term_meta() : meta data را بازگردانی می کند .

این توابع در پشت پرده  از همان کدی استفاده می کنند که توابع مطابق برای post meta data استفاده می کنند .

چگونه از Term Meta Data  استفاده کنیم ؟

من در یکی از پروژه های اخیر مجبور شدم خاصیت های اضافه ای به term های غیرسلسله مراتبی اختصاص دهم ، که شانس بزرگی برای امتحان ویژگی جدید meta data  است .

در این پروژه برای نمایندگی خانه ها از یک نوع post سفارشی استفاده شده است . ویژگی های یک خانه (برای مثال مبلمان و غیره ) چند term در یک طبقه بندی سفارشی هستند . ویرایشگر اطلاعات منزل می خواست این ویژگی ها را براساس گروهی فهرست بندی کند که خودشان نباید یک ویژگی باشند . بنابراین ، من تصمیم گرفتم که این گروه را با استفاده از term meta data  اضافه کنم .

طبقه بندی که من به کار بردم house_feature بود ، اما اگر می خواهید از term meta data همراه با دسته بندی ها یا برچسب های post استفاده کنید ، می توانید طبقه بندی های  category یا post_tag موجود را به کار ببرید .

ابتدا من طبقه بندی ویژگی خودم را ایجاد کردم :

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

اگر کد مربوط به این مقاله را در فایل functions.php تم خود یا در میان یک افزونه استفاده می کنید ، مطمئن شوید که دامنه متن my_plugin با دامنه متن تم یا افزونه خودتان مطابقت داشته باشد . دامنه متن my_plugin در یک افزونه با یک اسلاگ my_plugin کار خواهد کرد .

گروههایی که من ویژگیهای خانه را به آن ها اختصاص دادم از طریق تنظیمات مدیریت می شوند . آن می تواند یک آرایه ساده هم باشد . من برای خلاصه سازی ، اما معرفی مفید meta data برای نگهداری گروه های در دسترس از آرایه سراسری زیر استفاده می کنم :

توسعه فرم term

برای اختصاص meta data به term ها باید فرم ویرایش term را توسعه دهیم . قسمت پیچیده کار اینجاست که هوکهایی که از این به بعد نیاز داریم به شکلی پویا ساخته می شوند .

افزودن meta data با یک term جدید

برای توسعه فرم برای افزودن term ما از هوک {$taxonomy}_add_form_fields استفاده می کنیم . برای طبقه بندی ما ، آن در house_feature_add_form_fields حل می شود .

این کد یک فرم انتخاب را درست بین فیلدهای فرم اصلی و دکمه submit اضافه می کند .

create term form with meta data field

فرم ایجاد یک term جدید در طبقه بندی سفارشی باید چیزی مانند این باشد .

 

برای ذخیره term meta باید به درون action  هوک بزنیم ، که درزمان ذخیره term جدید راه اندازی می شود .  این بار ما از created_{$taxonomy} استفاده می کنیم .

ما term را از آرایه $_POST که همراه با فرم ارسال شده می گیریم و آن را با استفاده از تابع جدید add_term_meta() ذخیره می کنیم . این نیز مانند add_post_meta() چهار آرگومان می گیرد :

  • $term_id : این id فرم است .
  • $meta_key : meta key
  • $meta_value : value
  • $unique : آیا از key فقط یک بار می توان استفاده کرد ؟ به طور پیش فرض معادل false تنظیم شده است .

من $unique را معادل true تنظیم می کنم ، زیرا می خواهم هر ویژگی خانه تنها در یک گروه فهرست بندی شود .

به روز رسانی یک Term با استفاده از Meta Data

با اینکه Term ها ویژگی های مشابهی دارند ، افزودن یک Term جدید و به روزرسانی یک Term موجود در وردپرس از نظر فنی متفاوت است . بنابراین ، باید یک روتین به روزرسانی هم اضافه کنیم .

ما برای دریافت فیلد مربوط به گروه در فرم ویرایش از هوک {$taxonomy}_edit_form_fields استفاده می کنیم .

علاوه بر افزودن فرم ، باید term data موجود را با استفاده از get_term_meta() بازگردانی و پیش انتخاب کنیم . این تابع سه آرگومان دارد :

  • $term_id : شناسه فرم
  • $key : key متادیتا
  • $single : آیا یک نتیجه منفرد بازگردانی شود یا خیر . به طور پیش فرض معادل false تنظیم شده که یک آرایه بازگردانی می کند .

از آنجایی که من انتظار دارم فقط یک مقدار بازگردانی شود ، $single را معادل true تنظیم می کنم .

حال برای ذخیره  داده ها باید به داخل edited_{$taxonomy} هوک بزنیم .

ما از update_term_meta() برای بازنویسی مقدار موجود به جای افزودن مجموعه جدیدی از متادیتا استفاده می کنیم .

نمایش Term Meta Data در فهرست Term

حال متادیتا ذخیره شده است . بیایید آن را در یک ستون جدید در جدول فهرست term نمایش دهیم . ابتدا ستون و هدر را به جدول اضافه می کنیم . یافتن هوک مناسب برای توسعه دادن یک جدول در داشبورد وردپرس به علت وجود نام های بسیار انعطاف پذیر هوک این بار هم کمی پیچیده است . الگویی که می توانید در اینجا استفاده کنید ، manage_edit-{$taxonomy}_columns است ، حتی اگر این چگونگی تعریف دقیق هوک نباشد .

برای افزودن نظر به فیلدهای ستون ، می توانید از الگوی هوک  manage_{$taxonomy}_custom_column استفاده کنید .

این بار هم برای بازگردانی مقدار از get_term_meta() استفاده می کنیم و سپس به سادگی آن را به محتوای موجود اضافه می کنیم . این کار امکان ضمیمه کردن چیزهای دیگری در اینجا را هم برای  سایر توسعه دهندگان فراهم می کند .

این که بسیاری از term ها مقادیرمشترکی داشتند ، ماهیت پروژه من بود ، بنابراین ، ستون را جورکردنی می کنیم . فقط لازم است آن را به ستون های جورکردنی اضافه کنیم .

حال فهرست term به چیزی مانند این با یک ستون اضافه برای term data شبیه خواهد بود :

term list with meta data

فهرست term همراه با جدول متادیتا

حذف Term Meta Data

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

به هرحال ، اگربه این نتیجه رسیدید که لازم است term meta data را حذف کنید ، می توانید از تابع delete_term_meta() استفاده کنید که از سه آرگومان تشکیل می شود :

  • $term_id : شناسه term
  • $meta_key : meta key
  • $meta_value مقدار پیشین

اگر می خواهید متادیتا را با یک مقدار خاص حذف کنید ، تنها لازم است $meta_value را فراهم کنید.

بازگردانی Term ها به وسیله مقدار Meta

مانند پستها ، می توانید با استفاده از مقادیر term ها را هم بازگردانی کنید . هنگام استفاده از get_terms() یا wp_get_object_terms() پارامتر meta_query را تنظیم کنید .

با کوئری زیر من تمامی ویژگیها در گروه kitchen را بازگردانی می کنم .

نحو meta_query مانند نحو WP_Query است که به شما این امکان را می دهد تا از اپراتورهای مختلف مربوط به compare مانند   NOT LIKE, EXISTS, یا BETWEEN استفاده کنید .

از آنجایی که من از متادیتا برای گروه بندی term هایم استفاده می کنم ، مرتب کردن دوباره نتیجه مثل قبل از طریق متادیتا می تواند کمک زیادی به ما کند . به هرحال ، برخلاف WP_Query ، هنوز نمی توانید از  orderby => meta_value و باید نتایج را پس از بازگردانی آن ها بچینید .

ما برای نمایش term ها و متادیتا از طریق نتایج تکرار می کنیم و باردیگر از get_term_meta() استفاده می کنم .

نتیجه گیری

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

آخرین چیزی که اکنون در مسیرراه دسته بندی دارم از دست می دهم توانایی تنظیم متادیتا برای یک رابطه ویژه term_object است . بگذارید ببینم شما می توانید در نظریات آن را شرح دهید یا خیر .

 

حسن موحد

عاشق طراحی وب سایت هستم و 8 سال هست در این زمینه فعالیت می کنم و تمرکزم بر روی خرسند نگه داشتن مشتری است .

ارسال نظر