راهنمایی سریع برای ساخت تاکسونومی های سفارشی در وردپرس

تاکسونومی سفارشی در وردپرس ۳٫۰ به عنوان یک قابلیت هسته ای معرفی شد و به به شما این اجازه را می دهد تا مطالب را با چیزی بیشتر از فقط دسته بندی و برچسب گروه بندی گنید. برای مثال، اگر وبسایتی درباره ی کتاب و فیلم دارید، می توانید از یک تاکسونومی سفارشی برای ژانر آن ها استفاده کنید، و اگر سایتی درباره ی ورزش ها دارید می توانید تاکسونومی ای برای ورزش داشته باشید.

 

در این مطلب، نگاهی به این که تاکسونومی های سفارشی چه هستند، چگونه از آن ها استفاده کنیم و چگونه می توانیم یک تاکسونومی درست کنیم، می اندازیم.

 

دسته بندی ها، برچسب ها، تاکسونومی ها و ترم ها چه هستند؟

درباره ی تفاوت میان برچسب ها و دسته بندی ها و این که تاکسونومی ها در این میان چه جایگاهی دارند اشتباهات زیادی صورت می گیرد. این اشتباهات از آن جا نشعت می گیرد که ما از کلمه ی “دسته بندی کردن” برای چیدن آیتم های مختلف در دسته بندی های مختلف استفاده می کنیم اما در واقع کلمه ای برای چیدن آیتم ها در برچسب ها یا تاکسونومی های مختلف وجود ندارد و ما در همه ی موارد از همان دسته بندی کردن استفاده می کنیم.

 

کلمه ی “تاکسونومی” اصطلاحی چتری است که راهی برای چیدن آیتم ها براساس یک ویژگی مشترک است. ترم  ها اعضای یک تاکسونومی هستند، ویژگی مشترکی که بر آن اساس آیتم ها چیده شده اند. “دسته بندی” و “برچسب” هر دو نوعی تاکسونومی هستند. دسته بندی ها و برچسب های خاص ترم های درون یک تاکسونومی هستند. اگر این مطلب هنوز واضح نیست نگران نباشید به خواندن ادامه دهید.

 

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

 

در واقع فرقی میان دسته بندی و برچسب نیست جز روشی که ما آن ها را به طور معمول استفاده می کنیم.

 

در وردپرس دسته بندی ها به صورت سلسله مراتبی هستند. این یعنی اینکه یک دسته بندی می تواند درون دسته بندی دیگری قرار گیرد. برای مثال، شما می توانید “هنر” را به عنوان یک دسته بندی در سطح بالا داشته باشید و “عکاسی”، “طراحی” و “نقاشی” را به عنوان سطوح پایین تر آن. برچسب ها سلسله مراتبی نیستند. در پنل ادمین، این موضوع در رابط کاربری قابل مشاهده است.

 

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

 

تاکسونومی ها توسط یک پوسته یا افزونه تعریف می شوند و می توانند از هر نوعی که می خواهند باشند. برای همان مثال بلاگ ورزشی، شاید شما یک تاکسونومی چند سطحی داشته باشید به نام “ورزش” و این شامل زیر بخش هایی مانند “هنرهای رزمی”، “ورزش های توپی” و “دو و میدانی” باشد. “هنرهای رزمی” خود نیز شامل زیر مجموعه های “کاراته” و “تکواندو” باشد.

 

شاید بخواهید نام ورزشکاران را به عنوان تاکسونومی استفاده کنید تا به راحتی بتوانید اخبار مربوط به هرکدام را لیست کنید. برای این منظور می توانید از یک تاکسونومی یک سطحی استفاده کنید و آن می تواند شامل ترم های “مایکل جردن”، “میشل شوماخر” و یوسین بلت” باشد.

 

مهم است بدانید هرچند بعضی روش ها بهتر هستند اما این که از تاکسونومی چگونه استفاده می کنید تمام به شما بستگی دارد. یک سایت خبری شاید از دسته بندی ها برای تقسیم مطالب به “ورزشی”، “تجاری” و “غیره” استفاده کند. یک سایت دیگر ممکن است از تاکسونومی “انواع اخبار” به جای “دسته بندی” استفاده کند.

 

ایجاد تاکسونومی ها

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

 

اگر شما از یک پوسته استفاده می کنید باید یک پوسته ی فرزند ایجاد کنید تا مطمئن باشید که تغییری در پوسته ی اصلی ایجاد نمی کنید.

 

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

 

به راحتی می توان با استفاده از تابع ()register_taxonomy یک تاکسونومی ایجاد کرد. مثال:

 

add_action( 'init', 'create_sports_taxonomy' );

function create_sports_taxonomy() {
	register_taxonomy(
		'sports',
		'post',
		array(
			'label' => 'Sports',
			'hierarchical' => true,
		)
	);
}

 

در پنل ادمین به این صورت خواهد بود:

 

sports

یک تاکسونومی چند سطحی ساده

 

این تنها کاری است که ما برای داشتن یک تاکسونومی باید انجام بدهیم.با تغییر خصوصیت hierarchical به false می توانیم یک تاکسونومی یک سطحی داشته باشیم. بیایید تا این کار را با ایجاد یک تاکسونومی برای نسبت دادن ورزشکار به مطالبمان انجام دهیم:

 

add_action( 'init', 'create_athlete_taxonomy' );

function create_athlete_taxonomy() {
	register_taxonomy(
		'athlete',
		'post',
		array(
			'label' => 'Athlete',
			'hierarchical' => false,
		)
	);
}

 

و در پنل ادمین خواهیم دید:

 

athletes

یک تاکسونومی یک سطحی ساده

هر دو مثال خوبی هستند، اما کارهای بسیار دیگری هست که ما می توانیم انجام دهیم. اگر نگاههی به تصاویر بیاندازید میبینید که “Add new category” به “Choose from the most used tags” تغییر کرده و … .

متن خود به خود برای سازگاری با تاکسونومی ما تغییر نمی کند. بیایید به برخی از گزینه های پیشرفته تری که در دست داریم نگاهی بیاندازیم.

سفارشی کردن تاکسونومی ها

تابع ()register_taxonomy سه پارامتر ورودی دارد. پارامتر اول نام نام تاکسونومی است. پارامتر دوم یا رشته ای است که نام نوع پستی که تاکسونومی باید به آن اضافه شود را مشخص میکند یا آرایه از رشته ها که چند نوع را مشخص می کنند. پارامتر سوم آرایه ای از مشخصاتی است که خصوصیات تاکسونومی را مشخص می کنند.

 

برچسب های تاکسونومی

اولین چیزی که به این آرایه ای از خصوصیات اضافه می کنیم برچسب های استفاده شده است. این تمام متن هایی که در تاکسونومی وجود دارد را شکل می دهد.

 

add_action( 'init', 'create_athlete_taxonomy' );

function create_athlete_taxonomy() {
	$labels = array(
		'name'                           => 'Athletes',
		'singular_name'                  => 'Athlete',
		'search_items'                   => 'Search Athletes',
		'all_items'                      => 'All Athletes',
		'edit_item'                      => 'Edit Athlete',
		'update_item'                    => 'Update Athlete',
		'add_new_item'                   => 'Add New Athlete',
		'new_item_name'                  => 'New Athlete Name',
		'menu_name'                      => 'Athlete',
		'view_item'                      => 'View Athlete',
		'popular_items'                  => 'Popular Athlete',
		'separate_items_with_commas'     => 'Separate athletes with commas',
		'add_or_remove_items'            => 'Add or remove athletes',
		'choose_from_most_used'          => 'Choose from the most used athletes',
		'not_found'                      => 'No athletes found'
	);

	register_taxonomy(
		'athlete',
		'post',
		array(
			'label' => __( 'Athlete' ),
			'hierarchical' => false,
			'labels' => $labels
		)
	);
}

 

تابع با تابع اصلی ما جایگزین می شود. تنها چیزی که اضافه کردم برچسب ها هستند، اما به دلیل گزینه های زیاد اندازه ی آرایه بزرگ شده است. برای تمام مثال های آینده من برچسب ها را به منظور خلاصه سازی حذف میکنم.

 

پیدا بودن یا نبودن تاکسونومی

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

  • public: این پارامتر در یک جا چند پارامتر را مقدار می دهد. اگر true باشد تاکسونومی برای کاربران قابل رویت خواهد بود و اگر false باشد فقط در داخل می توان از آن استفاده کرد.
  • show_ui: اگر false باشد جعبه ای که در عکس های بالا بود نمایش داده نمی شوند. تاکسونومی ها می توانند از طریق کد اضافه یا حذف بشوند ام این کار از طریق رابط کاربری ممکن نیست. در حالت پیش فرض مقدار آن برابر مقدار پارامتر public است.
  • show_in_nav_menus: اگر این پارامتر مقدار false را داشته باشد، ترم ها از طریق بخش مدیریت منو ها در وردپرس قابل مشاهده نخواهند بود. به طور  پیش فرض مقدار این پارامتر برابر مقدار پارامتر public است.
  • show_tagcloud: این پارامتر مشخص می کند که آیا ابر برچسب می تواند از این تاکسونومی استفاده کند یا خیر. مقدار پیش فرض این پارامتر برابر مقدار پارامتر public است.
  • show_admin_column: اگر true باشد تاکسونومی در لیست مطالب نوع مطلبی که به آن متصل شده است قابل مشاهده خواهد بود. به طور پیش فرض مقدار آن برابر false است.

 

سلسله مراتب

در بخش آغازین به سلسله مراتب اشاره ای شد. پارامتر hierarchy می تواند true یا false باشد. به طور پیش فرض تاکسونومی ها یک سطحی هستند، پس مقدار آن برابر false است.

 

قوانین بازنویسی

من وارد جزییات زیادی نمی شوم زیرا که قوانین بازنویسی بیشتر از چیزی که ارزشش را دارند دردسر سازند. هرچند گاهی اوقات ممکن است نیاز داشته باشید از آن ها کمی استفاده کنید، مخصوصا اگر از اسامی متغیر برای تاکسونومی استفاده می کنید. اگر بخواهید از نام “Car” استفاده کنید اما URL شما چیز دیگری مانند “car-model” باشد، می توانید قوانین بازنویسی را به صورت زیر تغییر دهید.

 

add_action( 'init', 'create_cars_taxonomy' );

function create_cars_taxonomy() {
	register_taxonomy(
		'cars',
		'post',
		array(
			'label' => 'Cars',
			'hierarchical' => true,
			'rewrite' => array(
				'slug' => 'car-model'
			)
		)
	);
}

 

جمع بندی

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

 

add_action( 'init', 'create_athlete_taxonomy' );

function create_athlete_taxonomy() {
	$labels = array(
		'name'                           => 'Athletes',
		'singular_name'                  => 'Athlete',
		'search_items'                   => 'Search Athletes',
		'all_items'                      => 'All Athletes',
		'edit_item'                      => 'Edit Athlete',
		'update_item'                    => 'Update Athlete',
		'add_new_item'                   => 'Add New Athlete',
		'new_item_name'                  => 'New Athlete Name',
		'menu_name'                      => 'Athlete',
		'view_item'                      => 'View Athlete',
		'popular_items'                  => 'Popular Athlete',
		'separate_items_with_commas'     => 'Separate athletes with commas',
		'add_or_remove_items'            => 'Add or remove athletes',
		'choose_from_most_used'          => 'Choose from the most used athletes',
		'not_found'                      => 'No athletes found'
	);

	register_taxonomy(
		'athlete',
		'post',
		array(
			'label' => __( 'Athlete' ),
			'hierarchical' => false,
			'labels' => $labels,
			'public' => true,
			'show_in_nav_menus' => false,
			'show_tagcloud' => false,
			'show_admin_column' => true,
			'rewrite' => array(
				'slug' => 'athletes'
			)
		)
	);
}

 

نتیجه گیری

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

 

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

 

اگر سوالی در ارتباط با تاکسونومی ها و این که چگونه یکی از آن ها را ایجاد کنید دارید، در بخش نظرات بپرسید.