×

آشنایی با term ها در وردپرس و کار با آن ها

آموزش وردپرس

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

term های وردپرس چه هستند؟

برای معرفی term باید با مفهوم taxonomy در وردپرس آشنا باشید. به منوی نوشته ها در پنل وردپرس بروید. این منو دارای چهار زیر منو به شرح زیر هست:

  • همه نوشته ها
  • افزودن نوشته
  • دسته ها
  • برچسب ها

دسته ها و برچسب ها هر کدام یک taxonomy هستند. پس taxonomy برای دسته بندی کردن مطلب استفاده می شود. البته ممکن است نام “دسته ها” غلط انداز باشد. در واقع دسته ها و برچسب ها هر دو برای دسته بندی کردن مطلب استفاده می شوند و از نظر فنی تفاوتی با هم ندارند و هر دو taxonomy محسوب می شوند.

فرض کنیم یک سایت فیلم و سریال داریم که می خواهیم دسته بندی های متفاوتی را برای فیلم ها در نظر بگیریم. مثلا می خواهیم فیلم ها را بر اساس نویسنده، کارگردان، سال ساخت، بازیگران برتر و … دسته بندی کنیم. هر کدام از این موارد یک taxonomy هستند و معیار دسته بندی فیلم محسوب می شوند.

حالا هر taxonomy درون خودش ممکن است یک یا چند دسته داشته باشد. مثلا سال ساخت می تواند ۱۹۹۰، ۱۹۹۱، ۱۹۹۲ و … باشد. به دسته های درونی taxonomy اصطلاحا term گفته می شود. پس سالهای ۱۹۹۰، ۱۹۹۱، ۱۹۹۲ هر کدام یک term برای taxonomy سال ساخت محسوب می شوند.

خوشبختانه در وردپرس هیچ محدودیتی در ویرایش، حذف و یا ایجاد taxonomy ها و term ها نداریم.

 

دسترسی به term های یک پست تایپ

همانطور که مشاهده فرمودید، پست تایپ post یا همان نوشته ها در وردپرس دارای دو taxonomy پیشفرض به نام های دسته ها و برچسب ها می باشد. برای دسترسی به term های یک taxonomy باید روی منوی آن کلیک نمایید. مثلا برای دسترسی به term های دسته های نوشته باید روی دسته ها در منوی نوشته ها کلیک نمایید.

 

terms-in-wordpress

 

به آدرس صفحه نگاه کنید:


https://novintech.info/wp-admin/edit-tags.php?taxonomy=category

 

چنانچه می بینید این صفحه برای مدیریت term های این taxonomy ایجاد شده است. نام این فایل در هسته وردپرس edit-tags.php (موجود در فولدر wp-admin) و مقدار کوئری taxonomy آن برابر category می باشد.

هر taxonomy یک slug یا شناسه دارد. شناسه taxonomy دسته ها، category می باشد. یافتن شناسه taxonomy ها برای کار کردن با آن ضروری است. شناسه برچسب ها post_tag می باشد. در ووکامرس شناسه دسته ها product_cat و شناسه برچسب ها product_tag می باشد.

عنوان این صفحه که دسته ها باشد نام taxonomy است. در قسمت سمت راست می توانیم term جدید ایجاد کنیم. لیست term های موجود برای این taxonomy هم سمت چپ قابل مشاهده می باشد.

 

افزودن term جدید برای یک taxonomy

ابتدا باید وارد صفحه آن taxonomy شویم. در بالا ما وارد صفحه مدیریت taxonomy دسته ها برای پست تایپ نوشته (post) شدیم. هر taxonomy در زیرمنوی پست تایپ خودش وجود دارد.

توسط فرم سمت راست می توانیم term جدید خودمان را وارد کنیم.

مطابق عکس بالا مقادیر زیر را می توانیم برای term جدید خودمان وارد نماییم:

۱- نام term: این مقدار مشخصه ظاهری آن term می باشد و در لیست سمت چپ و همچنین صفحه ویرایش پست تایپ ( یا جاهای دیگر ) نمایش داده می شود.

۲- نامک term: این مقدار slug، شاخص یا شناسه آن term می باشد و در موارد متعدد استفاده می شود. مهم ترین استفاده آن در url صفحه دسته بندی می باشد. مثلا لینک زیر صفحه دسته بندی با دسته توسعه وردپرس می باشد.

https://novintech.info/category/توسعه-وردپرس/

توسعه-وردپرس همان slug یا نامک این term می باشد. وجود خط فاصله در نامک مجاز نیست و اگر هنگام افزودن term از آن استفاده کنیم. وردپرس به صورت خودکار خط فاصله را با خط تیره عوض می کند.

اگر inspect بگیرید و اینپوت نامک را سلکت کنید، مشاهده می کنید که نام این اینپوت همان slug می باشد که در وردپرس فارسی به نامک ترجمه شده است.

۳- دسته ی مادر term: وجود دسته ی مادر نشان از سلسله مراتبی بودن این taxonomy دارد. در وردپرس دو نوع taxonomy داریم:

  1. hierarchical taxonomy یا taxonomy سلسله مراتبی
  2. non-hierarchical taxonomy یا taxonomy غیر سلسله مراتبی

در taxonomy های سلسله مراتبی می توانیم برای term های والد، term های فرزند ایجاد نماییم. مانند taxonomy دسته ها در پست تایپ نوشته . اما taxonomy برچسب های این پست از نوع non-hierarchical می باشند و نمی توانیم برای term های والد، term فرزند در نظر بگیریم. (اصطلاحا فقط ایجاد term های یک سطحی امکان پذیر است)

تصویری از نحوه نمایش نمونه ای از این دو taxonomy را در زیر مشاهده می نمایید. (پست تایپ post)

terms-in-wordpress2

 

هر taxonomy در صفحه ویرایش یا افزودن پست تایپ، در یک متاباکس جداگانه و در سمت چپ صفحه قرار می گیرد. مشاهده می کنید که نحوه نمایش این دو taxonomy با هم متفاوت است. چون اولی hirarchical و سلسله مراتبی است و قابلیت افزودن term های فرزند به term های والد را داراست ولی دومی non-hierarchical و غیرسلسله مراتبی است و فقط می توانیم term های یک سطحی ایجاد کنیم.

اگر term فرزندی برای term والد در نظر بگیریم، آدرس صفحه آرشیو به صورت زیر می باشد:

https://novintech.info/category/بهینه-سازی-دیتابیس-وردپرس/توسعه-وردپرس/

 

در لینک بالا، کلمه category نامک taxonomy می باشد. ( البته همیشه در لینک های وردپرس اینگونه نیست. فقط در صفحات آرشیو، این بخش نشان از نامک taxonomy دارد. در صفحات singular این بخش نشان از نامک پست تایپ دارد). در ادامه لینک، توسعه وردپرس نشان از والد بودن این term دارد و در نهایت بهینه سازی دیتابیس وردپرس، term فرزند بوده و در این صفحه تمامی نوشته هایی که این term را دارند نشان داده خواهد شد.

همچنین هنگامی که یک term فرزند ایجاد می کنید، آن term در جدول term ها، دقیقا در زیر term والد خود قرار گرفته و یک خط تیره کنار آن قرار می گیرد.

۴- توضیح term: در این فیلد می توانید توضیحات موردنظر برای این term را وارد نمایید. توضیحات به صورت پیش فرض مهم نیستند، با این حال برخی از پوسته‌ها ممکن است آنها را نمایش دهند.

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

 

محل ذخیره term ها در دیتابیس وردپرس

term ها در وردپرس تقریبا مشابه پست تایپ ها، کامنت ها و کاربران در نظر گرفته شده اند. با این تفاوت که دو جدول دیگر برای term ها وجود دارد.

اگر وارد دیتابیس وردپرس شوید، مشاهده می کنید که جدول های term به صورت زیر می باشند: (با فرض پیشوند _wp)

  • wp_termmeta
  • wp_terms
  • wp_term_relationships
  • wp_term_taxonomy

این جدول ها حاوی اطلاعات کاملی در مورد term ها می باشند که در زیر بیشتر آن ها را لیست کرده ایم:

  1. نام term
  2. نامک term
  3. والد term
  4. توضیحات term
  5. taxonomy این term
  6. تعداد مطالبی که این term را دارا می باشند
  7. اطلاعات اضافی term
  8. و …

اگر قصد دارید در مورد جدول های دیگر بیشتر بخوانید به این صفحه مراجعه نمایید.

۱- جدول wp_terms

در این جدول اطلاعات بیس یک term ذخیره می شود و دارای چهار ستون است.

  • ستون term_id: این ستون مشخصه یک term می باشد. هر term یک id منحصر به فرد دارد که برای موارد مختلف بالاخص برای اطلاعات اضافی و ارتباط با جدول های دیگر از آن استفاده می شود.
  • ستون name: نام ظاهری term در این ستون ذخیره می شود.
  • ستون slug: نامک term در این ستون ذخیره می شود.
  • ستون term_group: این ستون هیچ کاربردی ندارد و می توانید نادیده بگیرید.

terms-in-wordpress3

همانطور که قبلا گفتیم، در هنگام افزودن یک term جدید، چهار فیلد نام، نامک، دسته مادر و توضیحات وارد می شود (در نصب استاندارد وردپرس و با فرض نبودن هیچ پلاگین) . از این چهار مورد، دو مورد در جدول wp_terms ذخیره شده و باقی موارد (دسته مادر و توضیحات) را باید در جدول های دیگر جستجو کنیم. دقت کنید که تعدد جدول ها برای راحتی استفاده و محدود نشدن توسعه taxonomy ها و term ها می باشد.

وقتی یک term را از طریق پنل حذف می کنیم، رکوردهای مرتبط موجود در جدول های wp_terms و wp_term_taxonomy حذف می شود.

 

۲- جدول wp_term_taxonomy

در این جدول اطلاعات مهمی از term ها ذخیره می شود و دارای ۶ ستون می باشد. در واقع این جدول وظیفه حفظ اطلاعات کاملی پیرامون taxonomy یک term را دارد.

  • ستون term_taxonomy_id: هر رکوردی که به این جدول افزوده می شود، اطلاعات taxonomy یک term می باشد. لذا اصولا باید تعداد رکوردهای این جدول با تعداد رکوردهای جدول wp_terms برابر باشد. ستون term_taxonomy_id در این جدول یک مشخصه برای هر رکوردی است که در این جدول وارد می شود. (معادل term_id در جدول wp_terms)
  • ستون term_id: این ستون آی دی term را در بر دارد تا برای دریافت اطلاعات taxonomy یک term خاص از آن استفاده نماییم.
  • ستون taxonomy: این ستون، نامک taxonomy این ترم را در خودش دارد.
  • ستون description: این ستون، توضیحات آن term را در بر دارد. (همان فیلدی که در هنگام ایجاد term با عنوان توضیحات وارد نمودیم)
  • ستون parent: این ستون term_id والد خودش را دارا می باشد. (همان سلکت باکسی که در هنگام ایجاد term با عنوان دسته مادر وجود داشت)
  • ستون count: این ستون تعداد مطالبی که این term را دارا می باشند نشان می دهد. اگر دقت کنید آخرین ستون جدول term ها در صفحه taxonomy، ستون تعداد می باشد.

terms-in-wordpress4

۳- جدول wp_term_relationships

برای اینکه بتوانیم مطالب با یک term یا taxonomy خاص را دریافت کنیم، نیاز داریم یک ارتباطی بین پست تایپ ها و term ها وجود داشته باشد. جدول wp_term_relationships وظیفه این ارتباط را برعهده دارد.

این جدول حاوی سه ستون به شرح زیر می باشد:

  • ستون object_id: این ستون نگه دارنده آی دی مطلب می باشد. این آی دی به عنوان شناسه مطلب در جدول wp_posts و ستون آی دی وجود دارد.
  • ستون term_taxonomy_id: این ستون به جدول wp_term_taxonomy مرتبط است و آی دی رکورد موجود در آن جدول را در خود دارد (ستون term_taxonomy_id). در واقع ربط دهنده آبجکت های مطلب با اطلاعات term هایش همین ستون می باشد. دقت کنید که رابطه پست تایپ ها با term ها یک رابطه many-to-many می باشد. چون هر مطلب می تواند چند term داشته باشد و هر term می تواند به چند مطلب تعلق یابد.
  • ستون term_order: این ستون برای مرتب سازی term ها در نظر گرفته شده است. (استفاده ای ندارد)

terms-in-wordpress5

۴- جدول wp_termmeta

چنانچه مشاهده کردیم در term ها با taxonomy سلسله مراتبی می توانستیم ۴ مورد و در term ها با taxonomy غیر سلسله مراتبی می توانستیم ۳ مورد اطلاعات در مورد term داشته باشیم. حال اگر term ما به اطلاعات بیشتری نیاز داشته باشد باید چه کنیم. فرضا نام مستعار term و یا تصویر شاخص آن.

خوشبختانه در وردپرس قابلیت دادن اطلاعات اضافی یا meta به term ها نیز داده شده است. (چنانچه به کامنت ها، پست تایپ ها و کاربران داده شده است). جدول wp_termmeta وظیفه حفظ اطلاعات اضافی term ها را بر عهده دارد.

این جدول دارای چهار ستون می باشد:

  • ستون meta_id: این ستون نگه دارنده آی دی هر رکورد می باشد.
  • ستون term_id: آی دی term در این ستون نگه داشته می شود.
  • ستون meta_key: نام یا کلید اطلاعات متا در این ستون ذخیره می شود.
  • ستون meta_value: مقدار اطلاعات متا در این ستون ذخیره می شود.

دقت شود که هر رکورد این جدول، یک اطلاعات اضافی term می باشد. جدول wp_termmeta با term ها یک رابطه ی one-to-many دارد. چون یک term می تواند چند اطلاعات meta داشته باشد ولی یک اطلاعات meta فقط به یک term مربوط است.

سوال: ستون های زیر در کدام جدول هستند و چه وظیفه ای دارند؟

  • parent
  • term_group
  • term_id
  • description
  • slug
  • name
  • meta_key
  • count
  • meta_value
  • term_taxonomy_id
  • taxonomy
  • meta_id
  • term_order
  • object_id

 

کار با term ها در توسعه وردپرس

در وردپرس توابع مختلفی برای کار با term ها وجود دارد. بیشتر این توابع در فایل taxonomy.php موجود در فولدر wp-includes می باشد. برخی از این توابع مانند get_term و get_term_by بسیار پرکاربرد هستند و باقی توابع نیز در شرایط مختلف قابل استفاده و بهره برداری می باشند.

فایل taxonomy.php هسته اصلی کدهای مربوط به taxonomy و term را دارد و اصطلاحا core taxonomy API می باشد.

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

هیچ وقت به کدهای صفحات موجود در فولدر های wp-includes و wp-admin دست نزنید. چون با آپدیت وردپرس، تمامی این فایلها به روز می شوند و تغییرات شما از دست می رود. راه حل آن استفاده از افزونه یا child theme می باشد.

گرفتن id مطالب با term های خاص با استفاده از تابع get_objects_in_term

این تابع آی دی term های مدنظر ما را می گیرد و آی دی مطالب دارای آن term ها را بر می گرداند.

 


get_objects_in_term( int|array $term_ids, string|array $taxonomies, array|string $args = array() )

 

پارامترهای تابع get_objects_in_term:

۱- پارامتر term_ids :

در این پارامتر باید مشخص کنیم که قرار است مطالب با چه term یا term هایی را دریافت کنیم. اگر قرار است یک term باشد، آی دی آن را به صورت integer یا عدد وارد می کنیم و اگر قرار است چند term باشد، کافیست آی دی آن ها را در یک آرایه قرار دهیم و وارد تابع کنیم

 


// get objects by one term - category taxonomy for example

get_objects_in_term( 3, 'category' )

// get objects by multiple term - category taxonomy for example

get_objects_in_term( [3,4,5], 'category' )

 

همانطور که مشاهده فرمودید، برای این کار نیاز به آی دی term ها یا term_id داریم که باید بر حسب نیاز خود بتوانید آن ها را دریافت کنید.

 

۲- پارامتر taxonomies:

این پارامتر برای دریافت نامک taxonomy یا taxonomy ها می باشد. اگر یک term داشته باشیم، طبعا یک taxonomy خواهیم داشت ولی اگر چند term داشته باشیم، در اینصورت ممکن است term های ما مربوط به taxonomy های متفاوتی باشند. در این مورد نیاز است نامک تمام taxonomy های مدنظر را وارد نماییم.

اگر یک taxonomy داشتیم، آن را به صورت رشته و اگر چند مورد داشتیم، همه ی آن ها در یک آرایه قرار داده و وارد تابع می کنیم.

 

 
// get objects by one taxonomy (all terms have same taxonomy) - category taxonomy for example 
get_objects_in_term( 3, 'category' ) 
get_objects_in_term( [3,4,5], 'category' ) 
// get objects by multiple taxonomy (all terms dont have same taxonomy) - category and post_tag taxonomy for example 
get_objects_in_term( [3,4,5], ['category','post_tag'] ) 

 

این پارامتر از این جهت اهمیت دارد که در ابتدای اجرای تابع، نامک taxonomy چک می شود. اگر نامک معتبر بود، تابع ادامه می یابد و یک آرایه حاوی آبجکت آی دی های مربوط به term های مدنظر ما برگردانده می شود. در غیر اینصورت کلاس wp_error هندل می شود و می توانیم دلیل خطا را نیز چاپ کنیم.

فرض کنید ما اشتباها به جای کلمه category از کلمه catagory استفاده کنیم. در اینصورت taxonomy وارد شده معتبر نبوده و wp_error برگردانده می شود:

 

WP_Error Object ( 
	[errors] => Array ( 
		[invalid_taxonomy] => Array ( 
								[۰] => Invalid taxonomy. 
							  ) 
		) 
	[error_data] => Array () 
);

 

۳- پارامتر args:

این پارامتر برای مرتب کردن آبجکت ها استفاده می شود. مثلا مرتب سازی بر حسب ASC (آیدی از کوچک به بزرگ) صورت گیرد یا بر حسب DESC (آیدی از بزرگ به کوچک)

 

//orderby ASC
get_objects_in_term( 30, 'category', array( 'order' => 'ASC' ) );
//orderby DESC
get_objects_in_term( 30, 'category', array( 'order' => 'DESC' ) );

 

گرفتن اطلاعات یک term با استفاده از تابع get_term

این تابع، یک تابع بسیار پرکاربرد در هسته وردپرس می باشد. اگر در خود فایل taxonomy.php نام تابع را جستجو کنید، خواهید دید از این تابع حدود ۱۸ بار در توابع مختلف این فایل استفاده شده است و این خود نشان از اهمیت این تابع دارد.

 


get_term( int|WP_Term|object $term, string $taxonomy = '', string $output = OBJECT, string $filter = 'raw' )

 

این تابع، آی term را می گیرد و آبجکت آن حاوی کلیه اطلاعات آن term در دیتابیس می باشد. در کل در وردپرس، آبجکت ها تمام اطلاعات موجود در دیتابیس را در خود دارند. مانند آبجکت term ، آبجکت post، آبجکت user، آبجکت taxonomy و …

پارامترهای تابع get_term

۱- پارامتر term

در این پارامتر باید مشخص کنیم که اطلاعات مربوط به کدام term را نیاز داریم.

الف) آی دی term: فرض کنید آی دی آن term را داریم و می خواهیم اطلاعاتی مانند slug یا name آن term را داشته باشیم. اگر آی دی را در term وارد نماییم و تابع را چاپ کنیم، کل آبجکت term را مشاهده خواهیم کرد.

 

 
// insert term id in get_term
$term = get_term(30);
print_r($term);

// out
WP_Term Object
(
    [term_id] => 30
    [name] => sample
    [slug] => sample
    [term_group] => 0
    [term_taxonomy_id] => 30
    [taxonomy] => category
    [description] => 
    [parent] => 0
    [count] => 2
    [filter] => raw
)

//access to object parameters
$term_id = $term->term_id;
$name = $term->name;
$slug = $term->slug;
$term_group = $term->term_group;
$term_taxonomy_id = $term->term_taxonomy_id;
$taxonomy = $term->taxonomy;
$description = $term->description;
$parent = $term->parent;
$count = $term->count;

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


مطالب مرتبط